mirror of
https://github.com/nocobase/nocobase
synced 2024-11-15 17:46:36 +00:00
705b7449f0
* 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>
88 lines
2.8 KiB
JavaScript
88 lines
2.8 KiB
JavaScript
const { dirname, resolve } = require('path');
|
|
const { readFile, writeFile, readdir, symlink, unlink, mkdir, stat } = require('fs').promises;
|
|
|
|
async function getStoragePluginNames(target) {
|
|
const plugins = [];
|
|
const items = await readdir(target);
|
|
for (const item of items) {
|
|
if (item.startsWith('@')) {
|
|
const children = await getStoragePluginNames(resolve(target, item));
|
|
plugins.push(
|
|
...children.map((child) => {
|
|
return `${item}/${child}`;
|
|
}),
|
|
);
|
|
} else if (await fsExists(resolve(target, item, 'package.json'))) {
|
|
plugins.push(item);
|
|
}
|
|
}
|
|
return plugins;
|
|
}
|
|
|
|
async function fsExists(path) {
|
|
try {
|
|
await stat(path);
|
|
return true;
|
|
} catch (error) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
exports.fsExists = fsExists;
|
|
|
|
async function createStoragePluginSymLink(pluginName) {
|
|
const storagePluginsPath = resolve(process.cwd(), 'storage/plugins');
|
|
const nodeModulesPath = process.env.NODE_MODULES_PATH; // resolve(dirname(require.resolve('@nocobase/server/package.json')), 'node_modules');
|
|
// const nodeModulesPath = resolve(process.cwd(), 'node_modules');
|
|
try {
|
|
if (pluginName.startsWith('@')) {
|
|
const [orgName] = pluginName.split('/');
|
|
if (!(await fsExists(resolve(nodeModulesPath, orgName)))) {
|
|
await mkdir(resolve(nodeModulesPath, orgName), { recursive: true });
|
|
}
|
|
}
|
|
const link = resolve(nodeModulesPath, pluginName);
|
|
if (await fsExists(link)) {
|
|
await unlink(link);
|
|
}
|
|
await symlink(resolve(storagePluginsPath, pluginName), link);
|
|
} catch (error) {
|
|
console.error(error);
|
|
}
|
|
}
|
|
|
|
exports.createStoragePluginSymLink = createStoragePluginSymLink;
|
|
|
|
async function createStoragePluginsSymlink() {
|
|
const storagePluginsPath = resolve(process.cwd(), 'storage/plugins');
|
|
if (!(await fsExists(storagePluginsPath))) {
|
|
return;
|
|
}
|
|
const pluginNames = await getStoragePluginNames(storagePluginsPath);
|
|
await Promise.all(pluginNames.map((pluginName) => createStoragePluginSymLink(pluginName)));
|
|
}
|
|
|
|
exports.createStoragePluginsSymlink = createStoragePluginsSymlink;
|
|
|
|
async function createDevPluginSymLink(pluginName) {
|
|
const packagePluginsPath = resolve(process.cwd(), 'packages/plugins');
|
|
const nodeModulesPath = process.env.NODE_MODULES_PATH; // resolve(dirname(require.resolve('@nocobase/server/package.json')), 'node_modules');
|
|
try {
|
|
if (pluginName.startsWith('@')) {
|
|
const [orgName] = pluginName.split('/');
|
|
if (!(await fsExists(resolve(nodeModulesPath, orgName)))) {
|
|
await mkdir(resolve(nodeModulesPath, orgName), { recursive: true });
|
|
}
|
|
}
|
|
const link = resolve(nodeModulesPath, pluginName);
|
|
if (await fsExists(link)) {
|
|
await unlink(link);
|
|
}
|
|
await symlink(resolve(packagePluginsPath, pluginName), link);
|
|
} catch (error) {
|
|
console.error(error);
|
|
}
|
|
}
|
|
|
|
exports.createDevPluginSymLink = createDevPluginSymLink;
|