'use strict'; const path = require('path'); const express = require('express'); const webpack = require('webpack'); const https = require('https'); const fs = require('fs'); const webpackConfig = require('./webpack.dev'); const config = require('./config'); const LogPlugin = require('./plugins/serverLog'); const app = express(); const port = config.port; webpackConfig.entry.client = [ 'react-hot-loader/patch', 'webpack-hot-middleware/client?reload=true', 'webpack/hot/only-dev-server', webpackConfig.entry.client ]; webpackConfig.plugins.push(new LogPlugin(port)); let compiler; try { compiler = webpack(webpackConfig); } catch (err) { console.error(err.message); process.exit(1); } const devMiddleWare = require('webpack-dev-middleware')(compiler, { publicPath: webpackConfig.output.publicPath, logLevel: 'warn', inline: true, headers: { 'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Methods': '*', 'Access-Control-Allow-Headers': '*' }, watchOptions: { aggregateTimeout: 100 } }); app.use(devMiddleWare); app.use( require('webpack-hot-middleware')(compiler, { log: console.info }) ); const mfs = devMiddleWare.fileSystem; const file = path.join(webpackConfig.output.path, 'index.html'); devMiddleWare.waitUntilValid(); app.get('*', (req, res) => { devMiddleWare.waitUntilValid(() => { const html = mfs.readFileSync(file); res.end(html); }); }); if (process.env.HTTPS) { let creds = {}; try { creds.key = fs.readFileSync(path.resolve(__dirname, 'server.key'), 'utf8'); } catch (err) { console.error('Failed to get SSL private key at webpack_config/server.key'); console.error(err); process.exit(1); } try { creds.cert = fs.readFileSync(path.resolve(__dirname, 'server.crt'), 'utf8'); } catch (err) { console.error('Failed to get SSL certificate at webpack_config/server.crt'); console.error(err); process.exit(1); } const httpsApp = https.createServer(creds, app); httpsApp.listen(port); } else { app.listen(port); }