guido
Version:
基于webpack4的一键式开发工具,集成handlebars、雪碧图、SVG Sprite、自定义资源注入等方式
81 lines (73 loc) • 2.16 kB
JavaScript
;
process.env.BABEL_ENV = 'development';
process.env.NODE_ENV = 'development';
process.on('unhandledRejection', err => {
throw err;
});
const chalk = require('chalk');
const address = require('address');
const webpackDevServer = require('webpack-dev-server');
const print = require('../utils/print');
const createWebpackConfig = require('../utils/createWebpackConfig');
const createWebpackCompiler = require('../utils/createWebpackCompiler');
const checkDetectPort = require('../utils/checkDetectPort');
const title = chalk.bold.blue(`====== Guido Server ======`);
print(title, {
clear: true,
});
createWebpackConfig()
.then(config => {
return new Promise((resolve, reject) => {
checkDetectPort(config.devServer.port, config.devServer.host)
.then(() => {
resolve(config);
})
.catch(err => {
reject(err);
});
});
})
.then(config => {
let devServerConfig = config.devServer;
config.devServer = {};
webpackDevServer.addDevServerEntrypoints(config, devServerConfig);
return createWebpackCompiler(config).then(compiler => {
compiler.hooks.invalid.tap('invalid', () => {
print(`${title}`, { clear: true });
});
compiler.hooks.done.tap('done', stats => {
let protocol =
Boolean(devServerConfig.https) === false ? 'http' : 'https';
let title = chalk.bgBlue.black('', 'I', '');
print(
`${title} ${chalk.bold('本地访问地址:')} ${protocol}://${
devServerConfig.host
}:${devServerConfig.port}/`
);
print(
`${title} ${chalk.bold(
'外网访问地址:'
)} ${protocol}://${address.ip()}:${devServerConfig.port}/`
);
});
return Promise.resolve({ compiler, devServerConfig });
});
})
.then(({ compiler, devServerConfig }) => {
const server = new webpackDevServer(compiler, devServerConfig);
server.listen(devServerConfig.port, devServerConfig.host, err => {
err && console.log(err);
});
['SIGINT', 'SIGTERM'].forEach(sig => {
process.on(sig, () => {
server.close();
process.exit();
});
});
})
.catch(err => {
if (err && err.message) {
console.log(err.message);
}
process.exit(1);
});