gxd-vue-library
Version:
依赖与element Ui插件库,聚福宝福利PC端插件库
80 lines (69 loc) • 2.91 kB
JavaScript
;
const fileHelper = require('./../fileHepler');
const basePath = require('./../path');
const path = require('path');
const utils = require('./../lib/utils');
const clog = require('./../clog');
const os = require('os');
const homeDir = os.homedir();
// 优化路径拼接方式,使用path.join更安全
const homeDirTo = utils.getArgv().length === 1
? path.join(utils.getArgv()[0], 'front', 'skills')
: path.join(homeDir, '.trae', 'skills');
const GLOBAL_SKILLS_DIR = path.normalize(homeDirTo); // 目标Skill
const PROJECT_SKILL_DIR = path.normalize(path.join(basePath.rootDir, '.trae', 'skills')); // 项目skill
function initSkill() {
// 前置检查项目技能目录是否存在,避免后续循环中重复检查
if (!fileHelper.existFileSync(PROJECT_SKILL_DIR)) {
clog(`项目技能目录不存在,目录:${PROJECT_SKILL_DIR}`, 'red');
process.exit(-1);
}
const skills = fileHelper.getDirFiles(PROJECT_SKILL_DIR, ['md']);
const skillsPathObj = Object.values(skills) // 直接使用Object.values避免额外的key遍历
.map(item => {
const dirName = item.path.split('/')[0]; // 提取目录名,避免重复计算
return {
...item,
dirPath: `g-${dirName}`,
orgDirPath: dirName,
createPath: `g-${item.fullName}`
};
})
.map(item => {
const form = path.join(PROJECT_SKILL_DIR, item.fullName);
const to = path.join(GLOBAL_SKILLS_DIR, item.createPath);
const toDir = path.join(GLOBAL_SKILLS_DIR, item.dirPath);
// 确保目标目录存在(递归创建)
if (!fileHelper.existFileSync(toDir)) {
fileHelper.mkdirSync(toDir, { recursive: true }); // 假设fileHelper支持递归创建目录
}
// 读取文件内容并替换name字段
let content = fileHelper.readFileSync(form);
const reg = /name:\s*["']?([^"'\s\n]+)["']?/;
const newStr = `name: "g-${item.orgDirPath}"`;
content = content.replace(reg, newStr);
// 写入文件
fileHelper.writeFileSync(to, content);
clog(`复制技能到项目全局技能目录成功,目录:${to}`, 'green');
return item; // 保持数组链式调用的完整性
});
}
process.stdin['setEncoding']('utf8');
process.stdout['write']("确认执行吗(y/n)?");
process.stdin['on']('data', (input) => {
input = input.toString().trim();
if (['Y', 'y', 'YES', 'yes'].indexOf(input) > -1) {
clog('\n');
clog(`复制技能到项目全局技能目录`, 'blueBG');
utils.logsLine(clog);
initSkill()
clog(`复制技能成功`, 'green');
utils.logsLine(clog);
process.exit(0)
}
if (['N', 'n', 'NO', 'no'].indexOf(input) > -1) process.exit(0);
});
/**
* node ./build/commands/skill.js /Volumes/PortableSSD/code/BASE/jufubao-ai-skills 复制到指定路径
* node ./build/commands/skill.js 复制到trae全局
*/