// 多进程 编译所有 //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(); //----------- 【一般编译,按参数,一个接一个的】 --------------- function DoWebpackBuild(list, i, l) { let wpkCfg, step = 1, isAll = false; if (i == null && l == null) { //------------ 【webpack 一口气编译指定的所有功能】 -------------- isAll = true; wpkCfg = list; } else { wpkCfg = list[i]; if (wpkCfg == null) { console.log(chalk.green(`消耗 ${(new Date().valueOf() - startTime) / 1000} 秒`)); return; } console.log(chalk.yellow(`进度 ${i + 1}/${l} ,正在编译${wpkCfg.output.path}\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 (isAll) { console.log(chalk.green(`消耗 ${(new Date().valueOf() - startTime) / 1000} 秒`)); } isAll == false && DoWebpackBuild(list, i + step, l); }); } 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 //以上两种时间上差不多 20s } else { let webpackList = require('./webpack.get-list.js'); len = webpackList.length; console.log(`【按需编译】共${len}个=====================\n`) DoWebpackBuild(webpackList)//, 0, len }