1 | var _ = require('lodash');
|
2 | var async = require('async');
|
3 | var MiaowError = require('./MiaowError');
|
4 | var Promise = require('promise');
|
5 |
|
6 | function Module() {
|
7 | }
|
8 |
|
9 | Module.prototype.doBuild = function(taskContext) {
|
10 | if (this.__buildPromise__) {
|
11 | return this.__buildPromise__;
|
12 | }
|
13 |
|
14 | var module = this;
|
15 |
|
16 | function runTask(task, callback) {
|
17 | var complete = _.once(function (err) {
|
18 | completeTime && clearTimeout(completeTime);
|
19 |
|
20 | if (err) {
|
21 | if (!(err instanceof MiaowError)) {
|
22 | err = new MiaowError(taskContext.src, err);
|
23 | }
|
24 |
|
25 | return callback(err);
|
26 | }
|
27 |
|
28 | callback();
|
29 | });
|
30 |
|
31 | var completeTime = setTimeout(function() {
|
32 | complete(new Error(task.task.toString() + ' 任务执行超时'));
|
33 | }, 60e3);
|
34 |
|
35 | try {
|
36 | task.task.call(taskContext, task.options, complete);
|
37 | } catch (err) {
|
38 | complete(err);
|
39 | }
|
40 | }
|
41 |
|
42 | this.__buildPromise__ = new Promise(function(resolve, reject) {
|
43 | async.eachSeries(
|
44 | module.tasks,
|
45 | runTask,
|
46 | function(err) {
|
47 | err ? reject(err) : resolve();
|
48 | }
|
49 | );
|
50 | })
|
51 | .then(function() {
|
52 | _.assign(
|
53 | module,
|
54 | _.pick(
|
55 | taskContext,
|
56 | ['url', 'contents', 'dest', 'destHash', 'dependencies', 'emitModules', 'emitFiles', 'cacheable', 'extra']
|
57 | )
|
58 | );
|
59 | });
|
60 |
|
61 | return this.__buildPromise__;
|
62 | };
|
63 |
|
64 | module.exports = Module;
|