Skip to content
This repository was archived by the owner on May 8, 2018. It is now read-only.

Commit 3392ed4

Browse files
committed
feat(webpack_config): add dev server
feat(webpack_config): add dev server
1 parent 6cf0f94 commit 3392ed4

1 file changed

Lines changed: 62 additions & 0 deletions

File tree

webpack_config/server.js

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
/**
2+
* @file
3+
*/
4+
import webpack from 'webpack'
5+
import webpackDevMiddleware from 'webpack-dev-middleware'
6+
import webpackHotMiddleware from 'webpack-hot-middleware'
7+
import webpackGetCodeOnDone from 'webpack-get-code-on-done'
8+
import client from './client'
9+
import server from './server'
10+
// Configs for MultiCompiler
11+
const webpackConfig = [client, server]
12+
// Get MultiCompiler
13+
const compiler = webpack(webpackConfig)
14+
// Create devMiddleWare
15+
const devMiddleWare = webpackDevMiddleware(compiler, {
16+
serverRenderer: true,
17+
publicPath: webpackConfig[0].output.publicPath,
18+
quiet: false,
19+
noInfo: true
20+
})
21+
22+
// NOTE: Every time we apply our compiled code to development server
23+
// We add new middlewares from new code, but don't remove old middlewares from old code
24+
25+
// Number of middlewares that our app should has
26+
let prevSize = null
27+
/**
28+
* @desc Adds dev middlewares + your code to an express server instance
29+
* @param {ExpressServer} app - Express dev server to which compiled code will be applied
30+
*/
31+
export default function (app) {
32+
/**
33+
* @desc Function that executes after your server-side code compiles
34+
* @param {Function} serverSideCode - compiled server-side code
35+
*/
36+
const done = serverSideCode => {
37+
// Get current stack of the app (e.g. applied middlewares)
38+
const {stack} = app._router
39+
const {length} = stack
40+
prevSize = prevSize || length
41+
if (length > prevSize) {
42+
// Remove old compiled code
43+
app._router.stack = stack.slice(0, prevSize)
44+
}
45+
// Apply newly compiled code
46+
serverSideCode(app)
47+
}
48+
49+
app.use(devMiddleWare)
50+
app.use(
51+
webpackHotMiddleware(
52+
compiler.compilers.find(compiler => compiler.name === 'client'),
53+
{
54+
log: console.log
55+
}
56+
)
57+
)
58+
const serverCompiler = compiler.compilers.find(
59+
compiler => compiler.name === 'server'
60+
)
61+
webpackGetCodeOnDone(serverCompiler, done)
62+
}

0 commit comments

Comments
 (0)