Skip to content

Commit

Permalink
feat: 支持压缩代码的 source-map
Browse files Browse the repository at this point in the history
  • Loading branch information
yuhaoju committed Jan 15, 2018
1 parent 3c75e41 commit 3075128
Show file tree
Hide file tree
Showing 10 changed files with 306 additions and 367 deletions.
87 changes: 14 additions & 73 deletions lib/commands/pack.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de

var webpack = require('webpack');
var colors = require('colors');
var UglifyJsPlugin = require('uglifyjs-webpack-plugin');

var UtilFs = require('../utils/fs.js');
var ConfigProcessCircle = require('../modules/ConfigProcessCircle.js');
Expand Down Expand Up @@ -178,18 +179,21 @@ exports.run = function (options) {
function prepareConfig() {
config.plugins.push(new webpack.optimize.ModuleConcatenationPlugin());

if (opt.sourcemap) {
config.devtool = opt.sourcemap;
}

if (!opt.quiet) {
config.plugins.push(require('../plugins/progressBarPlugin.js'));
}

if (opt.min) {
config.output = config.output.prd;
config.devtool = '';
config.plugins.push(new UglifyJsPlugin({
sourceMap: config.devtool ? true : false,
parallel: true,
uglifyOptions: {
ie8: true
}
}));
} else {
config.devtool = 'source-map';
config.output = config.output.dev;
}

Expand All @@ -207,8 +211,6 @@ exports.run = function (options) {
}

function compilingProcess() {
var _this2 = this;

return new _promise2.default(function (resolve, reject) {
webpack(config, function (err, stats) {
compilerStats = stats;
Expand Down Expand Up @@ -245,78 +247,17 @@ exports.run = function (options) {
process.exit(1);
}

if (opt.min) {
var computecluster = require('compute-cluster');
var cc = new computecluster({
module: sysPath.resolve(__dirname, '../modules/MinifyWorker.js'),
max_backlog: -1,
max_processes: processNum
});

spinner.start();

var assetsInfo = stats.toJson({
errorDetails: false
}).assets;
var processToRun = assetsInfo.length;

var originAssets = stats.compilation.assets;
var nextAssets = {};

assetsInfo.forEach(function (asset) {
cc.enqueue({
opt: opt,
cwd: dist,
buildOpts: _this2.build || _this2.config.build || {},
assetName: asset.name
}, function (err, response) {
if (response.error) {
// err log
var resErr = response.error;
spinner.text = '';
spinner.stop();
logError('Error occured while minifying ' + resErr.assetName + '\n' + resErr.errorSource);

process.exit(1);
}

// 将替换版本号的资源名取代原有名字
var replacedAssets = response.replacedAssets;
if (replacedAssets && replacedAssets.length > 0) {
var originAssetName = replacedAssets[0];
var nextAssetName = replacedAssets[1];
if (originAssets[originAssetName]) {
nextAssets[nextAssetName] = originAssets[originAssetName];
}
}

processToRun -= 1;
spinner.text = '[Minify] ' + (assetsInfo.length - processToRun) + '/' + assetsInfo.length + ' assets';

if (processToRun === 0) {
cc.exit();
spinner.stop();

// 更新 stats
stats.compilation.assets = (0, _keys2.default)(nextAssets).length > 0 ? nextAssets : originAssets;
compilerStats = stats;
resolve();
}
});
});
} else {
resolve();
}
resolve();
});
});
}

function handleAfterPack() {
var _this3 = this;
var _this2 = this;

return new _promise2.default(function (resolve, reject) {
spinner.stop();
async.series(_this3.packCallbacks.concat(_this3.hooks.afterPack).map(function (packCallback) {
async.series(_this2.packCallbacks.concat(_this2.hooks.afterPack).map(function (packCallback) {
return function (callback) {
var isAsync = false;

Expand All @@ -343,13 +284,13 @@ exports.run = function (options) {
}

function printStats() {
var _this4 = this;
var _this3 = this;

return new _promise2.default(function (resolve, reject) {
process.stdout.write('\n--------------------- YKIT EMITTED ASSETS ---------------------\n\n');

var statsInfo = compilerStats.toJson({ errorDetails: false });
var assetsInfo = _this4.config._config.assetsInfo || statsInfo.assets;
var assetsInfo = _this3.config._config.assetsInfo || statsInfo.assets;
assetsInfo.map(function (asset) {
if (sysPath.extname(asset.name) !== '.cache') {
var fileSize = UtilFs.getFileSize(sysPath.resolve(dist, asset.name));
Expand Down
5 changes: 5 additions & 0 deletions lib/commands/server.js
Original file line number Diff line number Diff line change
Expand Up @@ -220,6 +220,11 @@ exports.run = function (options) {
var outputConfigDir = project.config._config.output.local.path || 'prd';
var outputAbsDir = sysPath.isAbsolute(outputConfigDir) ? outputConfigDir : sysPath.join(projectDir, outputConfigDir);

// 添加 source-map
if (!webpackConfig.devtool) {
webpackConfig.devtool = 'source-map';
}

// 非 output.path 下的资源不做处理
url = url.replace(projectName + '/', '/');
if (!projectName || sysPath.join(projectDir, url).indexOf(outputAbsDir) === -1) {
Expand Down
2 changes: 1 addition & 1 deletion lib/models/Config.js
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ var Config = function () {
extensions: ['.js', '.css', '.json', '.string', '.tpl'],
alias: {}
},
devtool: 'source-map'
devtool: ''
}, extraConfig);

Manager.mixYkitConf(extraConfig);
Expand Down
105 changes: 0 additions & 105 deletions lib/modules/MinifyWorker.js

This file was deleted.

1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@
"style-loader": "^0.13.1",
"uglify-js": "^3.1.9",
"uglifycss": "0.0.25",
"uglifyjs-webpack-plugin": "^1.1.6",
"webpack": "^3.8.1",
"webpack-bundle-analyzer": "^2.9.1",
"webpack-dev-middleware": "^1.12.0",
Expand Down
85 changes: 12 additions & 73 deletions src/commands/pack.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

const webpack = require('webpack');
const colors = require('colors');
const UglifyJsPlugin = require('uglifyjs-webpack-plugin');

const UtilFs = require('../utils/fs.js');
const ConfigProcessCircle = require('../modules/ConfigProcessCircle.js');
Expand Down Expand Up @@ -106,18 +107,23 @@ exports.run = function (options) {
function prepareConfig() {
config.plugins.push(new webpack.optimize.ModuleConcatenationPlugin());

if (opt.sourcemap) {
config.devtool = opt.sourcemap;
}

if (!opt.quiet) {
config.plugins.push(require('../plugins/progressBarPlugin.js'));
}

if (opt.min) {
config.output = config.output.prd;
config.devtool = '';
config.plugins.push(
new UglifyJsPlugin({
sourceMap: config.devtool ? true : false,
parallel: true,
uglifyOptions: {
ie8: true
}
})
);
} else {
config.devtool = 'source-map';
config.output = config.output.dev;
}

Expand Down Expand Up @@ -174,74 +180,7 @@ exports.run = function (options) {
process.exit(1);
}

if (opt.min) {
const computecluster = require('compute-cluster');
const cc = new computecluster({
module: sysPath.resolve(__dirname, '../modules/MinifyWorker.js'),
max_backlog: -1,
max_processes: processNum
});

spinner.start();

const assetsInfo = stats.toJson({
errorDetails: false
}).assets;
let processToRun = assetsInfo.length;

const originAssets = stats.compilation.assets;
const nextAssets = {};

assetsInfo.forEach(asset => {
cc.enqueue(
{
opt: opt,
cwd: dist,
buildOpts: this.build || this.config.build || {},
assetName: asset.name
},
(err, response) => {
if (response.error) {
// err log
const resErr = response.error;
spinner.text = '';
spinner.stop();
logError(`Error occured while minifying ${resErr.assetName}\n${resErr.errorSource}`);

process.exit(1);
}

// 将替换版本号的资源名取代原有名字
const replacedAssets = response.replacedAssets;
if (replacedAssets && replacedAssets.length > 0) {
const originAssetName = replacedAssets[0];
const nextAssetName = replacedAssets[1];
if (originAssets[originAssetName]) {
nextAssets[nextAssetName] = originAssets[originAssetName];
}
}

processToRun -= 1;
spinner.text = `[Minify] ${assetsInfo.length -
processToRun}/${assetsInfo.length} assets`;

if(processToRun === 0) {
cc.exit();
spinner.stop();

// 更新 stats
stats.compilation.assets = Object.keys(nextAssets).length > 0
? nextAssets
: originAssets;
compilerStats = stats;
resolve();
}
}
);
});
} else {
resolve();
}
resolve();
});
});
}
Expand Down
Loading

0 comments on commit 3075128

Please sign in to comment.