@gdjiami/cli
Version:
CLI for build front end project.
124 lines (123 loc) • 5.69 kB
JavaScript
"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*/];
}
});
}); });