Skip to content

Commit 043841b

Browse files
committed
feat(pack): pack 钩子支持同步和异步两种形式
1 parent 91cf42a commit 043841b

File tree

2 files changed

+60
-8
lines changed

2 files changed

+60
-8
lines changed

lib/models/Project.js

Lines changed: 30 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -467,8 +467,19 @@ var Project = function () {
467467
function afterPack() {
468468
async.series(self.packCallbacks.map(function (packCallback) {
469469
return function (callback) {
470-
packCallback(opt, stats);
471-
callback(null);
470+
var isAsync = false;
471+
472+
// 支持异步调用
473+
packCallback.bind({
474+
async: function async() {
475+
isAsync = true;
476+
return callback;
477+
}
478+
})(opt, stats);
479+
480+
if (!isAsync) {
481+
callback(null);
482+
}
472483
};
473484
}), function (err) {
474485
var statsInfo = stats.toJson({ errorDetails: false });
@@ -511,8 +522,23 @@ var Project = function () {
511522

512523
async.series(this.beforePackCallbacks.map(function (beforePackItem) {
513524
return function (callback) {
514-
beforePackItem();
515-
callback(null);
525+
// 支持异步调用
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);
540+
}
541+
}
516542
};
517543
}), function (err) {
518544
compilerProcess();

src/models/Project.js

Lines changed: 30 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -459,8 +459,19 @@ class Project {
459459
async.series(
460460
self.packCallbacks.map(packCallback => {
461461
return function(callback) {
462-
packCallback(opt, stats);
463-
callback(null);
462+
let isAsync = false;
463+
464+
// 支持异步调用
465+
packCallback.bind({
466+
async: function(){
467+
isAsync = true;
468+
return callback;
469+
}
470+
})(opt, stats);
471+
472+
if(!isAsync) {
473+
callback(null);
474+
}
464475
};
465476
}),
466477
err => {
@@ -514,8 +525,23 @@ class Project {
514525
async.series(
515526
this.beforePackCallbacks.map((beforePackItem) => {
516527
return function(callback) {
517-
beforePackItem();
518-
callback(null);
528+
// 支持异步调用
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);
543+
}
544+
}
519545
};
520546
}),
521547
err => {

0 commit comments

Comments
 (0)