Commit c9a2e803 authored by huoshizhe's avatar huoshizhe

feat: 自动打包

parent 800bd5ab
/publish/form /publish/form
/publish/play /publish/play
/publish/node_modules
/****
* 批量编译打包模板工具
* 运行 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 zipname = 'form';
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();
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
"start": "ng serve", "start": "ng serve",
"build": "ng build --build--optimizer --aot --base-href /JGT/v3/", "build": "ng build --build--optimizer --aot --base-href /JGT/v3/",
"publish": "node ./bin/publish.js", "publish": "node ./bin/publish.js",
"publish_2": "node ./bin/publish_2.js",
"ng": "ng", "ng": "ng",
"test": "ng test", "test": "ng test",
"lint": "ng lint", "lint": "ng lint",
......
cd ../form cd ../form
REM npm run publish_2 npm run publish_2
cd ../play cd ../play
CocosCreator.exe --path "./" --build "configPath=../publish/buildConfig.json" --force CocosCreator.exe --path "./" --build "configPath=../publish/buildConfig.json" --force
cd ../publish cd ../publish
node build.js
pause pause
...@@ -9,22 +9,61 @@ function fix2(num) { ...@@ -9,22 +9,61 @@ function fix2(num) {
} }
} }
fs.readdir('../play/build', { withFileTypes: true }, (err, files) => { async function initFiles() {
if (files.length === 1 && files[0].isDirectory()) { const formExists = await fs.existsSync('./publish/form');
let date = new Date(); if (formExists) {
let fileName = `Release_${date.getFullYear()}${fix2(date.getMonth() + 1)}${fix2(date.getDate())} `; await fs.rmdirSync('./publish/form');
fileName += `${fix2(date.getHours())}-${fix2(date.getMinutes())}-${fix2(date.getSeconds())}.zip`;
fs.mkdir('publish', { recursive: true }, (err) => {
if (err) throw err;
compressing.zip.compressDir(`build/web-desktop/scene-resource/${files[0].name}/`, `publish/${fileName}`)
.then(() => {
console.log('打包成功!');
})
.catch(err => {
console.error(err);
});
});
} }
}); }
\ No newline at end of file
async function main() {
let date = new Date();
let fileName = `Release_${date.getFullYear()}${fix2(date.getMonth() + 1)}${fix2(date.getDate())} `;
fileName += `${fix2(date.getHours())}-${fix2(date.getMinutes())}-${fix2(date.getSeconds())}`;
await initFiles();
compressing.zip.uncompress('../form/publish/form.zip', './publish/form')
.then(() => {
const tarStream = new compressing.zip.Stream();
tarStream.addEntry('../play/build/web-desktop');
tarStream.addEntry('./publish/form');
const destStream = fs.createWriteStream(`publish/${fileName}.zip`);
tarStream.pipe(destStream);
});
}
main();
// var copy = async function (src, dst) {
// //读取目录
// const paths = await fs.readdirSync(src);
// paths.forEach(async function (path) {
// const newSrc = `${src}/${path}`;
// const newDst = `${dst}/${path}`;
// const st = await fs.statSync(newSrc);
// if (st.isFile()) {
// const data = await fs.readFileSync(newSrc);
// await fs.writeFileSync(newDst, data);
// } else if (st.isDirectory()) {
// exists(newSrc, newDst, copy);
// }
// });
// }
// var exists = function (src, dst, callback) {
// //测试某个路径下文件是否存在
// fs.exists(dst, function (exists) {
// if (exists) {//不存在
// callback(src, dst);
// } else {//存在
// fs.mkdir(dst, function () {//创建目录
// callback(src, dst)
// })
// }
// })
// }
// exists('../from', '../to', copy)
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment