Skip to content

Commit b99fcc0

Browse files
committed
configure html plugin for dev mode
1 parent 9f9f8c0 commit b99fcc0

File tree

3 files changed

+36
-23
lines changed

3 files changed

+36
-23
lines changed

build/setup-dev-server.js

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,22 +4,32 @@ const MFS = require('memory-fs')
44
const clientConfig = require('./webpack.client.config')
55
const serverConfig = require('./webpack.server.config')
66

7-
module.exports = function setupDevServer (app, onUpdate) {
8-
// setup on the fly compilation + hot-reload
7+
module.exports = function setupDevServer (app, opts) {
8+
// modify client config to work with hot middleware
99
clientConfig.entry.app = ['webpack-hot-middleware/client', clientConfig.entry.app]
10+
clientConfig.output.filename = '[name].js'
1011
clientConfig.plugins.push(
1112
new webpack.HotModuleReplacementPlugin(),
1213
new webpack.NoErrorsPlugin()
1314
)
1415

16+
// dev middleware
1517
const clientCompiler = webpack(clientConfig)
16-
app.use(require('webpack-dev-middleware')(clientCompiler, {
18+
const devMiddleware = require('webpack-dev-middleware')(clientCompiler, {
1719
publicPath: clientConfig.output.publicPath,
1820
stats: {
1921
colors: true,
2022
chunks: false
2123
}
22-
}))
24+
})
25+
app.use(devMiddleware)
26+
clientCompiler.plugin('done', () => {
27+
const filename = devMiddleware.getFilenameFromUrl('/dist/index.html')
28+
const index = devMiddleware.fileSystem.readFileSync(filename, 'utf-8')
29+
opts.indexUpdated(index)
30+
})
31+
32+
// hot middleware
2333
app.use(require('webpack-hot-middleware')(clientCompiler))
2434

2535
// watch and update server renderer
@@ -32,6 +42,6 @@ module.exports = function setupDevServer (app, onUpdate) {
3242
stats = stats.toJson()
3343
stats.errors.forEach(err => console.error(err))
3444
stats.warnings.forEach(err => console.warn(err))
35-
onUpdate(mfs.readFileSync(outputPath, 'utf-8'))
45+
opts.bundleUpdated(mfs.readFileSync(outputPath, 'utf-8'))
3646
})
3747
}

build/webpack.client.config.js

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,7 @@ const config = Object.assign({}, base, {
1818
}),
1919
// extract vendor chunks for better caching
2020
new webpack.optimize.CommonsChunkPlugin({
21-
name: 'vendor',
22-
filename: '[name].[chunkhash].js'
21+
name: 'vendor'
2322
}),
2423
// generate output HTML
2524
new HTMLPlugin({

server.js

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -14,26 +14,21 @@ const createBundleRenderer = require('vue-server-renderer').createBundleRenderer
1414

1515
const app = express()
1616

17-
// parse index.html template
18-
const html = (() => {
19-
const contentMarker = '<!-- APP -->'
20-
const template = fs.readFileSync(resolve('./dist/index.html'), 'utf-8')
21-
const i = template.indexOf(contentMarker)
22-
return {
23-
head: template.slice(0, i),
24-
tail: template.slice(i + contentMarker.length)
25-
}
26-
})()
27-
2817
// setup the server renderer, depending on dev/prod environment
29-
let renderer
18+
let html, renderer
3019
if (isProd) {
31-
// create server renderer from real fs
20+
// create server renderer and index HTML from real fs
3221
const bundlePath = resolve('./dist/server-bundle.js')
3322
renderer = createRenderer(fs.readFileSync(bundlePath, 'utf-8'))
23+
html = parseIndex(fs.readFileSync(resolve('./dist/index.html'), 'utf-8'))
3424
} else {
35-
require('./build/setup-dev-server')(app, bundle => {
36-
renderer = createRenderer(bundle)
25+
require('./build/setup-dev-server')(app, {
26+
bundleUpdated: bundle => {
27+
renderer = createRenderer(bundle)
28+
},
29+
indexUpdated: index => {
30+
html = parseIndex(index)
31+
}
3732
})
3833
}
3934

@@ -46,8 +41,17 @@ function createRenderer (bundle) {
4641
})
4742
}
4843

44+
function parseIndex (template) {
45+
const contentMarker = '<!-- APP -->'
46+
const i = template.indexOf(contentMarker)
47+
return {
48+
head: template.slice(0, i),
49+
tail: template.slice(i + contentMarker.length)
50+
}
51+
}
52+
4953
app.use(compression({ threshold: 0 }))
50-
app.use('/dist', express.static(resolve('./dist'), { maxAge: 60 * 60 * 24 * 30 }))
54+
app.use('/dist', express.static(resolve('./dist'), { maxAge: isProd ? 60 * 60 * 24 * 30 : 0 }))
5155
app.use(favicon(resolve('./src/assets/logo.png')))
5256

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

0 commit comments

Comments
 (0)