/**** * 批量编译打包模板工具 * 运行 npm run publish T_01 命令来打包T_01模板 * 运行 npm run publish T_01,T_02,T_03,T_04 命令来分别打包 T_01,T_02,T_03,T_04 这四个模板,注意逗号要用英文的 * 运行 npm run publish all 命令来打包所有模板 */ const spawn = require('child_process').spawn; const path = require("path"); const fs = require("fs"); const os = require('os'); const compressing = require("compressing"); //Linux系统上'Linux' //macOS 系统上'Darwin' //Windows系统上'Windows_NT' let sysType = os.type(); Date.prototype.Format = function(fmt) { var o = { "M+" : this.getMonth() + 1, "d+" : this.getDate(), "h+" : this.getHours(), "m+" : this.getMinutes(), "s+" : this.getSeconds(), "q+" : Math.floor((this.getMonth() + 3) / 3), "S" : this.getMilliseconds() }; if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length)); for (var k in o) if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length))); return fmt; } function clean(zipPath){ if(fs.existsSync(zipPath)){ fs.unlinkSync(zipPath); } } const runSpawn = async function (){ await new Promise(function(resolve,reject){ let pkg = require("../package.json"); let ls; if(sysType==="Windows_NT"){ //ng build --prod --build--optimizer --base-href /ng-one/ ls = spawn("cmd.exe", ['/c', 'ng', 'build', '--prod', '--build--optimizer', '--base-href', '/template-base-href/'] ); }else{ ls = spawn("ng", ['build', '--prod', '--build--optimizer', '--base-href', '/template-base-href/'] ); } ls.stdout.on('data', (data) => { console.log(` ${data}`); }); ls.stderr.on('data', (data) => { console.log(`stderr: ${data}`); reject(); }); ls.on('close', (code) => { console.log(`child process exited with code ${code}`); //要压缩的目录 let zippath = path.resolve(__dirname,"../dist", pkg.name); //压缩包的存放目录 let date = new Date(); let zipname = pkg.name+"_"+date.Format("yyyyMMdd hh-mm-ss"); let zipdir = path.resolve(__dirname,"../publish/"+zipname+".zip"); clean(zipdir); //删除原有的包 const tarStream = new compressing.zip.Stream(); fs.readdir(zippath,function(err,files){ if(err){ console.log("======文件打开异常======"); console.log(err); reject(); } for(let i=0;i<files.length;i++){ tarStream.addEntry(zippath+"/"+files[i]); } let writeStream = fs.createWriteStream(zipdir); tarStream.pipe(writeStream); writeStream.on('close', () => { console.log(`模板 ${pkg.name} 打包已完成!`); resolve(); }) }); }); }); } // let projects = ""; // if(process.argv.length<3){ // console.log("缺少参数"); // return; // } // projects = process.argv[2]; let exec = async function(){ //压缩模板 await runSpawn(); } exec();