1 | var _ = require('lodash');
|
2 | var console = require('miaow-util').console;
|
3 | var mutil = require('miaow-util');
|
4 | var Tapable = require('tapable');
|
5 |
|
6 | var Compilation = require('./Compilation');
|
7 | var ModuleFactory = require('./ModuleFactory');
|
8 | var Resolver = require('./Resolver');
|
9 | var Watcher = require('./Watcher');
|
10 |
|
11 | function Compiler(options) {
|
12 | Tapable.call(this);
|
13 | _.bindAll(this);
|
14 |
|
15 | this.context = options.context;
|
16 | this.output = options.output;
|
17 | this.debug = options.debug;
|
18 | this.options = options;
|
19 |
|
20 | this.resolver = new Resolver(options.resolve);
|
21 | }
|
22 |
|
23 | Compiler.prototype = Object.create(Tapable.prototype);
|
24 | Compiler.prototype.constructor = Compiler;
|
25 |
|
26 | Compiler.prototype.run = function(callback) {
|
27 | this.applyPluginsAsync('run', function(err) {
|
28 | if (err) {
|
29 | return callback(err);
|
30 | }
|
31 |
|
32 | this.compile(callback);
|
33 | }.bind(this));
|
34 | };
|
35 |
|
36 | Compiler.prototype.watch = function(callback) {
|
37 | var watcher = new Watcher(this, callback);
|
38 | watcher.watch(callback);
|
39 | };
|
40 |
|
41 | Compiler.prototype.compile = function(callback) {
|
42 | var compiler = this;
|
43 | var compilation = new Compilation();
|
44 | compilation.factory = new ModuleFactory(this.options.modules);
|
45 | compilation.resolver = this.resolver;
|
46 | compilation.context = this.context;
|
47 | compilation.exclude = this.options.exclude;
|
48 | compilation.debug = this.debug;
|
49 | compilation.output = this.output;
|
50 | compilation.startTime = new Date();
|
51 |
|
52 | console.log('开始编译');
|
53 |
|
54 | this.applyPluginsAsyncSeries('compile', compilation, function(err) {
|
55 | if (err) {
|
56 | return callback(err);
|
57 | }
|
58 |
|
59 | compilation.seal(function(err) {
|
60 | if (err) {
|
61 | console.error('编译失败');
|
62 | return compiler.applyPluginsAsyncSeries('compile-failed', compilation, function() {
|
63 | callback(err);
|
64 | });
|
65 | }
|
66 |
|
67 | console.log('编译成功,编译' + _.size(compilation.modules) + '个模块,耗时' + mutil.duration(new Date() - compilation.startTime));
|
68 | compiler.applyPluginsAsyncSeries('compile-success', compilation, function(err) {
|
69 | callback(err);
|
70 | });
|
71 | });
|
72 | });
|
73 | };
|
74 |
|
75 | module.exports = Compiler;
|