zc-tool
Version:
项目模板
228 lines (226 loc) • 10 kB
JavaScript
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