tk2312-web/config/index.js

124 lines
3.2 KiB
JavaScript

/*
* @Author: liyxt
* @Date: 2018-09-17 11:10:21
* @LastEditors: liyxt
* @LastEditTime: 2020-04-08 09:34:15
* @Description: file content
*/
const configJSON = require('../config.json');
const buildEntry = require('./buildEntry');
const { spawn } = require('child_process');
// buildPath是npm参数
let buildParam,
paramMap = {};
if (process.env.npm_config_argv) {
[, , ...buildParam] = JSON.parse(process.env.npm_config_argv).original;
} else {
[, , , ...buildParam] = process.argv;
}
buildParam.forEach(param => {
let [key, value] = param.split('=');
paramMap[key] ? paramMap[key].push(value) : (paramMap[key] = [value]);
});
let buildEntryPath = (paramMap['--env.buildPath'] || []).filter(e => e),
buildOutputPath = paramMap['--env.buildOutputPath'] || [],
patchList = paramMap['--env.patchList'] ? paramMap['--env.patchList'][0] : '',
srcDir = paramMap['--env.srcDir'] ? paramMap['--env.srcDir'][0] : configJSON.srcDir || '',
log = paramMap['--env.log'] ? paramMap['--env.log'][0] : 'false';
if (!buildEntryPath.length) {
buildEntryPath = configJSON.buildEntryPath || './src/*/*/*/*/index.js';
}
let buildWithoutHTML = configJSON.buildWithoutHTML;
buildWithoutHTML && typeof buildWithoutHTML === 'string' && (buildWithoutHTML = [buildWithoutHTML]);
// mode是nodeJs参数
let [, , mode, client] = process.argv;
let { entries: hashEntries } = buildEntry({ buildPath: buildEntryPath, buildWithoutHTML, hash: true, client, mode });
let { entries } = buildEntry({ buildPath: buildEntryPath, buildWithoutHTML, hash: false, client, mode });
// 加载打包二开相关文件
let extendBuildEntryPath = configJSON.extendBuildEntryPath || [];
let { entries: extendEntries } = buildEntry({
buildPath: extendBuildEntryPath,
buildWithoutHTML,
hash: false,
client,
fse: true,
mode,
});
if (Object.keys(hashEntries).length) {
runSpawn(buildEntryPath, mode, true, false);
}
if (Object.keys(entries).length) {
runSpawn(buildEntryPath, mode, false, false);
}
if (Object.keys(extendEntries).length) {
runSpawn(extendBuildEntryPath, mode, false, true);
}
function runSpawn(buildEntryPath, mode, hash, fse) {
let extParams = [];
srcDir && extParams.push(`--env.srcDir=${srcDir}`);
patchList && extParams.push(`--env.patchList=${patchList}`);
const ls = spawn('node', [
'--max_old_space_size=4096',
'node_modules/webpack/bin/webpack.js',
'--progress',
'--colors',
'--config',
'./config/webpack.prod.config.js',
...buildEntryPath.map(e => '--env.buildPath=' + e),
`--env.mode=${mode}`,
`--env.hash=${hash}`,
`--env.client=${client}`,
`--env.fse=${fse}`,
`--env.outputPath=${buildOutputPath.join('/')}`,
...extParams,
]);
let process = 0;
ls.stdout.on('data', data => {
print(data);
});
ls.stderr.on('data', data => {
print(data);
});
function print(data) {
if (!data) {
return;
}
data = data.toString();
if (data.includes('ERROR')) {
console.log(data);
throw new Error(data);
} else {
if (log === 'true') {
console.log(data);
} else {
if (data.match(/\[webpack\.Progress\]\s(.*)%/)) {
let next = Number(data.match(/\[webpack\.Progress\]\s(.*)%/)[1]);
if (next > process) {
process = next;
console.log('[webpack.progress]' , process, '%');
}
} else {
console.log(data);
}
}
}
}
}