UNPKG

he-cli-fe

Version:

frontend cli tool for development

68 lines (67 loc) 2.95 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.vuecpnCommand = void 0; const ora_1 = __importDefault(require("ora")); const fs_1 = __importDefault(require("fs")); const global_1 = require("config/global"); const useEjs_1 = require("utils/useEjs"); const useCmd_1 = require("utils/useCmd"); const tool_1 = require("utils/tool"); function vuecpnCommand(program) { program .command('vuecpn [cpnName]') .description('创建vue组件, vuecpn [cpnName] [-d cpnDir]') .action(async (cpnName) => { if (cpnName) { createCpn(cpnName); } else { const cpnDesc = await useCmd_1.select(Object.keys(global_1.dirMap), '请选择公共组件类型:'); createCpn(global_1.dirMap[cpnDesc], true); } }); /** * @param cpnName 生成组件名称或公共组件目录 * @param isPub 是否来自公共组件模板 */ async function createCpn(cpnName, isPub) { const spinner = ora_1.default(`创建${cpnName}${isPub ? '公共' : ''}组件...`); try { const { dest } = program.opts(); let targetDir = dest ? `components/${dest}` : 'components'; let cpnNameTmp; if (isPub) { const rootDir = fs_1.default.readdirSync(tool_1.resolve(global_1.resolveTmp, 'vue', 'components', cpnName)); const cpnDir = rootDir.map((file) => file.split('.')[0]); targetDir = `components/${global_1.config.publicComponentDir}`; cpnNameTmp = await useCmd_1.select(cpnDir, '请选择要添加的公共组件:'); } spinner.start(); const lowerName = cpnName.toLowerCase(); const targetPath = tool_1.resolve(global_1.targetRoot, targetDir); tool_1.compilePath(targetPath); const filePath = tool_1.resolve(targetPath, `${isPub ? cpnNameTmp : cpnName}.vue`); const proceed = await tool_1.existsFileCover(filePath, spinner); if (proceed) { if (isPub) { await useEjs_1.writeFileEjs(tool_1.resolve(global_1.resolveTmp, `vue/components/${cpnName}/${cpnNameTmp}.ejs`), filePath); } else { await useEjs_1.writeFileEjs(tool_1.resolve(global_1.resolveTmp, 'vue/cpn.ejs'), filePath, { name: cpnName, lowerName, }); } spinner.succeed('创建成功'); } } catch (err) { spinner.fail('创建失败'); err && tool_1.errLog(err); } } } exports.vuecpnCommand = vuecpnCommand;