UNPKG

3.32 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3var tslib_1 = require("tslib");
4var webpack = require("webpack");
5var path = require("path");
6var fs = require("fs-extra");
7var findup = require("mora-scripts/libs/fs/findup");
8var isWin = require("mora-scripts/libs/sys/isWin");
9var webpack_config_1 = require("./config/webpack.config");
10var Server = require('webpack-dev-server');
11var debug = require('debug')('minapp:compiler');
12var 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}());
83exports.Compiler = Compiler;