Skip to content

Commit a46c8f6

Browse files
committed
Update server.js
1 parent 0106ec1 commit a46c8f6

File tree

2 files changed

+57
-41
lines changed

2 files changed

+57
-41
lines changed

build/dev-server.js

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
const path = require('path')
2+
const webpack = require('webpack')
3+
const MFS = require('memory-fs')
4+
const clientConfig = require('./webpack.client.config')
5+
const serverConfig = require('./webpack.server.config')
6+
7+
module.exports = function setupDevServer (app, onUpdate) {
8+
// setup on the fly compilation + hot-reload
9+
clientConfig.entry.app = ['webpack-hot-middleware/client', clientConfig.entry.app]
10+
clientConfig.plugins.push(
11+
new webpack.HotModuleReplacementPlugin(),
12+
new webpack.NoErrorsPlugin()
13+
)
14+
15+
const clientCompiler = webpack(clientConfig)
16+
app.use(require('webpack-dev-middleware')(clientCompiler, {
17+
publicPath: clientConfig.output.publicPath,
18+
stats: {
19+
colors: true,
20+
chunks: false
21+
}
22+
}))
23+
app.use(require('webpack-hot-middleware')(clientCompiler))
24+
25+
// watch and update server renderer
26+
const serverCompiler = webpack(serverConfig)
27+
const mfs = new MFS()
28+
const outputPath = path.join(serverConfig.output.path, serverConfig.output.filename)
29+
serverCompiler.outputFileSystem = mfs
30+
serverCompiler.watch({}, (err, stats) => {
31+
if (err) throw err
32+
stats = stats.toJson()
33+
stats.errors.forEach(err => console.error(err))
34+
stats.warnings.forEach(err => console.warn(err))
35+
onUpdate(mfs.readFileSync(outputPath, 'utf-8'))
36+
})
37+
}

server.js

Lines changed: 20 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,59 +1,38 @@
11
process.env.VUE_ENV = 'server'
2+
const isProd = process.env.NODE_ENV === 'production'
23

34
const fs = require('fs')
45
const path = require('path')
6+
const resolve = file => path.resolve(__dirname, file)
57
const express = require('express')
68
const favicon = require('serve-favicon')
79
const serialize = require('serialize-javascript')
8-
const createBundleRenderer = require('vue-server-renderer').createBundleRenderer
910

10-
let renderer
11-
function createRenderer (fs) {
12-
const bundlePath = path.resolve(__dirname, 'dist/server-bundle.js')
13-
return createBundleRenderer(fs.readFileSync(bundlePath, 'utf-8'))
14-
}
11+
const createBundleRenderer = require('vue-server-renderer').createBundleRenderer
1512

1613
const app = express()
1714

18-
if (process.env.NODE_ENV !== 'production') {
19-
const webpack = require('webpack')
20-
const clientConfig = require('./build/webpack.client.config')
21-
22-
clientConfig.entry.app = ['webpack-hot-middleware/client', clientConfig.entry.app]
23-
clientConfig.plugins.push(
24-
new webpack.HotModuleReplacementPlugin(),
25-
new webpack.NoErrorsPlugin()
26-
)
27-
28-
const clientCompiler = webpack(clientConfig)
29-
app.use(require('webpack-dev-middleware')(clientCompiler, {
30-
publicPath: clientConfig.output.publicPath,
31-
stats: {
32-
colors: true,
33-
chunks: false
34-
}
35-
}))
36-
app.use(require('webpack-hot-middleware')(clientCompiler))
15+
let renderer
16+
if (isProd) {
17+
// create server renderer from real fs
18+
const bundlePath = resolve('./dist/server-bundle.js')
19+
renderer = createRenderer(fs.readFileSync(bundlePath, 'utf-8'))
20+
} else {
21+
require('./build/dev-server')(app, bundle => {
22+
renderer = createRenderer(bundle)
23+
})
24+
}
3725

38-
// watch and update server renderer
39-
const MFS = require('memory-fs')
40-
const serverConfig = require('./build/webpack.server.config')
41-
const serverCompiler = webpack(serverConfig)
42-
const mfs = new MFS()
43-
serverCompiler.outputFileSystem = mfs
44-
serverCompiler.watch({}, (err, stats) => {
45-
if (err) throw err
46-
stats = stats.toJson()
47-
stats.errors.forEach(err => console.error(err))
48-
stats.warnings.forEach(err => console.warn(err))
49-
renderer = createRenderer(mfs)
26+
function createRenderer (bundle) {
27+
return createBundleRenderer(bundle, {
28+
cache: require('lru-cache')({
29+
max: 1000,
30+
maxAge: 1000 * 60 * 15
31+
})
5032
})
51-
} else {
52-
app.use('/dist', express.static(path.resolve(__dirname, 'dist')))
53-
// create server renderer from real fs
54-
renderer = createRenderer(fs)
5533
}
5634

35+
app.use('/dist', express.static(resolve('./dist')))
5736
app.use(favicon(path.resolve(__dirname, 'src/assets/logo.png')))
5837

5938
app.get('*', (req, res) => {

0 commit comments

Comments
 (0)