UNPKG

@gdjiami/cli

Version:

CLI for build front end project.

124 lines (123 loc) 5.69 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = require("tslib"); /** * serve builded content in dist */ var fs_extra_1 = tslib_1.__importDefault(require("fs-extra")); var opener_1 = tslib_1.__importDefault(require("opener")); var express_1 = tslib_1.__importDefault(require("express")); var chalk_1 = tslib_1.__importDefault(require("chalk")); var https_1 = tslib_1.__importDefault(require("https")); var ora_1 = tslib_1.__importDefault(require("ora")); var proxy_1 = require("../proxy"); var paths_1 = tslib_1.__importDefault(require("../paths")); var utils_1 = require("../utils"); var cert_1 = require("../cert"); var options_1 = tslib_1.__importDefault(require("../options")); var mode = 'production'; var useYarn = utils_1.shouldUseYarn(); process.env.NODE_ENV = mode; // initial env require('../env'); function checkDist() { var distPath = paths_1.default.appDist; if (!fs_extra_1.default.existsSync(distPath) || fs_extra_1.default.readdirSync(distPath, { withFileTypes: true }).length === 0) { utils_1.message.error("Error: dist " + chalk_1.default.cyan(distPath) + " is empty. Call " + chalk_1.default.green(useYarn ? "yarn build" : 'npm build') + " to build bundle for production."); process.exit(1); return ''; } return distPath; } exports.default = (function (argv) { return tslib_1.__awaiter(void 0, void 0, void 0, function () { var dist, environment, pkg, jmOptions, proxy, port, protocol, host, spinner, app, callback, listeningServer, _a, key, cert; return tslib_1.__generator(this, function (_b) { switch (_b.label) { case 0: dist = checkDist(); environment = require('../env').default(); pkg = require(paths_1.default.appPackageJson); jmOptions = options_1.default(pkg); if (jmOptions == null) { return [2 /*return*/]; } proxy = jmOptions.proxy ? proxy_1.interpolateProxy(jmOptions.proxy, environment.raw) : undefined; return [4 /*yield*/, utils_1.choosePort(parseInt(environment.raw.PORT, 10) || 8080)]; case 1: port = _b.sent(); protocol = environment.raw.HTTPS === 'true' ? 'https' : 'http'; host = '0.0.0.0'; if (argv.inspect) { utils_1.inspect(environment.raw, 'Environment'); utils_1.inspect({ gzip: argv.gzip, protocol: protocol, host: host, port: port, proxy: proxy, }, 'Server Config'); return [2 /*return*/]; } spinner = ora_1.default({ text: "Starting server..." }).start(); app = express_1.default(); if (argv.gzip) { app.use(require('compression')()); } app.use(function (req, res, next) { next(); utils_1.message.info("[" + req.method + "] " + req.url + ": " + res.statusCode); }); if (argv.cors) { app.use(require('cors')()); } // serve static files app.use(express_1.default.static(dist)); if (proxy) { proxy_1.applyProxyToExpress(proxy, app); } if (argv.f) { app.use(require('connect-history-api-fallback')()); } callback = function (err) { spinner.stop(); if (err != null) { utils_1.message.error('Failed to setup server:'); console.log(err); return; } var urls = utils_1.prepareUrls(protocol, host, port); utils_1.message.info("Server running at " + chalk_1.default.cyan(urls.lanUrlForTerminal || urls.localUrlForTerminal)); utils_1.message.info("Static resources is served from " + chalk_1.default.cyan(dist)); if (proxy) { var proxyInfo = proxy_1.proxyInfomation(proxy); if (proxyInfo) { utils_1.message.info("Other HTTP requests will proxy to Proxy-Server base on:\n " + chalk_1.default.cyan(proxyInfo)); } } if (argv.open) { opener_1.default(urls.localUrlForBrowser); } }; if (protocol === 'https') { _a = cert_1.getCerts(), key = _a.key, cert = _a.cert; listeningServer = https_1.default .createServer({ key: key, cert: cert, }, app) .listen(port, host, callback); } else { listeningServer = app.listen(port, host, callback); } ; ['SIGINT', 'SIGTERM'].forEach(function (sig) { process.on(sig, function () { listeningServer.close(); process.exit(); }); }); return [2 /*return*/]; } }); }); });