* refactor: plugin manager page
* fix: bug
* feat: addByNpm api
* fix: improve the addByNpm
* feat: improve applicationPlugins:list api
* fix: re-download npm package when restart app
* fix: plugin delete api
* feat: plugin detail api
* feat: zipUrl add api
* fix: upload api bug
* fix: plugin detail info
* feat: upgrade api
* fix: upload api
* feat: handle plugin load error
* feat: support authToken
* feat: muti lang
* fix: build error
* fix: self review
* Update plugin-manager.ts
* fix: bug
* fix: bug
* fix: bug
* fix: bug
* fix: bug
* fix: bugs
* fix: detail click and remove isOfficial
* fix: upgrade no refresh
* fix: file size and type check
* fix: bug
* fix: upgrade error
* fix: bug
* fix: bug
* fix: plugin card layout
* fix: handling exceptional cases
* fix: tgz file support
* fix: macos compress file
* fix: bug
* fix: bug
* fix: bug
* fix: bug
* fix: add upgrade npm type
* fix: bugs
* fix: bug
* fix: change plugins static expose url
* fix: api prefix
* fix: bug
* fix: add nginx `/static/plugin/` path
* fix: bugs and pr docker build no dts
* fix: bug
* fix: build tools bug
* fix: improve code
* fix: build bug
* feat: improve plugin info
* fix: ui bug
* fix: plugin document bug
* feat: improve code
* feat: improve code
* feat: process dev deps check
* feat: improve code
* feat: process.env.IS_DEV_CMD
* fix: do not delete the plugin package
* feat: plugin symlink
* fix: tsx watch --ignore=./storage/plugins/**
* fix: test error
* fix: improve code
* fix: improve code
* fix: emitStartedEvent
* fix: improve code
* fix: type error
* fix: test error
* test: console.log
* fix: createStoragePluginSymLink
* fix: clientStaticMiddleware rename to clientStaticUtils
* feat: build tools support plugins folder
* fix: 350px
* fix: error
* feat: client dev support plugin folder
* fix: clear cli options
* fix: typeError: Converting circular structure to JSON
* fix: plugin name
* chore: restart application after command
* feat: upgrade error & docs
* Update v14-changelog.md
* Update v14-changelog.md
* Update v14-changelog.md
* fix: gateway test
* refactor(plugin-workflow): add ready state for gracefully tearing down
* Revert "chore: restart application after command"
This reverts commit 5015274f8e
.
* chore: stop application whe restart
* T 1218 change plugin folder (#2629)
* feat: change folder name
* feat: change `pm create` command
* feat: revert plugin name change
* fix: delete samples
* feat: change plugins folder
* fix: pm create
* feat: update docs
* fix: link package error
* fix: docs
* fix: create command
* fix: pm add error
* fix: create add build
* fix: pm creatre + add
* feat: add tar command
* fix: docs
* fix: bug
* fix: docs
---------
Co-authored-by: chenos <chenlinxh@gmail.com>
* feat: docs
* Update your-fisrt-plugin.md
* Update your-fisrt-plugin.md
* chore: application reload
* chore: test
* fix: pm add error
* chore: preset install skip exists plugin
* fix: createIfNotExists
---------
Co-authored-by: chenos <chenlinxh@gmail.com>
Co-authored-by: chareice <chareice@live.com>
Co-authored-by: Zhou <zhou.working@gmail.com>
Co-authored-by: mytharcher <mytharcher@gmail.com>
3.2 KiB
Develop the first plugin
Before start, you need to install NocoBase:.
Once NocoBase is installed, we can start our plugin development journey.
Create a plugin
First, you can quickly create an empty plugin via the CLI with the following command.
yarn pm create @my-project/plugin-hello
The directory where the plugin located is packages/plugins/@my-project/plugin-hello
and the plugin directory structure is
|- /hello
|- /src
|- /client # plugin client code
|- /server # plugin server code
|- client.d.ts
|- client.js
|- package.json # plugin package information
|- server.d.ts
|- server.js
Visit the Plugin Manager to view the plugin you just added, the default address is http://localhost:13000/admin/pm/list/local/
If the plugin is not shown in the plugin manager, you can add it manually with the pm add
command.
yarn pm add @my-project/plugin-hello
Code the plugin
Look at the packages/plugins/@my-project/plugin-hello/src/server/plugin.ts
file and modify it to
import { InstallOptions, Plugin } from '@nocobase/server';
export class PluginHelloServer extends Plugin {
afterAdd() {}
beforeLoad() {}
async load() {
this.db.collection({
name: 'hello',
fields: [{ type: 'string', name: 'name' }],
});
this.app.acl.allow('hello', '*');
}
async install(options?: InstallOptions) {}
async afterEnable() {}
async afterDisable() {}
async remove() {}
}
export default PluginHelloServer;
Activate the plugin
Operated by command
yarn pm enable @my-project/plugin-hello
Operated by UI
Visit the Plugin Manager to view the plugin you just added and click enable. The Plugin Manager page defaults to http://localhost:13000/admin/pm/list/local/
Node: When the plugin is activated, the hello collection that you just configured is automatically created.
Debug the Plugin
If the app is not started, you need to start the app first
# for development
yarn dev
# for production
yarn build
yarn start
Insert data into the hello collection of the plugin
curl --location --request POST 'http://localhost:13000/api/hello:create' \
--header 'Content-Type: application/json' \
--data-raw '{
"name": "Hello world"
}'
View the data
curl --location --request GET 'http://localhost:13000/api/hello:list'
Build the plugin
yarn build plugins/@my-project/plugin-hello --tar
# step-by-step
yarn build plugins/@my-project/plugin-hello
yarn nocobase tar plugins/@my-project/plugin-hello
The default saved path for the plugin tar is storage/tar/@my-project/plugin-hello.tar.gz
Upload to other NocoBase applications
Only supported in v0.14 and above