|
1 | 1 | process.env.VUE_ENV = 'server'
|
| 2 | +const isProd = process.env.NODE_ENV === 'production' |
2 | 3 |
|
3 | 4 | const fs = require('fs')
|
4 | 5 | const path = require('path')
|
| 6 | +const resolve = file => path.resolve(__dirname, file) |
5 | 7 | const express = require('express')
|
6 | 8 | const favicon = require('serve-favicon')
|
7 | 9 | const serialize = require('serialize-javascript')
|
8 |
| -const createBundleRenderer = require('vue-server-renderer').createBundleRenderer |
9 | 10 |
|
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 |
15 | 12 |
|
16 | 13 | const app = express()
|
17 | 14 |
|
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 | +} |
37 | 25 |
|
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 | + }) |
50 | 32 | })
|
51 |
| -} else { |
52 |
| - app.use('/dist', express.static(path.resolve(__dirname, 'dist'))) |
53 |
| - // create server renderer from real fs |
54 |
| - renderer = createRenderer(fs) |
55 | 33 | }
|
56 | 34 |
|
| 35 | +app.use('/dist', express.static(resolve('./dist'))) |
57 | 36 | app.use(favicon(path.resolve(__dirname, 'src/assets/logo.png')))
|
58 | 37 |
|
59 | 38 | app.get('*', (req, res) => {
|
|
0 commit comments