1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | var tslib_1 = require("tslib");
|
4 | var webpack = require("webpack");
|
5 | var path = require("path");
|
6 | var fs = require("fs-extra");
|
7 | var findup = require("mora-scripts/libs/fs/findup");
|
8 | var isWin = require("mora-scripts/libs/sys/isWin");
|
9 | var webpack_config_1 = require("./config/webpack.config");
|
10 | var Server = require('webpack-dev-server');
|
11 | var debug = require('debug')('minapp:compiler');
|
12 | var Compiler = (function () {
|
13 | function Compiler(srcDir, distDir, options) {
|
14 | if (options === void 0) { options = {}; }
|
15 | this.production = !!options.production;
|
16 | this.minimize = !!options.minimize;
|
17 | if (this.production) {
|
18 | process.env.NODE_ENV = 'production';
|
19 | process.env.BABEL_ENV = 'production';
|
20 | }
|
21 | debug('production: %j', this.production);
|
22 | this.srcDir = path.resolve(srcDir);
|
23 | this.distDir = path.resolve(distDir);
|
24 | try {
|
25 | var pkgFile = findup.pkg(this.srcDir);
|
26 | this.rootDir = path.dirname(pkgFile);
|
27 | this.localPkg = require(pkgFile);
|
28 | this.modulesDir = path.resolve(pkgFile, '..', 'node_modules');
|
29 | }
|
30 | catch (e) {
|
31 | throw new Error("\u5F53\u524D\u9879\u76EE\u4E2D\u6CA1\u6709 package.json \u6587\u4EF6\uFF0C\u65E0\u6CD5\u7F16\u8BD1");
|
32 | }
|
33 | this.options = this.init(options);
|
34 | debug('options: %j', this.options);
|
35 | this.build();
|
36 | }
|
37 | Compiler.prototype.init = function (options) {
|
38 | if (options === void 0) { options = {}; }
|
39 | var server = options.server, _a = options.staticDir, staticDir = _a === void 0 ? 'static' : _a, rest = tslib_1.__rest(options, ["server", "staticDir"]);
|
40 | var defaultServer = {
|
41 | hot: false,
|
42 | host: isWin ? 'localhost' : '0.0.0.0',
|
43 | port: '8080',
|
44 | contentBase: this.distDir
|
45 | };
|
46 | return tslib_1.__assign({ server: server ? tslib_1.__assign({}, defaultServer, server) : undefined, staticDir: path.join(this.distDir, staticDir) }, rest);
|
47 | };
|
48 | Compiler.prototype.build = function () {
|
49 | fs.ensureDirSync(this.distDir);
|
50 | var wpOpts = webpack_config_1.webpackConfig(this);
|
51 | var wp = webpack(wpOpts);
|
52 | var callback = function (err, stats) {
|
53 | if (err)
|
54 | console.log(err.message, err.stack);
|
55 | else
|
56 | console.log(stats.toString(wpOpts.stats));
|
57 | };
|
58 | var _a = this.options, serverOpts = _a.server, watch = _a.watch;
|
59 | var server;
|
60 | if (serverOpts) {
|
61 | serverOpts.stats = wpOpts.stats;
|
62 | debug('devServer: %j', serverOpts);
|
63 | server = new Server(wp, serverOpts);
|
64 | server.listen(serverOpts.port, serverOpts.host);
|
65 | }
|
66 | else if (watch) {
|
67 | wp.watch({}, callback);
|
68 | }
|
69 | else {
|
70 | wp.run(callback);
|
71 | }
|
72 | if (serverOpts || watch) {
|
73 | ['SIGINT', 'SIGTERM'].forEach(function (s) { return process.on(s, function () {
|
74 | if (server)
|
75 | server.close(function () { return process.exit(); });
|
76 | else
|
77 | process.exit();
|
78 | }); });
|
79 | }
|
80 | };
|
81 | return Compiler;
|
82 | }());
|
83 | exports.Compiler = Compiler;
|