ae-biu
Version:
Born For AE, Born To Do
102 lines (82 loc) • 2.43 kB
JavaScript
// @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()
})
})
})