Skip to content

Commit

Permalink
feat(minify): 提供更友好的压缩错误提示
Browse files Browse the repository at this point in the history
  • Loading branch information
yuhaoju committed Dec 21, 2016
1 parent 449c0e8 commit 863e843
Show file tree
Hide file tree
Showing 4 changed files with 59 additions and 26 deletions.
21 changes: 16 additions & 5 deletions lib/models/Project.js
Expand Up @@ -361,14 +361,25 @@ var Project = function () {
buildOpts: _this3.config.build || {},
assetName: asset.name
}, function (err, response) {
if (err) {
error('an error occured:', err);
if (response.error) {
// err log
var resErr = response.error;
spinner.text = '';
spinner.stop();
info('\n');
spinner.text = 'error occured while minifying ' + resErr.assetName;
spinner.fail();
info(('line: ' + resErr.line + ', col: ' + resErr.col + ' ' + resErr.message + ' \n').red);

// continue
spinner.start();
}

// 将替换版本号的资源名取代原有名字
if (response.length > 0) {
var originAssetName = response[0];
var nextAssetName = response[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];
}
Expand Down
21 changes: 13 additions & 8 deletions lib/modules/minWorker.js
Expand Up @@ -6,6 +6,7 @@ var crypto = require('crypto');
var jsParser = require('uglify-js').parser;
var jsUglify = require('uglify-js').uglify;
var cssUglify = require('uglifycss');
var extend = require('extend');

var HASH_PLACEHOLDER = '[hashPlaceholder]';

Expand All @@ -14,7 +15,7 @@ process.on('message', function (m) {
var cwd = m.cwd;
var buildOpts = m.buildOpts;
var assetName = m.assetName;
var replacedAssets = [];
var response = {};

if (/\.js$/.test(assetName) || /\.css$/.test(assetName)) {
var content = fs.readFileSync(path.resolve(cwd, assetName), { encoding: 'utf8' });
Expand All @@ -30,10 +31,14 @@ process.on('message', function (m) {
willMangle = false;
}

var ast = jsParser.parse(content);
ast = willMangle ? jsUglify.ast_mangle(ast, uglifyjsOpts.mangle) : ast;
ast = uglifyjsOpts.squeeze ? jsUglify.ast_squeeze(ast, uglifyjsOpts.squeeze) : ast;
minifiedCode = jsUglify.gen_code(ast, uglifyjsOpts.genCode);
try {
var ast = jsParser.parse(content);
ast = willMangle ? jsUglify.ast_mangle(ast, uglifyjsOpts.mangle) : ast;
ast = uglifyjsOpts.squeeze ? jsUglify.ast_squeeze(ast, uglifyjsOpts.squeeze) : ast;
minifiedCode = jsUglify.gen_code(ast, uglifyjsOpts.genCode);
} catch (e) {
response.error = extend(true, e, { assetName: assetName });
}
} else if (path.extname(assetName) === '.css') {
var uglifycssOpts = buildOpts.uglifycss || {};
minifiedCode = cssUglify.processString(content, uglifycssOpts);
Expand All @@ -47,14 +52,14 @@ process.on('message', function (m) {
var version = md5(minifiedCode).slice(0, 20); // 和 webpack hash 长度保持一致
var nextName = assetName.replace(HASH_PLACEHOLDER, version);
fs.renameSync(path.resolve(cwd, assetName), path.resolve(cwd, nextName));
replacedAssets = [assetName, nextName];
response.replacedAssets = [assetName, nextName];
} else {
replacedAssets = [assetName, assetName];
response.replacedAssets = [assetName, assetName];
}
}
}

process.send(replacedAssets);
process.send(response);
});

function md5(content) {
Expand Down
21 changes: 16 additions & 5 deletions src/models/Project.js
Expand Up @@ -334,14 +334,25 @@ class Project {
buildOpts: this.config.build || {},
assetName: asset.name
}, (err, response) => {
if (err) {
error('an error occured:', err);
if (response.error) {
// err log
const resErr = response.error;
spinner.text = '';
spinner.stop();
info('\n');
spinner.text = `error occured while minifying ${resErr.assetName}`;
spinner.fail();
info(`line: ${resErr.line}, col: ${resErr.col} ${resErr.message} \n`.red);

// continue
spinner.start();
}

// 将替换版本号的资源名取代原有名字
if (response.length > 0) {
const originAssetName = response[0];
const nextAssetName = response[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];
}
Expand Down
22 changes: 14 additions & 8 deletions src/modules/minWorker.js
Expand Up @@ -4,6 +4,7 @@ const crypto = require('crypto');
const jsParser = require('uglify-js').parser;
const jsUglify = require('uglify-js').uglify;
const cssUglify = require('uglifycss');
const extend = require('extend');

const HASH_PLACEHOLDER = '[hashPlaceholder]';

Expand All @@ -12,7 +13,7 @@ process.on('message', function(m) {
const cwd = m.cwd;
const buildOpts = m.buildOpts;
const assetName = m.assetName;
let replacedAssets = [];
let response = {};

if(/\.js$/.test(assetName) || /\.css$/.test(assetName)) {
const content = fs.readFileSync(path.resolve(cwd, assetName), {encoding: 'utf8'});
Expand All @@ -28,10 +29,15 @@ process.on('message', function(m) {
willMangle = false;
}

let ast = jsParser.parse(content);
ast = willMangle ? jsUglify.ast_mangle(ast, uglifyjsOpts.mangle) : ast;
ast = uglifyjsOpts.squeeze ? jsUglify.ast_squeeze(ast, uglifyjsOpts.squeeze) : ast;
minifiedCode = jsUglify.gen_code(ast, uglifyjsOpts.genCode);
try {
let ast = jsParser.parse(content);
ast = willMangle ? jsUglify.ast_mangle(ast, uglifyjsOpts.mangle) : ast;
ast = uglifyjsOpts.squeeze ? jsUglify.ast_squeeze(ast, uglifyjsOpts.squeeze) : ast;
minifiedCode = jsUglify.gen_code(ast, uglifyjsOpts.genCode);
} catch(e) {
response.error = extend(true, e, {assetName: assetName});
}

} else if (path.extname(assetName) === '.css') {
const uglifycssOpts = buildOpts.uglifycss || {};
minifiedCode = cssUglify.processString(content, uglifycssOpts);
Expand All @@ -45,14 +51,14 @@ process.on('message', function(m) {
const version = md5(minifiedCode).slice(0, 20); // 和 webpack hash 长度保持一致
const nextName = assetName.replace(HASH_PLACEHOLDER, version);
fs.renameSync(path.resolve(cwd, assetName), path.resolve(cwd, nextName));
replacedAssets = [assetName, nextName];
response.replacedAssets = [assetName, nextName];
} else {
replacedAssets = [assetName, assetName];
response.replacedAssets = [assetName, assetName];
}
}
}

process.send(replacedAssets);
process.send(response);
});

function md5(content) {
Expand Down

0 comments on commit 863e843

Please sign in to comment.