Skip to content

Commit 449c0e8

Browse files
committed
feat(pack): 添加对 build 配置项的支持
1 parent c0eeb2a commit 449c0e8

File tree

4 files changed

+26
-10
lines changed

4 files changed

+26
-10
lines changed

lib/models/Project.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,7 @@ var Project = function () {
173173
});
174174
}
175175

176+
extend(true, this.config, userConfigObj);
176177
this.config.setExports(exports);
177178
this.config.setCompiler(userConfigObj.modifyWebpackConfig);
178179
this.config.setSync(userConfigObj.sync);
@@ -357,6 +358,7 @@ var Project = function () {
357358
cc.enqueue({
358359
opt: opt,
359360
cwd: cwd,
361+
buildOpts: _this3.config.build || {},
360362
assetName: asset.name
361363
}, function (err, response) {
362364
if (err) {

lib/modules/minWorker.js

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ var HASH_PLACEHOLDER = '[hashPlaceholder]';
1212
process.on('message', function (m) {
1313
var opt = m.opt;
1414
var cwd = m.cwd;
15+
var buildOpts = m.buildOpts;
1516
var assetName = m.assetName;
1617
var replacedAssets = [];
1718

@@ -22,15 +23,20 @@ process.on('message', function (m) {
2223
if (path.extname(assetName) === '.js') {
2324
// variable name mangling
2425
var willMangle = true;
25-
if (typeof opt.min === 'string' && opt.min.split('=')[0] === 'mangle' && opt.min.split('=')[1] === 'false') {
26+
var uglifyjsOpts = buildOpts.uglifyjs || {};
27+
var isCliArgvCloseMangle = typeof opt.min === 'string' && opt.min.split('=')[0] === 'mangle' && opt.min.split('=')[1] === 'false';
28+
var isBuildOptsCloseMangle = uglifyjsOpts.mangle === false;
29+
if (isCliArgvCloseMangle || isBuildOptsCloseMangle) {
2630
willMangle = false;
2731
}
32+
2833
var ast = jsParser.parse(content);
29-
ast = willMangle ? jsUglify.ast_mangle(ast) : ast;
30-
ast = jsUglify.ast_squeeze(ast);
31-
minifiedCode = jsUglify.gen_code(ast, true);
34+
ast = willMangle ? jsUglify.ast_mangle(ast, uglifyjsOpts.mangle) : ast;
35+
ast = uglifyjsOpts.squeeze ? jsUglify.ast_squeeze(ast, uglifyjsOpts.squeeze) : ast;
36+
minifiedCode = jsUglify.gen_code(ast, uglifyjsOpts.genCode);
3237
} else if (path.extname(assetName) === '.css') {
33-
minifiedCode = cssUglify.processString(content);
38+
var uglifycssOpts = buildOpts.uglifycss || {};
39+
minifiedCode = cssUglify.processString(content, uglifycssOpts);
3440
}
3541

3642
if (minifiedCode) {

src/models/Project.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,7 @@ class Project {
154154
});
155155
}
156156

157+
extend(true, this.config, userConfigObj);
157158
this.config.setExports(exports);
158159
this.config.setCompiler(userConfigObj.modifyWebpackConfig);
159160
this.config.setSync(userConfigObj.sync);
@@ -330,6 +331,7 @@ class Project {
330331
cc.enqueue({
331332
opt: opt,
332333
cwd: cwd,
334+
buildOpts: this.config.build || {},
333335
assetName: asset.name
334336
}, (err, response) => {
335337
if (err) {

src/modules/minWorker.js

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ const HASH_PLACEHOLDER = '[hashPlaceholder]';
1010
process.on('message', function(m) {
1111
const opt = m.opt;
1212
const cwd = m.cwd;
13+
const buildOpts = m.buildOpts;
1314
const assetName = m.assetName;
1415
let replacedAssets = [];
1516

@@ -20,15 +21,20 @@ process.on('message', function(m) {
2021
if(path.extname(assetName) === '.js') {
2122
// variable name mangling
2223
let willMangle = true;
23-
if (typeof opt.min === 'string' && opt.min.split('=')[0] === 'mangle' && opt.min.split('=')[1] === 'false') {
24+
const uglifyjsOpts = buildOpts.uglifyjs || {};
25+
const isCliArgvCloseMangle = typeof opt.min === 'string' && opt.min.split('=')[0] === 'mangle' && opt.min.split('=')[1] === 'false';
26+
const isBuildOptsCloseMangle = uglifyjsOpts.mangle === false;
27+
if (isCliArgvCloseMangle || isBuildOptsCloseMangle) {
2428
willMangle = false;
2529
}
30+
2631
let ast = jsParser.parse(content);
27-
ast = willMangle ? jsUglify.ast_mangle(ast) : ast;
28-
ast = jsUglify.ast_squeeze(ast);
29-
minifiedCode = jsUglify.gen_code(ast, true);
32+
ast = willMangle ? jsUglify.ast_mangle(ast, uglifyjsOpts.mangle) : ast;
33+
ast = uglifyjsOpts.squeeze ? jsUglify.ast_squeeze(ast, uglifyjsOpts.squeeze) : ast;
34+
minifiedCode = jsUglify.gen_code(ast, uglifyjsOpts.genCode);
3035
} else if (path.extname(assetName) === '.css') {
31-
minifiedCode = cssUglify.processString(content);
36+
const uglifycssOpts = buildOpts.uglifycss || {};
37+
minifiedCode = cssUglify.processString(content, uglifycssOpts);
3238
}
3339

3440
if(minifiedCode) {

0 commit comments

Comments
 (0)