import express, {Application} from 'express'; import webpack, {Configuration} from 'webpack'; import middleware from 'webpack-dev-middleware'; import hotMiddleware from 'webpack-hot-middleware'; import {rootPath, runPath, evalJs, readConfigSync} from './lib'; process.env.NODE_ENV = process.env.NODE_ENV || 'production'; const {NODE_ENV} = process.env; const config = readConfigSync(); type AppDecorator = (app: Application) => Application; const configureDevelopment: AppDecorator = (app) => { const webpackOptions = evalJs(rootPath('./webpack.config.js')) as Configuration; const compiler = webpack(webpackOptions); app.use(middleware(compiler, { publicPath: webpackOptions && webpackOptions.output && webpackOptions.output.publicPath || '/' })); app.use(hotMiddleware(compiler, { log: console.log, path: '/__webpack_hmr', heartbeat: 10 * 1000 })); (config.static || []).forEach((staticPath) => { app.use(express.static(runPath(staticPath))); }) return app; } const configureProduction: AppDecorator = (app) => { const p = runPath('static'); console.log(p) app.use(express.static(p)); return app; } export default function server() { const app = express(); return applyMiddleware(app); } export const applyMiddleware:AppDecorator = (app) => { const configurator: AppDecorator = (NODE_ENV === 'development') ? configureDevelopment : configureProduction; return configurator(app); }