03 Rdoc(react-doc) – 03 servers
返回
const webpack = require('webpack');
const WebpackDevServer = require('webpack-dev-server');
const openBrowsers = require('open-browsers');
const detect = require('detect-port');
const prepareUrls = require('local-ip-url/prepareUrls');
const conf = require('./conf/webpack.config.dev');
const createDevServerConfig = require('./conf/webpack.config.server');
require('colors-cli/toxic');
function clearConsole() {
process.stdout.write(process.platform === 'win32' ? '\x1B[2J\x1B[0f' : '\x1B[2J\x1B[3J\x1B[H');
}
module.exports = function server(cmd) {
const HOST = cmd.host;
let DEFAULT_PORT = cmd.port;
const webpackConf = conf(cmd);
const compiler = webpack(webpackConf);
detect(DEFAULT_PORT).then((_port) => {
if (DEFAULT_PORT !== _port) DEFAULT_PORT = _port;
const protocol = process.env.HTTPS === 'true' ? 'https' : 'http';
const urls = prepareUrls({ protocol, host: HOST, port: DEFAULT_PORT });
// https://webpack.js.org/api/compiler-hooks/#aftercompile
// 编译完成之后打印日志
compiler.hooks.done.tap('done', () => {
/* eslint-disable */
console.log(`Dev Server Listening at Local: ${urls.localUrl.green}`);
console.log(` On Your Network: ${urls.lanUrl.green}`);
console.log(`\nTo create a production build, use ${'npm run build'.blue_bt}.`);
/* eslint-enable */
});
new WebpackDevServer(compiler, createDevServerConfig(cmd, webpackConf)).listen(DEFAULT_PORT, HOST, (err) => {
if (err) {
return console.log(err); // eslint-disable-line
}
clearConsole();
// open browser
openBrowsers(urls.localUrl);
});
}).catch((err) => {
console.log(err); // eslint-disable-line
});
};