plugins - 插件 API

模块简介

插件管理器,提供编排模块中管理插件的能力。

变量(variables)

方法签名(functions)

register

注册插件

类型定义

  1. async function register(
  2. pluginConfigCreator: (ctx: ILowCodePluginContext) => ILowCodePluginConfig,
  3. options?: ILowCodeRegisterOptions,
  4. ): Promise<void>

pluginConfigCreator 是一个 ILowCodePluginConfig 生成函数,ILowCodePluginConfig 中包含了该插件的 init / destroy 等钩子函数,以及 exports 函数用于返回插件对外暴露的值。

另外,pluginConfigCreator 还必须挂载 pluginName 字段,全局确保唯一,否则 register 时会报错,可以选择性挂载 meta 字段,用于描述插件的元数据信息,比如兼容的引擎版本、支持的参数配置、依赖插件声明等。

注:pluginConfigCreator 挂载 pluginName / meta 可以通过低代码工具链的插件脚手架生成,写如 package.json 后将会自动注入到代码中,具体见 插件元数据工程化示例

简单示例

  1. import { plugins } from '@alilc/lowcode-engine';
  2. const builtinPluginRegistry = (ctx: ILowCodePluginContext) => {
  3. return {
  4. async init() {
  5. const { skeleton } = ctx;
  6. // 注册组件面板
  7. const componentsPane = skeleton.add({
  8. area: 'leftArea',
  9. type: 'PanelDock',
  10. name: 'componentsPane',
  11. content: ComponentsPane,
  12. contentProps: {},
  13. props: {
  14. align: 'top',
  15. icon: 'zujianku',
  16. description: '组件库',
  17. },
  18. });
  19. componentsPane?.disable?.();
  20. project.onSimulatorRendererReady(() => {
  21. componentsPane?.enable?.();
  22. })
  23. },
  24. };
  25. }
  26. builtinPluginRegistry.pluginName = 'builtinPluginRegistry';
  27. await plugins.register(builtinPluginRegistry);

使用 exports 示例

  1. import { plugins } from '@alilc/lowcode-engine';
  2. const pluginA = (ctx: ILowCodePluginContext) => {
  3. return {
  4. async init() {},
  5. exports() { return { x: 1, } },
  6. };
  7. }
  8. pluginA.pluginName = 'pluginA';
  9. const pluginB = (ctx: ILowCodePluginContext) => {
  10. return {
  11. async init() {
  12. // 获取 pluginA 的导出值
  13. console.log(ctx.plugins.pluginA.x); // => 1
  14. },
  15. };
  16. }
  17. pluginA.pluginName = 'pluginA';
  18. pluginB.pluginName = 'pluginB';
  19. pluginB.meta = {
  20. dependencies: ['pluginA'],
  21. }
  22. await plugins.register(pluginA);
  23. await plugins.register(pluginB);

注:ctx 是在插件 creator 中获取引擎 API 的上下文,具体定义参见 ILowCodePluginContext

设置兼容引擎版本示例

  1. import { plugins } from '@alilc/lowcode-engine';
  2. const builtinPluginRegistry = (ctx: ILowCodePluginContext) => {
  3. return {
  4. async init() {
  5. ...
  6. },
  7. };
  8. }
  9. builtinPluginRegistry.pluginName = 'builtinPluginRegistry';
  10. builtinPluginRegistry.meta = {
  11. engines: {
  12. lowcodeEngine: '^1.0.0', // 插件需要配合 ^1.0.0 的引擎才可运行
  13. },
  14. }
  15. await plugins.register(builtinPluginRegistry);

设置插件参数版本示例

  1. import { plugins } from '@alilc/lowcode-engine';
  2. const builtinPluginRegistry = (ctx: ILowCodePluginContext) => {
  3. return {
  4. async init() {
  5. ...
  6. },
  7. };
  8. }
  9. builtinPluginRegistry.pluginName = 'builtinPluginRegistry';
  10. builtinPluginRegistry.meta = {
  11. preferenceDeclaration: {
  12. title: 'pluginA 的参数定义',
  13. properties: [
  14. {
  15. key: 'key1',
  16. type: 'string',
  17. description: 'this is description for key1',
  18. },
  19. {
  20. key: 'key2',
  21. type: 'boolean',
  22. description: 'this is description for key2',
  23. },
  24. {
  25. key: 'key3',
  26. type: 'number',
  27. description: 'this is description for key3',
  28. },
  29. {
  30. key: 'key4',
  31. type: 'string',
  32. description: 'this is description for key4',
  33. },
  34. ],
  35. },
  36. }
  37. await plugins.register(builtinPluginRegistry);
  38. // 如何传递参数?
  39. const preference = new Map();
  40. preference.set('builtinPluginRegistry', {
  41. key1: 'abc',
  42. key5: 'willNotPassToPlugin', // 因为 key5 不在插件声明可接受的参数里
  43. });
  44. init(document.getElementById('lce'), engineOptions, preference);

注:

get

获取插件实例

类型定义

  1. function get(pluginName: string): ILowCodePlugin | undefined

调用示例

  1. import { plugins } from '@alilc/lowcode-engine';
  2. plugins.get(builtinPluginRegistry);

getAll

获取所有插件实例

类型定义

  1. function getAll(): ILowCodePlugin[]

调用示例

  1. import { plugins } from '@alilc/lowcode-engine';
  2. plugins.getAll();

has

判断是否已经加载了指定插件

类型定义

  1. function has(pluginName: string): boolean

调用示例

  1. import { plugins } from '@alilc/lowcode-engine';
  2. plugins.has('builtinPluginRegistry');

delete

删除指定插件

类型定义

  1. async function delete(pluginName: string): Promise<boolean>

调用示例

  1. import { plugins } from '@alilc/lowcode-engine';
  2. plugins.delete('builtinPluginRegistry');

事件(events)

相关模块

ILowCodePluginContext

类型定义

  1. export interface ILowCodePluginContext {
  2. skeleton: Skeleton; // 参考面板 API
  3. hotkey: Hotkey; // 参考快捷键 API
  4. logger: Logger; // 参考日志 API
  5. plugins: ILowCodePluginManager; // 参考插件 API
  6. setters: Setters; // 参考设置器 API
  7. config: EngineConfig; // 参考配置 API
  8. material: Material; // 参考物料 API
  9. event: Event; // 参考事件 API
  10. project: Project; // 参考模型 API
  11. preference: IPluginPreferenceMananger;
  12. }

ILowCodePluginConfig

类型定义

  1. export interface ILowCodePluginConfig {
  2. init?(): void;
  3. destroy?(): void;
  4. exports?(): any;
  5. }

插件元数据工程转化示例

your-plugin/package.json

  1. {
  2. "name": "@alilc/lowcode-plugin-debug",
  3. "lcMeta": {
  4. "pluginName": "debug",
  5. "meta": {
  6. "engines": {
  7. "lowcodeEgnine": "^1.0.0"
  8. },
  9. "preferenceDeclaration": { ... }
  10. }
  11. }
  12. }

转换后的结构:

  1. const debug = (ctx: ILowCodePluginContext, options: any) => {
  2. return {};
  3. }
  4. debug.pluginName = 'debug';
  5. debug.meta = {
  6. engines: {
  7. lowcodeEgnine: '^1.51.0',
  8. },
  9. preferenceDeclaration: { ... }
  10. };

使用示例

更多示例参考:https://github.com/alibaba/lowcode-demo/blob/058450edb584d92be6cb665b1f3a9646ba464ffa/src/universal/plugin.tsx#L36