mirror of https://github.com/msgbyte/tailchat
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
73 lines
1.9 KiB
JavaScript
73 lines
1.9 KiB
JavaScript
/**
|
|
* 安装插件的前端
|
|
*/
|
|
|
|
require('ts-node').register();
|
|
const fs = require('fs-extra');
|
|
const path = require('path');
|
|
const { argv } = require('process');
|
|
const execa = require('execa');
|
|
const _ = require('lodash');
|
|
|
|
const containerPath = path.resolve(__dirname, '../plugins');
|
|
const publicPath = path.resolve(__dirname, '../public');
|
|
const registryPath = path.resolve(publicPath, './registry-be.json');
|
|
|
|
const list = fs.readdirSync(containerPath);
|
|
const dirs = list.filter((item) =>
|
|
fs.statSync(path.resolve(containerPath, item)).isDirectory()
|
|
);
|
|
|
|
/**
|
|
* 编译插件并添加到 registry 中
|
|
*/
|
|
async function start() {
|
|
if (argv.length === 2) {
|
|
console.log(`安装方式: pnpm plugin:install [pluginName]`);
|
|
console.log('所有插件:');
|
|
dirs.forEach((dir) => {
|
|
console.log(`- ${dir}`);
|
|
});
|
|
|
|
return;
|
|
}
|
|
|
|
const [, , ...installPlugins] = argv;
|
|
|
|
let availableInstallPlugins = [];
|
|
if (installPlugins.includes('all')) {
|
|
// 安装所有
|
|
availableInstallPlugins = [...dirs];
|
|
} else {
|
|
// 安装部分
|
|
availableInstallPlugins = installPlugins.filter((p) => dirs.includes(p));
|
|
}
|
|
for (const p of availableInstallPlugins) {
|
|
console.log('┌ 开始安装:', p);
|
|
let manifest = await fs.readJSON(
|
|
path.resolve(containerPath, `./${p}/web/plugins/${p}/manifest.json`)
|
|
);
|
|
if (!manifest) {
|
|
console.error('配置加载失败, 跳转安装');
|
|
return;
|
|
}
|
|
|
|
// 编译插件文件
|
|
await execa('pnpm', ['build:web'], {
|
|
cwd: path.resolve(containerPath, p),
|
|
stdout: 'inherit',
|
|
stderr: 'inherit',
|
|
});
|
|
|
|
// 追加前端配置到registry
|
|
const originRegistry =
|
|
(await fs.readJSON(registryPath).catch(() => [])) ?? [];
|
|
const newRegistry = _.uniqBy([manifest, ...originRegistry], (m) => m.name);
|
|
await fs.writeJSON(registryPath, newRegistry);
|
|
|
|
console.log('└ 安装完毕:', p);
|
|
}
|
|
}
|
|
|
|
start();
|