---
title: plugins - æä»¶ API
sidebar_position: 2
---
> **@types** [IPublicApiPlugins](https://github.com/alibaba/lowcode-engine/blob/main/packages/types/src/shell/api/plugins.ts)
> **@since** v1.0.0
## 模åç®ä»
æä»¶ç®¡çå¨ï¼æä¾ç¼ææ¨¡åä¸ç®¡çæä»¶çè½åã
## æ¹æ³
### register
注åæä»¶
```typescript
async function register(
plugin: IPublicTypePlugin,
options?: IPublicTypePluginRegisterOptions,
): Promise
```
ç¸å
³ types:
- [IPublicTypePlugin](https://github.com/alibaba/lowcode-engine/blob/main/packages/types/src/shell/type/plugin.ts)
- [IPublicTypePluginRegisterOptions](https://github.com/alibaba/lowcode-engine/blob/main/packages/types/src/shell/type/plugin-register-options.ts)
å
¶ä¸ç¬¬ä¸ä¸ªåæ° plugin éè¿ä½ä»£ç å·¥å
·é¾çæä»¶èææ¶çæç¼å模æ¿ï¼å¼åè
å¯ä»¥åè[è¿ä¸ªç« è](/site/docs/guide/expand/editor/cli)è¿è¡å建
#### ç®å示ä¾
```typescript
import { plugins } from '@alilc/lowcode-engine';
import { IPublicModelPluginContext } from '@alilc/lowcode-types';
const builtinPluginRegistry = (ctx: IPublicModelPluginContext) => {
return {
async init() {
const { skeleton } = ctx;
// 注åç»ä»¶é¢æ¿
const componentsPane = skeleton.add({
area: 'leftArea',
type: 'PanelDock',
name: 'componentsPane',
content: ComponentsPane,
contentProps: {},
props: {
align: 'top',
icon: 'zujianku',
description: 'ç»ä»¶åº',
},
});
componentsPane?.disable?.();
project.onSimulatorRendererReady(() => {
componentsPane?.enable?.();
})
},
};
}
builtinPluginRegistry.pluginName = 'builtinPluginRegistry';
await plugins.register(builtinPluginRegistry);
```
#### ä½¿ç¨ exports 示ä¾
```typescript
import { plugins } from '@alilc/lowcode-engine';
import { IPublicModelPluginContext } from '@alilc/lowcode-types';
const PluginA = (ctx: IPublicModelPluginContext) => {
return {
async init() {},
exports() { return { x: 1, } },
};
}
PluginA.pluginName = 'PluginA';
const PluginB = (ctx: IPublicModelPluginContext) => {
return {
async init() {
// è·å pluginA ç导åºå¼
console.log(ctx.plugins.PluginA.x); // => 1
},
};
}
PluginA.pluginName = 'pluginA';
PluginB.pluginName = 'PluginB';
PluginB.meta = {
dependencies: ['PluginA'],
}
await plugins.register(PluginA);
await plugins.register(PluginB);
```
> 注ï¼ctx æ¯å¨æä»¶ä¸è·å弿 API çå¯ä¸æ¸ éï¼å
·ä½å®ä¹åè§ [IPublicModelPluginContext](https://github.com/alibaba/lowcode-engine/blob/main/packages/types/src/shell/model/plugin-context.ts)
#### 设置å
¼å®¹å¼æçæ¬ç¤ºä¾
```typescript
import { plugins } from '@alilc/lowcode-engine';
import { IPublicModelPluginContext } from '@alilc/lowcode-types';
const BuiltinPluginRegistry = (ctx: IPublicModelPluginContext) => {
return {
async init() {
...
},
};
}
BuiltinPluginRegistry.pluginName = 'BuiltinPluginRegistry';
BuiltinPluginRegistry.meta = {
engines: {
lowcodeEngine: '^1.0.0', // æä»¶éè¦é
å ^1.0.0 ç弿æå¯è¿è¡
},
}
await plugins.register(BuiltinPluginRegistry);
```
#### 设置æä»¶åæ°çæ¬ç¤ºä¾
```typescript
import { plugins } from '@alilc/lowcode-engine';
import { IPublicModelPluginContext } from '@alilc/lowcode-types';
const BuiltinPluginRegistry = (ctx: IPublicModelPluginContext, options: any) => {
return {
async init() {
// ç´æ¥ä¼ 弿¹å¼ï¼
// éè¿ register(xxx, options) ä¼ å
¥
// éè¿ options ååº
// 弿åå§åæ¶ä¹å¯ä»¥è®¾ç½®ææä»¶çå
¨å±é
置项ï¼
// éè¿ engine.init(..., preference) ä¼ å
¥
// éè¿ ctx.preference.getValue() ååº
},
};
}
BuiltinPluginRegistry.pluginName = 'BuiltinPluginRegistry';
BuiltinPluginRegistry.meta = {
preferenceDeclaration: {
title: 'pluginA çåæ°å®ä¹',
properties: [
{
key: 'key1',
type: 'string',
description: 'this is description for key1',
},
{
key: 'key2',
type: 'boolean',
description: 'this is description for key2',
},
{
key: 'key3',
type: 'number',
description: 'this is description for key3',
},
{
key: 'key4',
type: 'string',
description: 'this is description for key4',
},
],
},
}
await plugins.register(BuiltinPluginRegistry, { key1: 'abc', key5: 'willNotPassToPlugin' });
```
### get
è·åæå®æä»¶
```typescript
/**
* è·åæå®æä»¶
* get plugin instance by name
*/
get(pluginName: string): IPublicModelPluginInstance | null;
```
å
³è模å [IPublicModelPluginInstance](./model/plugin-instance)
### getAll
è·åææçæä»¶å®ä¾
```typescript
/**
* è·åææçæä»¶å®ä¾
* get all plugin instances
*/
getAll(): IPublicModelPluginInstance[];
```
å
³è模å [IPublicModelPluginInstance](./model/plugin-instance)
### has
夿æ¯å¦ææå®æä»¶
```typescript
/**
* 夿æ¯å¦ææå®æä»¶
* check if plugin with certain name exists
*/
has(pluginName: string): boolean;
```
### delete
å 餿宿件
```typescript
/**
* å 餿宿件
* delete plugin instance by name
*/
delete(pluginName: string): void;
```
### getPluginPreference
弿åå§åæ¶å¯ä»¥æä¾å
¨å±é
ç½®ç»å°åæä»¶ï¼éè¿è¿ä¸ªæ¹æ³å¯ä»¥è·å¾æ¬æä»¶å¯¹åºçé
ç½®
```typescript
/**
* 弿åå§åæ¶å¯ä»¥æä¾å
¨å±é
ç½®ç»å°åæä»¶ï¼éè¿è¿ä¸ªæ¹æ³å¯ä»¥è·å¾æ¬æä»¶å¯¹åºçé
ç½®
* use this to get preference config for this plugin when engine.init() called
*/
getPluginPreference(
pluginName: string,
): Record | null | undefined;
```
## ç¸å
³ç±»åå®ä¹
- [IPublicModelPluginContext](https://github.com/alibaba/lowcode-engine/blob/main/packages/types/src/shell/model/plugin-context.ts)
- [IPublicTypePluginConfig](https://github.com/alibaba/lowcode-engine/blob/main/packages/types/src/shell/type/plugin-config.ts)
- [IPublicModelPluginInstance](https://github.com/alibaba/lowcode-engine/blob/main/packages/types/src/shell/model/plugin-instance.ts)
## æä»¶å
æ°æ®å·¥ç¨è½¬å示ä¾
your-plugin/package.json
```json
{
"name": "@alilc/lowcode-plugin-debug",
"lcMeta": {
"pluginName": "debug",
"meta": {
"engines": {
"lowcodeEgnine": "^1.0.0"
},
"preferenceDeclaration": { ... }
}
}
}
```
转æ¢åçç»æï¼
```typescript
const debug = (ctx: IPublicModelPluginContext, options: any) => {
return {};
}
debug.pluginName = 'debug';
debug.meta = {
engines: {
lowcodeEgnine: '^1.51.0',
},
preferenceDeclaration: { ... }
};
```