he-cli-fe
Version:
frontend cli tool for development
68 lines (67 loc) • 2.95 kB
JavaScript
;
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;