UNPKG

legoflow-engine

Version:
95 lines (79 loc) 2.59 kB
/** * 开发工作流 */ const WebpackConfig = require('./webpack-config') const { extendConfig, setMode, logVersion, loadPlugins } = require('./common/util.js') const findFreePort = require('find-free-port') const chalk = require('chalk') const logProgress = require('./common/log-progress') module.exports = async () => { const mode = 'development' // 局域网 IP const ip = require('ip').address() // 设置 webpack mode setMode(mode) // 打印 cli 版本号 logVersion() // 扩展配置 const extendConfigFunc = extendConfig() // 构建基础 webpack config let webpackConfig = WebpackConfig() // 加载插件 await loadPlugins({ webpackConfig }) // dev server 配置 let webpackDevServerConfig = { host: '0.0.0.0', contentBase: './public', watchContentBase: true, hot: true, historyApiFallback: false, compress: false, noInfo: false, lazy: false, quiet: true, stats: { colors: true, modules: false, children: false, chunks: false, chunkModules: false }, filename: 'bundle.js', proxy: {}, disableHostCheck: true, https: false } // 执行扩展配置函数 if (extendConfigFunc) { const __extendConfig__ = await extendConfigFunc({ mode, webpackConfig, webpackDevServerConfig }) __extendConfig__ && __extendConfig__.webpackConfig && (webpackConfig = __extendConfig__.webpackConfig) __extendConfig__ && __extendConfig__.webpackDevServerConfig && (webpackDevServerConfig = __extendConfig__.webpackDevServerConfig) } // 进度输出控制台 logProgress.show(mode) // webpack webpackConfig = webpackConfig.toConfig ? webpackConfig.toConfig() : webpackConfig const compiler = require('webpack')(webpackConfig) const port = await new Promise(resolve => findFreePort(8080, ip, (err, port) => { if (err) { console.error(err) } resolve(port) })) // webpack dev server const WebpackDevServer = require('webpack-dev-server') new WebpackDevServer(compiler, webpackDevServerConfig).listen(port, '0.0.0.0') // 控制台打印 server 信息 compiler.hooks.done.tap('lf-engine dev', stats => { const protocol = webpackDevServerConfig.https ? 'https:' : 'http:' const hasError = stats.hasErrors() console.log(` App running at:`) console.log(` - Local: ${(!hasError ? chalk.cyan : chalk.red)(`${protocol}//127.0.0.1:${port}/`)}`) console.log(` - Network: ${(!hasError ? chalk.cyan : chalk.red)(`${protocol}//${ip}:${port}/`)}`) console.log('\n') }) }