UNPKG

brain-vue-cli

Version:

A command line tool used to run projects

104 lines (103 loc) 3.78 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const EConfig_1 = require("../libs/settings/EConfig"); const constants_1 = require("../libs/constants/constants"); // require('./check-versions')() var config = require('../config'); if (!process.env.NODE_ENV) { process.env.NODE_ENV = JSON.parse(config.dev.env.NODE_ENV); } const { name, apps } = EConfig_1.default.getInstance(); var opn = require('opn'); var path = require('path'); var express = require('express'); var webpack = require('webpack'); // var request = require('request'); var proxyMiddleware = require('http-proxy-middleware'); var webpackConfig = process.env.NODE_ENV === 'testing' ? require('./webpack.prod.conf') : require('./webpack.dev.conf'); // default port where dev server listens for incoming traffic var port = process.env.PORT || config.dev.port; // automatically open browser, if not set will be false var autoOpenBrowser = !!config.dev.autoOpenBrowser; // Define HTTP proxies to your custom API backend // https://github.com/chimurai/http-proxy-middleware var proxyTable = config.dev.proxyTable; var app = express(); var compiler = webpack(webpackConfig); var historyApiFallback = require('connect-history-api-fallback'); var devMiddleware = require('webpack-dev-middleware')(compiler, { publicPath: webpackConfig.output.publicPath, quiet: true }); var hotMiddleware = require('webpack-hot-middleware')(compiler, { log: false, heartbeat: 2000 }); // force page reload when html-webpack-plugin template changes compiler.plugin('compilation', function (compilation) { compilation.plugin('html-webpack-plugin-after-emit', function (data, cb) { hotMiddleware.publish({ action: 'reload' }); cb(); }); }); // proxy api requests Object.keys(proxyTable).forEach(function (context) { var options = proxyTable[context]; if (typeof options === 'string') { options = { target: options }; } app.use(proxyMiddleware(options.filter || context, options)); }); // handleOperation fallback for HTML5 history API // app.use(require('connect-history-api-fallback')()) const HISTORY_REWRITE_FALL_BACK_REGEX_FUNC = (name) => { const { name: projectName } = EConfig_1.default.getInstance(); const path = `${constants_1.URL_PREFIX}/${projectName}/${name}`; return new RegExp(`^/((${path}(?=/)|(${path}$)))`); }; app.use(historyApiFallback({ rewrites: apps.map((app) => ({ from: HISTORY_REWRITE_FALL_BACK_REGEX_FUNC(app), to: `/${app}/index.html` })) })); // serve webpack bundle output app.use(devMiddleware); // enable hot-reload and state-preserving // compilation error display app.use(hotMiddleware); // serve pure static assets var staticPath = path.posix.join(config.dev.assetsPublicPath, config.dev.assetsSubDirectory); app.use(staticPath, express.static('./static')); //var uri = 'http://localhost:' + port var uri = `http://localhost:${port}/${constants_1.URL_PREFIX}/${name}/`; var _resolve; var readyPromise = new Promise(resolve => { _resolve = resolve; }); console.log('> Starting dev server...'); devMiddleware.waitUntilValid(() => { console.log('> Listening at ' + uri + '\n'); // when env is testing, don't need open it if (autoOpenBrowser && process.env.NODE_ENV !== 'testing') { if (!apps[0]) { //http://localhost:8000/app2/index.html#/ console.warn(`忽略自动打开浏览器功能:`); console.warn(`请提供指定需要app name作为相对路径`); } else { uri = `${uri}${apps[0]}`; opn(uri); } } _resolve(); }); var server = app.listen(port); module.exports = { ready: readyPromise, close: () => { server.close(); } };