/ webpack_config / devServer.js
devServer.js
1 'use strict'; 2 const path = require('path'); 3 const express = require('express'); 4 const webpack = require('webpack'); 5 const https = require('https'); 6 const fs = require('fs'); 7 const webpackConfig = require('./webpack.dev'); 8 const config = require('./config'); 9 const LogPlugin = require('./plugins/serverLog'); 10 11 const app = express(); 12 13 const port = config.port; 14 webpackConfig.entry.client = [ 15 'react-hot-loader/patch', 16 'webpack-hot-middleware/client?reload=true', 17 'webpack/hot/only-dev-server', 18 webpackConfig.entry.client 19 ]; 20 21 webpackConfig.plugins.push(new LogPlugin(port)); 22 23 let compiler; 24 25 try { 26 compiler = webpack(webpackConfig); 27 } catch (err) { 28 console.error(err.message); 29 process.exit(1); 30 } 31 32 const devMiddleWare = require('webpack-dev-middleware')(compiler, { 33 publicPath: webpackConfig.output.publicPath, 34 logLevel: 'warn', 35 inline: true, 36 headers: { 37 'Access-Control-Allow-Origin': '*', 38 'Access-Control-Allow-Methods': '*', 39 'Access-Control-Allow-Headers': '*' 40 }, 41 watchOptions: { 42 aggregateTimeout: 100 43 } 44 }); 45 app.use(devMiddleWare); 46 app.use( 47 require('webpack-hot-middleware')(compiler, { 48 log: false 49 }) 50 ); 51 52 const mfs = devMiddleWare.fileSystem; 53 const file = path.join(webpackConfig.output.path, 'index.html'); 54 55 devMiddleWare.waitUntilValid(); 56 57 app.get('*', (req, res) => { 58 devMiddleWare.waitUntilValid(() => { 59 const html = mfs.readFileSync(file); 60 res.end(html); 61 }); 62 }); 63 64 if (process.env.HTTPS) { 65 let creds = {}; 66 try { 67 creds.key = fs.readFileSync(path.resolve(__dirname, 'server.key'), 'utf8'); 68 } catch (err) { 69 console.error('Failed to get SSL private key at webpack_config/server.key'); 70 console.error(err); 71 process.exit(1); 72 } 73 74 try { 75 creds.cert = fs.readFileSync(path.resolve(__dirname, 'server.crt'), 'utf8'); 76 } catch (err) { 77 console.error('Failed to get SSL certificate at webpack_config/server.crt'); 78 console.error(err); 79 process.exit(1); 80 } 81 82 const httpsApp = https.createServer(creds, app); 83 httpsApp.listen(port); 84 } else { 85 app.listen(port); 86 }