UNPKG

epmp-cli

Version:

A simple init for epm scaffolding projects.

108 lines (101 loc) 3.56 kB
/* * @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 `)); };