Skip to content

Commit 68cdaa8

Browse files
committed
improve dev server startup
1 parent d09f91a commit 68cdaa8

File tree

2 files changed

+18
-9
lines changed

2 files changed

+18
-9
lines changed

build/setup-dev-server.js

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,13 @@ const serverConfig = require('./webpack.server.config')
66

77
module.exports = function setupDevServer (app, cb) {
88
let bundle, clientManifest
9+
let resolve
10+
let resolved = false
11+
const readyPromise = new Promise(r => { resolve = r })
12+
const ready = (...args) => {
13+
if (!resolved) resolve()
14+
cb(...args)
15+
}
916

1017
// modify client config to work with hot middleware
1118
clientConfig.entry.app = ['webpack-hot-middleware/client', clientConfig.entry.app]
@@ -27,7 +34,7 @@ module.exports = function setupDevServer (app, cb) {
2734
const readFile = file => fs.readFileSync(path.join(clientConfig.output.path, file), 'utf-8')
2835
clientManifest = JSON.parse(readFile('vue-ssr-client-manifest.json'))
2936
if (bundle) {
30-
cb(bundle, {
37+
ready(bundle, {
3138
clientManifest
3239
})
3340
}
@@ -50,9 +57,11 @@ module.exports = function setupDevServer (app, cb) {
5057
// read bundle generated by vue-ssr-webpack-plugin
5158
bundle = JSON.parse(readFile('vue-ssr-server-bundle.json'))
5259
if (clientManifest) {
53-
cb(bundle, {
60+
ready(bundle, {
5461
clientManifest
5562
})
5663
}
5764
})
65+
66+
return readyPromise
5867
}

server.js

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ function createRenderer (bundle, options) {
3434
}
3535

3636
let renderer
37-
37+
let readyPromise
3838
if (isProd) {
3939
// In production: create server renderer using built server bundle.
4040
// The server bundle is generated by vue-ssr-webpack-plugin.
@@ -49,7 +49,7 @@ if (isProd) {
4949
} else {
5050
// In development: setup the dev server with watch and hot-reload,
5151
// and create a new renderer on bundle / index template update.
52-
require('./build/setup-dev-server')(app, (bundle, options) => {
52+
readyPromise = require('./build/setup-dev-server')(app, (bundle, options) => {
5353
renderer = createRenderer(bundle, options)
5454
})
5555
}
@@ -78,11 +78,7 @@ const microCache = LRU({
7878
// headers.
7979
const isCacheable = req => useMicroCache
8080

81-
app.get('*', (req, res) => {
82-
if (!renderer) {
83-
return res.end('waiting for compilation... refresh in a moment.')
84-
}
85-
81+
function render (req, res) {
8682
const s = Date.now()
8783

8884
res.setHeader("Content-Type", "text/html")
@@ -122,6 +118,10 @@ app.get('*', (req, res) => {
122118
console.log(`whole request: ${Date.now() - s}ms`)
123119
}
124120
})
121+
}
122+
123+
app.get('*', isProd ? render : (req, res) => {
124+
readyPromise.then(() => render(req, res))
125125
})
126126

127127
const port = process.env.PORT || 8080

0 commit comments

Comments
 (0)