epmp-cli
Version:
A simple init for epm scaffolding projects.
108 lines (101 loc) • 3.56 kB
JavaScript
/*
* @Description:
* @Version: 2.0
* @Autor: makaik
* @Date: 2022-05-31 19:07:40
* @LastEditors: makaik
* @LastEditTime: 2022-05-31 20:05:39
*/
const chalk = require('chalk');
const path = require('path');
const fse = require('fs-extra');
const inquirer = require('inquirer');
const utils = require('./utils');
module.exports = async () => {
// 配置路径
let configPath=path.resolve('.', 'node.config.json')
let hasUcfFile = await fse.pathExists(configPath);
if (!hasUcfFile) {
console.log(chalk.red.bold('😫 Error failed to find node.config.json'));
process.exit(1);
}
let projectUrl = JSON.parse(
fse.readFileSync(configPath, "utf8")
).projectUrl;
// 目标路径
let ucfApps = path.resolve(projectUrl, 'src/epmp-apps');
// 人机交互选择的模块名称
let ucfSelectModule = utils.getModules(ucfApps + '/*');
// 模板路径
let ucfPathTmp = path.resolve(__dirname, './templates/NODE');
// node路径
let ucfNode = path.resolve('.', 'src/epmp-apps');
// 选择目标模块
let chooseModule = await inquirer.prompt([
{
type: 'list',
name: 'selectModule',
message: '请选择应用所属的模块:',
choices: ucfSelectModule,
},
]);
ucfApps = path.resolve(ucfApps, chooseModule.selectModule);
ucfNode= path.resolve(ucfNode, chooseModule.selectModule);
utils.mkdirSync(ucfNode)
let ucfSelectNode = utils.getModules(ucfApps + '/*',chooseModule.selectModule);
// 选择目标节点
let chooseNode = await inquirer.prompt([
{
type: 'list',
name: 'selectNode',
message: '请选择应用所属的节点:',
choices: ucfSelectNode,
},
]);
ucfApps = path.resolve(ucfApps, chooseNode.selectNode);
ucfNode= path.resolve(ucfNode, chooseNode.selectNode);
utils.mkdirSync(ucfNode)
let routerPath=path.resolve(ucfApps, 'main/routes.js')
let hasRouterFile = await fse.pathExists(routerPath);
if (!hasRouterFile) {
console.log(chalk.red.bold('😫 Error failed to find main/routes.js'));
process.exit(1);
}
let routerContent=fse.readFileSync(routerPath, "utf8");
let routerArr=JSON.stringify(routerContent).match(/\.\.\/.*?(\\|\'|\")/g)
let routerFile=[]
routerArr.forEach(item=>{
routerFile.push(item.split('/')[1].replace("'","").replace('"',''))
})
// 选择目标路由
let chooseRouter = await inquirer.prompt([
{
type: 'list',
name: 'selectRouter',
message: '请选择应用所属的路由:',
choices: routerFile,
},
]);
ucfApps = path.resolve(ucfApps, chooseRouter.selectRouter);
ucfNode= path.resolve(ucfNode, chooseRouter.selectRouter);
utils.mkdirSync(ucfNode)
if(!fse.existsSync(path.resolve(ucfNode,'index.js'))){
await fse.copy(path.resolve(ucfPathTmp, 'ENTRANCE'), path.resolve(ucfNode));
}
let servicesFile=''
if(!fse.existsSync(path.resolve(ucfApps, 'services.js'))){
servicesFile=path.resolve(ucfApps, 'service/index.js')
}else{
servicesFile=path.resolve(ucfApps, 'services.js')
}
let servicesContent=fse.readFileSync(servicesFile, "utf8");
let servicesArr=JSON.stringify(servicesContent).match(/export.*?async.*?function.*?\(/g)
servicesArr.forEach(async item=>{
let reqFile=item.split(/export.*?async.*?function/g)[1].replace('(','').trim()
if(!fse.existsSync(path.resolve(ucfNode, reqFile))){
fse.mkdirSync(path.resolve(ucfNode, reqFile));
await fse.copy(path.resolve(ucfPathTmp, 'DEMO'), path.resolve(ucfNode, reqFile));
}
})
console.log(chalk.green(`Node Creation Successfully to `));
};