eunomia-controller
Version:
63 lines (55 loc) • 1.97 kB
JavaScript
;
var express = require('express');
var path = require('path');
var compression = require('compression');
var pkg = require(path.resolve(process.cwd(), 'package.json'));
var addDevMiddlewares = function addDevMiddlewares(app, webpackConfig) {
var webpack = require('webpack');
var webpackDevMiddleware = require('webpack-dev-middleware');
var webpackHotMiddleware = require('webpack-hot-middleware');
var compiler = webpack(webpackConfig);
var middleware = webpackDevMiddleware(compiler, {
noInfo: true,
publicPath: webpackConfig.output.publicPath,
silent: true,
stats: 'errors-only'
});
app.use(middleware);
app.use(webpackHotMiddleware(compiler));
var fs = middleware.fileSystem;
if (pkg.dllPlugin) {
app.get(/\.dll\.js$/, function (req, res) {
var filename = req.path.replace(/^\//, '');
res.sendFile(path.join(process.cwd(), pkg.dllPlugin.path, filename));
});
}
app.get('*', function (req, res) {
fs.readFile(path.join(compiler.outputPath, 'index.html'), function (err, file) {
if (err) {
res.sendStatus(404);
} else {
res.send(file.toString());
}
});
});
};
var addProdMiddlewares = function addProdMiddlewares(app, options) {
var publicPath = options.publicPath || '/';
var outputPath = options.outputPath || path.resolve(process.cwd(), 'build');
app.use(compression());
app.use(publicPath, express.static(outputPath));
app.get('*', function (req, res) {
return res.sendFile(path.resolve(outputPath, 'index.html'));
});
};
module.exports = function (app, options) {
var isProd = process.env.NODE_ENV === 'production';
if (isProd) {
addProdMiddlewares(app, options);
} else {
console.log(path.resolve(process.cwd(), 'tools/webpack/webpack.dev.babel'));
var webpackConfig = require(path.resolve(process.cwd(), 'tools/webpack/webpack.dev.babel'));
addDevMiddlewares(app, webpackConfig);
}
return app;
};