Skip to content

Commit 5508025

Browse files
author
linhs
committed
完成 ssr 课程章节 5-1
1 parent d88476f commit 5508025

File tree

4 files changed

+150
-14
lines changed

4 files changed

+150
-14
lines changed

build/webpack.config.server.js

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
const path = require('path');
2+
// vue-loader was used without the corresponding plugin. Make sure to include VueLoaderPlugin in your webpack config.
3+
// 所以要手动在 webpack 配置中加上这个插件
4+
const webpack = require('webpack');
5+
const webpackMerge = require('webpack-merge');
6+
// 将非 JS 的文件单独打包分离出来,这里主要是希望单独引入 CSS
7+
const ExtractPlugin = require('extract-text-webpack-plugin');
8+
const baseConfig = require('./webpack.config.base');
9+
// windows npm script 设置变量是通过 set NODE_ENV=production
10+
// mac npm script 设置变量是 NODE_ENV=production NODE_ENV=production
11+
// 使用 cross-env 可以统一设置环境变量的方式: cross-env
12+
13+
const VueServerPlugin = require('vue-server-renderer/server-plugin')
14+
15+
const config = webpackMerge(baseConfig, {
16+
entry: path.join(__dirname, '../client/server-entry.js'),
17+
target: 'node', // 服务端渲染必须传
18+
devtool: 'source-map',
19+
output: {
20+
libraryTarget: 'commonjs2',
21+
filename: 'server-entry.js',
22+
path: path.join(__dirname, '../server-build'),
23+
},
24+
// 不要打包 vue, vuex, vue-router 到 node
25+
// 因为如果打包了,就跟 node_modules 里面的依赖有重复,造成打包了两份文件
26+
externals: Object.keys(require('../package.json').dependencies),
27+
module: {
28+
rules: [
29+
{ // 因为 vue-style-loader 是把 CSS 通过 JS 注入到 dom
30+
// 但是 node 端没有 dom 环境,那么就会报错
31+
// 所以单独打包出来
32+
test: /\.less$/,
33+
use: ExtractPlugin.extract({
34+
fallback: 'vue-style-loader',
35+
use: [
36+
'css-loader',
37+
{
38+
loader: 'postcss-loader',
39+
options: {
40+
sourceMap: true,
41+
},
42+
},
43+
'less-loader',
44+
],
45+
}),
46+
},
47+
],
48+
},
49+
plugins: [
50+
new ExtractPlugin('styles.[hash:8].css'),
51+
new webpack.DefinePlugin({
52+
'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV || 'development'),
53+
'process.env.VUE_ENV': '"server"',
54+
}),
55+
new VueServerPlugin(),
56+
],
57+
});
58+
59+
module.exports = config;

client/server-entry.js

Whitespace-only changes.

package-lock.json

Lines changed: 90 additions & 14 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
"dependencies": {
2424
"vue": "^2.6.10",
2525
"vue-router": "^3.0.2",
26+
"vue-server-renderer": "^2.6.10",
2627
"vuex": "^3.1.0"
2728
},
2829
"devDependencies": {

0 commit comments

Comments
 (0)