1
- const webpack = require ( 'webpack' )
2
- const mergeWebpack = require ( 'webpack-merge' )
3
1
const VueSSRServerPlugin = require ( 'vue-server-renderer/server-plugin' )
4
2
const VueSSRClientPlugin = require ( 'vue-server-renderer/client-plugin' )
5
3
const nodeExternals = require ( 'webpack-node-externals' )
@@ -21,7 +19,7 @@ exports.getWebpackConfig = ({ target }) => {
21
19
webpackConfig . plugins . delete ( 'preload' )
22
20
webpackConfig . plugins . delete ( 'prefetch' )
23
21
webpackConfig . plugins . delete ( 'progress' )
24
- webpackConfig . plugins . delete ( 'no-emit-on-errors' )
22
+ if ( ! isProd ) webpackConfig . plugins . delete ( 'no-emit-on-errors' )
25
23
26
24
if ( ! isClient ) {
27
25
webpackConfig . plugins . delete ( 'friendly-errors' )
@@ -52,83 +50,54 @@ exports.getWebpackConfig = ({ target }) => {
52
50
} )
53
51
}
54
52
55
- webpackConfig = service . resolveWebpackConfig ( webpackConfig )
56
-
57
- webpackConfig = mergeWebpack ( webpackConfig , {
58
- entry : config . entry ( target ) ,
59
- plugins : [
60
- new webpack . DefinePlugin ( {
61
- 'process.client' : target === 'client' ,
62
- 'process.server' : target === 'server' ,
63
- } ) ,
64
- new webpack . NoEmitOnErrorsPlugin ( ) ,
65
- ] ,
66
- stats : isProd ? 'normal' : 'none' ,
67
- devServer : {
68
- stats : 'errors-only' ,
69
- quiet : true ,
70
- noInfo : true ,
71
- } ,
53
+ webpackConfig . entry ( 'app' ) . clear ( ) . add ( config . entry ( target ) )
54
+
55
+ webpackConfig . plugin ( 'define' ) . tap ( args => {
56
+ return [ Object . assign ( args [ 0 ] , { 'process.client' : target === 'client' , 'process.server' : target === 'server' } ) ]
72
57
} )
73
58
59
+ webpackConfig . stats ( isProd ? 'normal' : 'none' )
60
+ webpackConfig . devServer . stats ( 'errors-only' ) . quiet ( true ) . noInfo ( true )
61
+
74
62
if ( isClient ) {
75
- webpackConfig = mergeWebpack ( webpackConfig , {
76
- plugins : [
77
- new VueSSRClientPlugin ( ) ,
78
- new WebpackBar ( {
79
- name : 'Client' ,
80
- color : 'green' ,
81
- } ) ,
82
- ] ,
83
- devtool : ! isProd ? '#cheap-module-source-map' : undefined ,
63
+ webpackConfig . plugin ( 'ssr' ) . use ( VueSSRClientPlugin )
64
+ webpackConfig . plugin ( 'loader' ) . use ( WebpackBar , [ { name : 'Client' , color : 'green' } ] )
65
+
66
+ webpackConfig . devtool ( ! isProd ? '#cheap-module-source-map' : undefined )
67
+
68
+ webpackConfig . module . rule ( 'vue' ) . use ( 'vue-loader' ) . tap ( options => {
69
+ options . optimizeSSR = false
70
+ return options
84
71
} )
85
72
} else {
86
- webpackConfig = mergeWebpack ( webpackConfig , {
87
- plugins : [
88
- new VueSSRServerPlugin ( ) ,
89
- new WebpackBar ( {
90
- name : 'Server' ,
91
- color : 'orange' ,
92
- } ) ,
93
- ] ,
94
- externals : nodeExternals ( {
95
- whitelist : config . nodeExternalsWhitelist ,
96
- } ) ,
97
- output : {
98
- libraryTarget : 'commonjs2' ,
99
- } ,
100
- target : 'node' ,
101
- devtool : 'source-map' ,
102
- optimization : {
103
- splitChunks : false ,
104
- minimize : false ,
105
- } ,
106
- } )
73
+ webpackConfig . plugin ( 'ssr' ) . use ( VueSSRServerPlugin )
74
+ webpackConfig . plugin ( 'loader' ) . use ( WebpackBar , [ { name : 'Server' , color : 'orange' } ] )
107
75
108
- delete webpackConfig . node
109
- }
76
+ webpackConfig . devtool ( 'source-map' )
77
+ webpackConfig . externals ( nodeExternals ( { whitelist : config . nodeExternalsWhitelist } ) )
78
+ webpackConfig . output . libraryTarget ( 'commonjs2' ) ; webpackConfig . target ( 'node' )
79
+ webpackConfig . optimization . splitChunks ( false ) . minimize ( false )
110
80
111
- for ( const rule of webpackConfig . module . rules ) {
112
- if ( rule . use ) {
113
- for ( const item of rule . use ) {
114
- item . options = item . options || { }
115
- if ( item . loader === 'cache-loader' && ! isClient ) {
116
- // Change cache directory for server-side
117
- item . options . cacheIdentifier += '-server'
118
- item . options . cacheDirectory += '-server'
119
- } else if ( item . loader === 'vue-loader' ) {
120
- // Optimize SSR only on server-side
121
- if ( isClient ) {
122
- item . options . optimizeSSR = false
123
- } else {
124
- item . options . cacheIdentifier += '-server'
125
- item . options . cacheDirectory += '-server'
126
- item . options . optimizeSSR = true
127
- }
128
- }
129
- }
81
+ webpackConfig . node . clear ( )
82
+
83
+ if ( ! isClient ) {
84
+ webpackConfig . module . rule ( 'vue' ) . use ( 'cache-loader' ) . tap ( options => {
85
+ // Change cache directory for server-side
86
+ options . cacheIdentifier += '-server'
87
+ options . cacheDirectory += '-server'
88
+ return options
89
+ } )
130
90
}
91
+
92
+ webpackConfig . module . rule ( 'vue' ) . use ( 'vue-loader' ) . tap ( options => {
93
+ if ( ! isClient ) {
94
+ options . cacheIdentifier += '-server'
95
+ options . cacheDirectory += '-server'
96
+ }
97
+ options . optimizeSSR = ! isClient
98
+ return options
99
+ } )
131
100
}
132
101
133
- return webpackConfig
102
+ return service . resolveWebpackConfig ( webpackConfig )
134
103
}
0 commit comments