UNPKG

zc-tool

Version:

项目模板

228 lines (226 loc) 10 kB
const fs = require('fs') // 文件读写 const chalk = require('chalk') const download = require('download-git-repo'); const ora = require('ora'); const spinner = ora('Loading undead unicorns'); var tool={ down(url,dest){ return new Promise((resolve, reject) => { spinner.start('开始下载'); download('direct:'+url,dest, { clone: true }, (err) => { if (err) { spinner.fail(chalk.red('下载失败 \n' + err)); process.exit(); } else { spinner.succeed(chalk.green(`下载成功`)); resolve(); } }); }); }, createJava:function(answers){ // console.log(answers) this.clearDir(answers.dir) this.down('http://xieyuliang:19880104@10.36.29.124:8803/xieyuliang/zcii-cloud-ems.git',answers.dir).then(res=>{ this.updateDirectSync(answers); try{ this.updatePackageSync(answers); console.log(chalk.green('包名修改成功')); }catch(ex){ console.error("包名修改失败",ex) throw ex; } console.log(chalk.green("项目初始化成功")) }) }, createVue3:function(answers){ // console.log(answers) this.clearDir(answers.dir) this.down('http://xieyuliang:19880104@10.36.29.124:8803/xieyuliang/zcii-cloud-web-ems.git',answers.dir).then(res=>{ this.updatePkgSync(answers); this.updateEnvSync(answers); console.log(chalk.green("项目初始化成功")) }) }, updatePkg:function(answers){ // 修改package.json fs.readFile(`${answers.dir}/package.json`, 'utf8', (err, data) => { if (err) throw err; const packageJson = JSON.parse(data); packageJson.name = answers.name; packageJson.version = answers.version; packageJson.description = answers.description; packageJson.author = answers.author; packageJson.route = answers.name+"Ms" fs.writeFile(`${answers.dir}/package.json`, JSON.stringify(packageJson, null, 2), (err) => { if (err) throw err; console.log(chalk.green('package.json修改成功')); }); }); }, updateEnv:function(answers){ // 修改.env fs.readFile(`${answers.dir}/.env`, 'utf8', (err, data) => { if (err) throw err; let env = data.replace(/VITE_PORT=.*/g, `VITE_PORT=${answers.port}`); env = env.replace(/VITE_ACTIVE_RULE=.*/g, `VITE_ACTIVE_RULE='/${answers.name}'`); env = env.replace(/VITE_APP_TITLE=.*/g, `VITE_APP_TITLE=${answers.title}`); fs.writeFile(`${answers.dir}/.env`, env, (err) => { if (err) throw err; console.log(chalk.green('.env修改成功')); }); }); }, updatePkgSync:function(answers){ try{ data=fs.readFileSync(`${answers.dir}/package.json`, 'utf8') const packageJson = JSON.parse(data); packageJson.name = answers.name; packageJson.version = answers.version; packageJson.description = answers.description; packageJson.author = answers.author; packageJson.route = answers.name+"Ms" fs.writeFileSync(`${answers.dir}/package.json`, JSON.stringify(packageJson, null, 2)); console.log(chalk.green('package.json修改成功')); }catch(ex){ console.error("package.json修改失败",ex) throw ex; } }, updateEnvSync:function(answers){ try{ data=fs.readFileSync(`${answers.dir}/.env`, 'utf8') let env = data.replace(/VITE_PORT=.*/g, `VITE_PORT=${answers.port}`); env = env.replace(/VITE_ACTIVE_RULE=.*/g, `VITE_ACTIVE_RULE='/${answers.name}'`); env = env.replace(/VITE_APP_TITLE=.*/g, `VITE_APP_TITLE=${answers.title}`); fs.writeFileSync(`${answers.dir}/.env`, env); console.log(chalk.green('.env修改成功')); }catch(ex){ console.error(".env修改失败",ex) throw ex; } }, updateDirectSync:function(answers){ try{ oldPkg="/src/main/java/com/zhuchi/zcii/module/ems" newPkg="/src/main/java/com/zhuchi/zcii/module/"+answers.name newName=answers.name.charAt(0).toUpperCase()+answers.name.slice(1)//首字母大写项目名称 fs.renameSync(answers.dir+"/zcii-cloud-ems-biz"+oldPkg+"/EmsServerApplication.java",answers.dir+"/zcii-cloud-ems-biz"+oldPkg+"/"+newName+"ServerApplication.java") fs.renameSync(answers.dir+"/zcii-cloud-ems-api"+oldPkg,answers.dir+"/zcii-cloud-ems-api"+newPkg) fs.renameSync(answers.dir+"/zcii-cloud-ems-api",answers.dir+"/zcii-cloud-"+answers.name+"-api") fs.renameSync(answers.dir+"/zcii-cloud-ems-biz"+oldPkg,answers.dir+"/zcii-cloud-ems-biz"+newPkg) fs.renameSync(answers.dir+"/zcii-cloud-ems-biz",answers.dir+"/zcii-cloud-"+answers.name+"-biz") console.log(chalk.green('目录修改成功')); }catch(ex){ console.error("目录修改失败",ex) throw ex; } }, updatePackageSync:function(answers){ //读取所有文件 const path=answers.dir const files = fs.readdirSync(path); files.forEach(file => { // console.log("文件:",file) const filePath = `${path}/${file}`; const stats = fs.statSync(filePath); if (!stats.isDirectory()) { newName=answers.name.charAt(0).toUpperCase()+answers.name.slice(1) let data=fs.readFileSync(filePath, 'utf8') if(file=='bootstrap.yaml'){ data=data.replace(/ems/g,answers.name) data=data.replace(/ port:.*/g, ` port: ${answers.port}`) fs.writeFileSync(newFilePath, data); }else if(file=='zcii-ems-server.yaml'){ data=data.replace(/ems/g,answers.name) newFile=file.replace(/ems/g, answers.name) newFilePath=`${path}/${newFile}` fs.renameSync(filePath, newFilePath); fs.writeFileSync(newFilePath, data); }else if(file=='zcii-cloud-ems-k8s-pro.yaml'||file=='zcii-cloud-ems-k8s-dev.yaml'){ data=data.replace(/ems/g,answers.name) data=data.replace(/48088/g,answers.port) newFile=file.replace(/ems/g, answers.name) newFilePath=`${path}/${newFile}` fs.renameSync(filePath, newFilePath); fs.writeFileSync(newFilePath, data); }else if(file=='Dockerfile'){ data=data.replace(/ems/g,answers.name) data=data.replace(/EXPOSE .*/g, `EXPOSE ${answers.port}`) fs.writeFileSync(filePath, data); }else{ //zcii-cloud-ems替换为zcii-cloud-${answers.name} data=data.replace(/zcii-cloud-ems/g, `zcii-cloud-${answers.name}`) //标题替换 data=data.replace(/能源管理/g, `${answers.title}`) //package名修改 data=data.replace(/com\.zhuchi\.zcii\.module\.ems/g, `com.zhuchi.zcii.module.${answers.name}`) //Ems内容修改 data=data.replace(/Ems/g,newName) data=data.replace(/ems/g,newName) data=data.replace(/EMS/g,newName) //文件名修改 if(file.indexOf("Ems")>-1){ newFile=file.replace(/Ems/g, newName) newFilePath=`${path}/${newFile}` fs.renameSync(filePath, newFilePath); fs.writeFileSync(newFilePath, data); }else{ fs.writeFileSync(filePath, data); } } }else{ this.updatePackageSync({...answers,dir:filePath}) } }); }, /** * 清空指定路径下的所有文件及文件夹 * @param {*} path */ clearDir:function(path){ if(fs.existsSync(path)){ this.emptyDir(path); this.rmEmptyDir(path,1); } }, /** * 删除文件夹下所有问价及将文件夹下所有文件清空 * @param {*} path */ emptyDir:function(path){ const files = fs.readdirSync(path); files.forEach(file => { const filePath = `${path}/${file}`; const stats = fs.statSync(filePath); if (stats.isDirectory()) { this.emptyDir(filePath); } else { fs.unlinkSync(filePath); // console.log(`删除${file}文件成功`); } }); }, /** * 删除指定路径下的所有空文件夹 * @param {*} path */ rmEmptyDir:function(path,level=0){ const files = fs.readdirSync(path); if (files.length > 0) { let tempFile = 0; files.forEach(file => { tempFile++; this.rmEmptyDir(`${path}/${file}`, 1); }); if (tempFile === files.length && level !== 0) { fs.rmdirSync(path); } } else { level !==0 && fs.rmdirSync(path); } } } module.exports=tool