UNPKG

gxd-vue-library

Version:

依赖与element Ui插件库,聚福宝福利PC端插件库

80 lines (69 loc) 2.91 kB
'use strict'; 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全局 */