bunjs
Version:
bun-cli工具是一个融合了多种实用功能的前端命令行工具,它服务于bunjs框架,却不止于bunjs。
117 lines (100 loc) • 3.19 kB
JavaScript
module.exports = (userConf) => {
process.env.NODE_ENV = 'dev';
var opn = require('opn');
var path = require('path');
var express = require('express');
var webpack = require('webpack');
const history = require('connect-history-api-fallback');
// var proxyMiddleware = require('http-proxy-middleware');
// var mockServerMiddleware = require('./mockServerMiddleware');
// var proxyServerMiddleware = require('./proxyServerMiddleware');
var webpackConfig = require('../config/webpack.config-dev.js')(userConf);
if (!userConf.dev) {
console.log('Can not found config.dev!');
process.exit();
}
// default port where dev server listens for incoming traffic
var port = process.env.PORT || userConf.dev.port;
// automatically open browser, if not set will be false
var autoOpenBrowser = !!userConf.dev.autoOpenBrowser;
// Define HTTP proxies to your custom API backend
// https://github.com/chimurai/http-proxy-middleware
var proxyTable = userConf.dev.proxyTable;
var app = express();
var compiler = webpack(webpackConfig);
var devMiddleware = require('webpack-dev-middleware')(compiler, {
publicPath: '/',
quiet: true,
stats: {
assets: true,
colors: true,
publicPath: true,
version: true,
hash: false,
timings: false,
chunks: false,
children: false,
chunkOrigins: false,
chunkModules: false,
depth: false,
modules: false,
},
});
var hotMiddleware = require('webpack-hot-middleware')(compiler, {
log: false,
heartbeat: 2000,
});
app.use(
history({
index: '/index.html'
})
);
// // proxy api requests
// Object.keys(proxyTable).forEach(function (context) {
// var options = proxyTable[context]
// if (typeof options === 'string') {
// options = { target: options }
// }
// app.use(proxyMiddleware(options.filter || context, options))
// })
// serve webpack bundle output
app.use(devMiddleware);
// enable hot-reload and state-preserving
// compilation error display
app.use(hotMiddleware);
// if (process.env.SERVER_ENV === 'mock') {
// app.use(mockServerMiddleware);
// } else {
// app.use(proxyServerMiddleware);
// }
// mock & proxy server
app.use(
require('express-devtool')({
mockDir: path.resolve(process.cwd(), userConf.dev.mockDir), // 定义mock目录
})
);
// serve pure static assets
// var staticPath = path.posix.join(userConf.dev.assetsPublicPath, userConf.dev.assetsSubDirectory);
app.use(express.static(webpackConfig.output.path));
var uri = 'http://localhost:' + port + userConf.dev.openUrlPath;
var _resolve;
var readyPromise = new Promise(resolve => {
_resolve = resolve;
});
console.log('> Starting dev server...');
devMiddleware.waitUntilValid(() => {
console.log('> Listening at ' + uri + '\n');
// when env is testing, don't need open it
if (autoOpenBrowser) {
opn(uri);
}
_resolve();
});
var server = app.listen(port);
module.exports = {
ready: readyPromise,
close: () => {
server.close();
},
};
}