UNPKG

2.08 kBJavaScriptView Raw
1var _ = require('lodash');
2var console = require('miaow-util').console;
3var mutil = require('miaow-util');
4var Tapable = require('tapable');
5
6var Compilation = require('./Compilation');
7var ModuleFactory = require('./ModuleFactory');
8var Resolver = require('./Resolver');
9var Watcher = require('./Watcher');
10
11function 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
23Compiler.prototype = Object.create(Tapable.prototype);
24Compiler.prototype.constructor = Compiler;
25
26Compiler.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
36Compiler.prototype.watch = function(callback) {
37 var watcher = new Watcher(this, callback);
38 watcher.watch(callback);
39};
40
41Compiler.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
75module.exports = Compiler;