UNPKG

ae-biu

Version:

Born For AE, Born To Do

102 lines (82 loc) 2.43 kB
#!/usr/bin/env node // @flow import program from 'commander' import webpack from 'webpack' import WebpackDevServer from 'webpack-dev-server' import logger from './utils/logger' import getWebpackConfig from './utils/get-webpack-config' import getUrls from './utils/get-urls' /** * Usage */ program .usage('[options]') .parse(process.argv) const args = program.args // must under development // for node process.env.NODE_ENV = 'development' // for sdp, it can be override by project process.env.SDP_ENV = (args[0] || process.env.SDP_ENV || process.env.npm_config_sdp_env || 'test').trim() // default set to test, no why // default port const port = process.env.PORT || 3000 // default host const host = process.env.HOST || '0.0.0.0' // ensure create config after env let webpackConfig: Object = require('./config/webpack.config.dev') let webpackDevServerConfig = require('./config/webpack-dev-server.config') const projectConfig = getWebpackConfig() if (typeof projectConfig === 'function') { webpackConfig = projectConfig({ ...webpackConfig, devServer: webpackDevServerConfig }) } else if (projectConfig) { webpackConfig = projectConfig } if (webpackConfig.devServer) { webpackDevServerConfig = { ...webpackDevServerConfig, ...webpackConfig.devServer } delete webpackConfig.devServer } // ensure HMR work const { entry = {} } = webpackConfig const hmrEntry = [ 'webpack-dev-server/client', // for HMR 'webpack/hot/dev-server' // for HMR ] if (entry.hasOwnProperty('app')) { if (Array.isArray(entry.app)) { entry.app = hmrEntry.concat(entry.app) } else if (typeof entry.app === 'string') { entry.app = hmrEntry.concat([entry.app]) } const appSet = new Set(entry.app) entry.app = Array.from(appSet) } webpackConfig.output.publicPath = '/' const compiler = webpack(webpackConfig) const urls = getUrls(host, port) const urlPrintStr = [ `Server running at:`, ` - Local: ${urls.local}`, ` - Network: ${urls.network}` ].join('\n') compiler.plugin('done', () => console.log(urlPrintStr)) const devServer = new WebpackDevServer(compiler, webpackDevServerConfig) devServer.listen(port, host, (err) => { if (err) { logger.error(err) } logger.info('Starting server with HMR\n') logger.info(urlPrintStr) // 退出 ;['SIGINT', 'SIGTERM'].forEach((sig) => { process.on(sig, () => { devServer.close() process.exit() }) }) })