MyCrypto/webpack_config/devServer.js

87 lines
2.0 KiB
JavaScript
Raw Normal View History

2017-07-04 03:28:56 +00:00
'use strict';
const path = require('path');
const express = require('express');
const webpack = require('webpack');
const https = require('https');
const fs = require('fs');
2017-07-04 03:28:56 +00:00
const webpackConfig = require('./webpack.dev');
const config = require('./config');
const LogPlugin = require('./plugins/serverLog');
2017-07-04 03:28:56 +00:00
const app = express();
2017-07-04 03:28:56 +00:00
const port = config.port;
webpackConfig.entry.client = [
2017-07-04 03:28:56 +00:00
'react-hot-loader/patch',
'webpack-hot-middleware/client?reload=true',
'webpack/hot/only-dev-server',
webpackConfig.entry.client
];
2017-07-04 03:28:56 +00:00
webpackConfig.plugins.push(new LogPlugin(port));
2017-07-04 03:28:56 +00:00
let compiler;
try {
2017-07-04 03:28:56 +00:00
compiler = webpack(webpackConfig);
} catch (err) {
console.error(err.message);
2017-07-04 03:28:56 +00:00
process.exit(1);
}
const devMiddleWare = require('webpack-dev-middleware')(compiler, {
2017-07-04 03:28:56 +00:00
publicPath: webpackConfig.output.publicPath,
logLevel: 'warn',
2017-07-04 03:28:56 +00:00
inline: true,
headers: {
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Methods': '*',
'Access-Control-Allow-Headers': '*'
},
watchOptions: {
Webpack Upgrade (#665) * Update TODO comments & Remove old TODO comments * Fix undefined bityRate pair * Fix any props in TODO * Add HashRouter * Update publicPath * Revert "Update publicPath" This reverts commit 1ab9068df4d570cf50bc4f2fcd97bd775e9aa768. * Use HashRouter only if site is downloaded * Update conditions for router * Update asset paths & Change publicPath in production * Remove hoist-non-react-statistics * Revert "Remove hoist-non-react-statistics" This reverts commit abc017a3f3ca1a00bebdd9201f0d18770581d8c5. * Add hoist-non-react-statics as dev depencency * Initial tests * Lock hoist-non-react-statics version * Add webpack-include-assets & favicon-webpack plugins * Add env var BUILD_DOWNLOADABLE * Remove dll from prod build * Speed up rebuild times * Change var to const * lodash tree-shacking finagling * Make app aware of its serving location * Fix failing test * Remove downloadable plugin * Merge hash-router and get build working * Add missing package. * Make app aware of its serving location * Revert "Make app aware of its serving location" This reverts commit 8dae3b399e0392272cde25d45443391f6fb6594e. * Revert "Remove downloadable plugin" * Move AutoDLLPlugin to be in dev only * Remove require HtmlWebpackIncludeAssetsPlugin * Remove extra file added * Bring config up to date with webpack 2 rules, add multi threading and proper cache busting * Fix favicons package from freezing build process * Make exclude rules more simple * update freezer webpack config * Move webpack multithreading to full source map dev builds only * update freezer webpack config (#687) * Add HtmlWebpackIncludeAssetsPlugin
2017-12-30 20:29:04 +00:00
aggregateTimeout: 100
2017-07-04 03:28:56 +00:00
}
});
app.use(devMiddleWare);
app.use(
require('webpack-hot-middleware')(compiler, {
log: false
2017-07-04 03:28:56 +00:00
})
);
2017-07-04 03:28:56 +00:00
const mfs = devMiddleWare.fileSystem;
const file = path.join(webpackConfig.output.path, 'index.html');
2017-07-04 03:28:56 +00:00
devMiddleWare.waitUntilValid();
app.get('*', (req, res) => {
2017-07-04 03:28:56 +00:00
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);
}