unique-interface
Version:
无UI组件库
73 lines (67 loc) • 2.58 kB
JavaScript
const webpack = require("webpack");
const colors = require('colors');
const Table = require('easy-table');
const tasker = require('../tasker.js');
const report = require('../report.js').report;
const log = require('../report.js').log;
const trigger = require('../report.js').trigger;
// const allBuilds = require("./config.js");
const pkg = require("../../package.json");
function buildNext(builds){
const config = builds.shift();
return tasker('Build File: ' + config.output.filename, (resolve, reject) => {
webpack(config, (err, stats) => {
if(err || stats.hasErrors() || stats.hasWarnings()){
log('Start of Errors: ', 'warn');
if(err){
console.error(err.stack || err);
if(err.details)console.error(err.details);
} else if(stats.hasErrors()){
stats.toJson().errors.forEach(function(err){
console.error(err);
});
} else if(stats.hasWarnings()){
stats.toJson().warnings.forEach(function(warning){
console.warn(warning);
});
}
log('End of Errors.', 'warn');
reject({ err, stats });
} else {
resolve(stats.toJson().assets);
}
});
});
}
function build(builds){
return tasker('Build Project: ' + pkg.name, (resolve, reject) => {
let assetsAll = [];
let next = function(){
if(builds.length) {
buildNext(builds).then(assets => {
assetsAll = assetsAll.concat(assets);
next();
}).catch(reason => {
trigger('build-error');
reject(reason);
});
} else {
// if(!assetsAll.length)return;
let fileInfo = Table.print(
assetsAll.map(asset => {
let size = ~~(asset.size / 1024);
let color = size > 120 ? 'red' : size > 60 ? 'yellow' : 'reset';
return {
size: (size + 'kb')[color],
file: asset.name[color],
}
})
);
console.log("Build Files:\n " + fileInfo.split("\n").slice(2, -1).join("\n "));
resolve();
}
};
next();
}, 'info');
}
module.exports = build;