// 多进程 编译所有
//parallel-webpack允许您并行运行多个Webpack构建,从而将工作分散到各个处理器上,从而有助于显着加快构建速度
// const os = require('os');
// const cpus = os.cpus().length;
// console.log(cpus, ' Math.floor(cpus/2)||1', Math.floor(cpus / 2) || 1)
const chalk = require('chalk')
let webpack = require('webpack')
let argvs = (process.argv[2] || "").replace(/\s*$/g, "");
let moduleList = argvs != "" ? argvs.split(',') : [];
let len = moduleList.length;
let startTime = new Date().valueOf();
let timerCtl = setInterval(function(){
console.log(chalk.green(`正在编译中,目前已消耗 ${(new Date().valueOf() - startTime) / 1000} 秒=====`))
},1000*60*5);
//----------- 【一般编译,按参数,一个接一个的】 ---------------
function DoWebpackBuild(list, start, total,step = 100) {
let wpkCfg, isEndAll = false;
if(list==null||list.length==0){
console.log(chalk.yellow(`没有模块可编译!`));
clearInterval(timerCtl);
return;
}
// wpkCfg = list[start];
wpkCfg = list.slice(start,start+step);
if (wpkCfg == null||wpkCfg.length==0) {
isEndAll = true;
clearInterval(timerCtl);
console.log(chalk.green(`消耗 ${(new Date().valueOf() - startTime) / 1000} 秒`));
return;
}
console.log('****************************************************************\n');
console.log(`【进度 ${start}/${total} 】,正在编译${start} - ${total<step?total:step}之间的模块...\n`);
console.log('****************************************************************\n');
webpack(wpkCfg, (err, stats) => {
//这个回调一定要写,不然打包不出来
if (err || stats.hasErrors()) {//编译错误不在 err 对象内,而是需要使用 stats.hasErrors() 单独处理
let info = {};
try {
info = stats.toJson();
} catch (e) {
info = {
errors: []
};
console.log('stats.toJson()', err, stats)
}
// console.error(info.errors);
for (let i = 0, l = info.errors.length; i < l; i++) {
// console.log(chalk.red(info.errors[i].message));
// console.error(info.errors[i].message)
console.error(info.errors[i])
}
}
// 处理完成
if (isEndAll) {
clearInterval(timerCtl);
console.log(chalk.green(`消耗 ${(new Date().valueOf() - startTime) / 1000} 秒`));
}else{
DoWebpackBuild(list, start + step, total);
}
});
}
if (len == 0) {
//-------- 【用parallel-webpack,全部编译情况下】 ------------
/*
moduleList = require('./webpack.get-module').moduleList || [];
console.log(`=========进入全模块编译状态(${moduleList.length})模块...=============`)
var run = require('parallel-webpack').run;
run(
require.resolve('./webpack.get-list.js'),
{
watch: false,
maxRetries: 1,
stats: false, // defaults to false
maxConcurrentWorkers: 1,// use 2 workers cup个数
argv: [argvs]
}, ()=>{
//多打包时,如果其中一个模块出错,不知道是哪个模块
console.log('\n--------编译完成------- \n');
});
*/
let webpackList = require('./webpack.get-list.js');
len = webpackList.length;
console.log(`【编译所有 共${len}】=====================\n`)
DoWebpackBuild(webpackList, 0, len);//, 0, len
//以上两种时间上差不多 20s
} else {
let webpackList = require('./webpack.get-list.js');
len = webpackList.length;
console.log(`【按需编译 共${len}】=====================\n`)
DoWebpackBuild(webpackList, 0, len)//, 0, len
}