Skip to content

Commit fd00cb2

Browse files
committed
feat(pack): 支持 beforePack 和 afterPack
1 parent de2121f commit fd00cb2

File tree

2 files changed

+58
-44
lines changed

2 files changed

+58
-44
lines changed

lib/models/Project.js

Lines changed: 29 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ var Project = function () {
3636
this.middlewares = [];
3737
this.beforePackCallbacks = [];
3838
this.packCallbacks = [];
39+
this.beforePack = [];
40+
this.afterPack = [];
3941
this.eslintConfig = require('../config/eslint.json');
4042
this.configFile = globby.sync(['ykit.*.js', 'ykit.js'], { cwd: this.cwd })[0] || '';
4143
this.extendConfig = this.configFile && this.configFile.match(/ykit\.([\w\.]+)\.js/) && this.configFile.match(/ykit\.([\w\.]+)\.js/)[1] && this.configFile.match(/ykit\.([\w\.]+)\.js/)[1].replace(/\./g, '-');
@@ -100,9 +102,12 @@ var Project = function () {
100102
config: _this2.config.getConfig(),
101103
commands: _this2.commands,
102104
middlewares: _this2.middlewares,
105+
// 兼容 ykit-config-yo 的 beforePackCallbacks 和 packCallbacks
103106
applyBeforePack: _this2.applyBeforePack.bind(_this2),
104107
beforePackCallbacks: _this2.beforePackCallbacks,
105108
packCallbacks: _this2.packCallbacks,
109+
beforePack: _this2.beforePack,
110+
afterPack: _this2.afterPack,
106111
eslintConfig: _this2.eslintConfig,
107112
applyMiddleware: _this2.config.applyMiddleware.bind(_this2.config),
108113
env: _this2._getCurrentEnv(), // 默认为本地环境,
@@ -118,12 +123,14 @@ var Project = function () {
118123
var ykitConfigStartWith = 'ykit-config-';
119124
if (Array.isArray(configMethod.plugins)) {
120125
_this2.plugins = configMethod.plugins;
126+
} else if (typeof configMethod.plugins === 'string') {
127+
_this2.plugins = [configMethod.plugins];
121128
}
122129

123-
// 通配置文件名获取插件
130+
// 通过配置文件名获取插件
124131
if (_this2.extendConfig && _this2.extendConfig !== 'config') {
125132
var pluginName = ykitConfigStartWith + _this2.extendConfig;
126-
if (_this2.plugins.indexOf(pluginName) === -1 && _this2.plugins.indexOf('@qnpm/' + pluginName) === -1) {
133+
if (_this2.plugins.indexOf(_this2.extendConfig) === -1) {
127134
_this2.plugins.push(pluginName);
128135
}
129136
}
@@ -206,7 +213,7 @@ var Project = function () {
206213

207214
extend(true, this.config, userConfigObj);
208215
this.config.setExports(exports);
209-
this.config.setCompiler(userConfigObj.modifyWebpackConfig);
216+
this.config.setCompiler(userConfigObj.modifyWebpackConfig, userConfig);
210217
this.config.setSync(userConfigObj.sync);
211218
this.setCommands(configMethod.commands || userConfigObj.command); // 后者兼容以前形式
212219
};
@@ -455,17 +462,17 @@ var Project = function () {
455462
// 更新 stats
456463
stats.compilation.assets = Object.keys(nextAssets).length > 0 ? nextAssets : originAssets;
457464

458-
afterPack();
465+
handleAfterPack();
459466
}
460467
});
461468
});
462469
})();
463470
} else {
464-
afterPack();
471+
handleAfterPack();
465472
}
466473

467-
function afterPack() {
468-
async.series(self.packCallbacks.map(function (packCallback) {
474+
function handleAfterPack() {
475+
async.series(self.packCallbacks.concat(self.afterPack).map(function (packCallback) {
469476
return function (callback) {
470477
var isAsync = false;
471478

@@ -521,26 +528,26 @@ var Project = function () {
521528
};
522529

523530
async.series(this.beforePackCallbacks.map(function (beforePackItem) {
531+
return function (callback) {
532+
// 支持旧的 beforePackCallbacks 形式
533+
beforePackItem(callback, opt);
534+
};
535+
}).concat(this.beforePack.map(function (beforePackItem) {
524536
return function (callback) {
525537
// 支持异步调用
526-
if (beforePackItem.length === 2) {
527-
// 支持旧的 beforePackCallbacks 形式
528-
beforePackItem(callback, opt);
529-
} else {
530-
var isAsync = false;
531-
beforePackItem.bind({
532-
async: function async() {
533-
isAsync = true;
534-
return callback;
535-
}
536-
})(opt);
537-
538-
if (!isAsync) {
539-
callback(null);
538+
var isAsync = false;
539+
beforePackItem.bind({
540+
async: function async() {
541+
isAsync = true;
542+
return callback;
540543
}
544+
})(opt);
545+
546+
if (!isAsync) {
547+
callback(null);
541548
}
542549
};
543-
}), function (err) {
550+
})), function (err) {
544551
compilerProcess();
545552
});
546553

src/models/Project.js

Lines changed: 29 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ class Project {
2828
this.middlewares = [];
2929
this.beforePackCallbacks = [];
3030
this.packCallbacks = [];
31+
this.beforePack = [];
32+
this.afterPack = [];
3133
this.eslintConfig = require('../config/eslint.json');
3234
this.configFile = globby.sync(['ykit.*.js', 'ykit.js'], { cwd: this.cwd })[0] || '';
3335
this.extendConfig = this.configFile &&
@@ -87,9 +89,12 @@ class Project {
8789
config: this.config.getConfig(),
8890
commands: this.commands,
8991
middlewares: this.middlewares,
92+
// 兼容 ykit-config-yo 的 beforePackCallbacks 和 packCallbacks
9093
applyBeforePack: this.applyBeforePack.bind(this),
9194
beforePackCallbacks: this.beforePackCallbacks,
9295
packCallbacks: this.packCallbacks,
96+
beforePack: this.beforePack,
97+
afterPack: this.afterPack,
9398
eslintConfig: this.eslintConfig,
9499
applyMiddleware: this.config.applyMiddleware.bind(this.config),
95100
env: this._getCurrentEnv(), // 默认为本地环境,
@@ -105,12 +110,14 @@ class Project {
105110
const ykitConfigStartWith = 'ykit-config-';
106111
if(Array.isArray(configMethod.plugins)) {
107112
this.plugins = configMethod.plugins;
113+
} else if(typeof configMethod.plugins === 'string'){
114+
this.plugins = [configMethod.plugins];
108115
}
109116

110-
// 通配置文件名获取插件
117+
// 通过配置文件名获取插件
111118
if (this.extendConfig && this.extendConfig !== 'config') {
112119
const pluginName = ykitConfigStartWith + this.extendConfig;
113-
if(this.plugins.indexOf(pluginName) === -1 && this.plugins.indexOf('@qnpm/' + pluginName) === -1) {
120+
if(this.plugins.indexOf(this.extendConfig) === -1) {
114121
this.plugins.push(pluginName);
115122
}
116123
}
@@ -212,7 +219,7 @@ class Project {
212219

213220
extend(true, this.config, userConfigObj);
214221
this.config.setExports(exports);
215-
this.config.setCompiler(userConfigObj.modifyWebpackConfig);
222+
this.config.setCompiler(userConfigObj.modifyWebpackConfig, userConfig);
216223
this.config.setSync(userConfigObj.sync);
217224
this.setCommands(configMethod.commands || userConfigObj.command); // 后者兼容以前形式
218225
}
@@ -446,18 +453,18 @@ class Project {
446453
? nextAssets
447454
: originAssets;
448455

449-
afterPack();
456+
handleAfterPack();
450457
}
451458
}
452459
);
453460
});
454461
} else {
455-
afterPack();
462+
handleAfterPack();
456463
}
457464

458-
function afterPack() {
465+
function handleAfterPack() {
459466
async.series(
460-
self.packCallbacks.map(packCallback => {
467+
self.packCallbacks.concat(self.afterPack).map(packCallback => {
461468
return function(callback) {
462469
let isAsync = false;
463470

@@ -524,26 +531,26 @@ class Project {
524531

525532
async.series(
526533
this.beforePackCallbacks.map((beforePackItem) => {
534+
return function(callback) {
535+
// 支持旧的 beforePackCallbacks 形式
536+
beforePackItem(callback, opt);
537+
};
538+
}).concat(this.beforePack.map((beforePackItem) => {
527539
return function(callback) {
528540
// 支持异步调用
529-
if(beforePackItem.length === 2) {
530-
// 支持旧的 beforePackCallbacks 形式
531-
beforePackItem(callback, opt);
532-
} else {
533-
let isAsync = false;
534-
beforePackItem.bind({
535-
async: function(){
536-
isAsync = true;
537-
return callback;
538-
}
539-
})(opt);
540-
541-
if(!isAsync) {
542-
callback(null);
541+
let isAsync = false;
542+
beforePackItem.bind({
543+
async: function(){
544+
isAsync = true;
545+
return callback;
543546
}
547+
})(opt);
548+
549+
if(!isAsync) {
550+
callback(null);
544551
}
545552
};
546-
}),
553+
})),
547554
err => {
548555
compilerProcess();
549556
}

0 commit comments

Comments
 (0)