1
+ const { semver, loadModule } = require ( '@vue/cli-shared-utils' )
2
+
1
3
module . exports = ( api , options ) => {
2
4
api . chainWebpack ( webpackConfig => {
3
5
const isLegacyBundle = process . env . VUE_CLI_MODERN_MODE && ! process . env . VUE_CLI_MODERN_BUILD
@@ -51,12 +53,6 @@ module.exports = (api, options) => {
51
53
. end ( )
52
54
. alias
53
55
. set ( '@' , api . resolve ( 'src' ) )
54
- . set (
55
- 'vue$' ,
56
- options . runtimeCompiler
57
- ? 'vue/dist/vue.esm.js'
58
- : 'vue/dist/vue.runtime.esm.js'
59
- )
60
56
61
57
webpackConfig . resolveLoader
62
58
. plugin ( 'pnp-loaders' )
@@ -73,40 +69,76 @@ module.exports = (api, options) => {
73
69
// js is handled by cli-plugin-babel ---------------------------------------
74
70
75
71
// vue-loader --------------------------------------------------------------
76
- const vueLoaderCacheIdentifier = {
77
- 'vue-loader' : require ( 'vue-loader/package.json' ) . version
78
- }
72
+ const vue = loadModule ( 'vue' , api . service . context )
73
+
74
+ if ( semver . major ( vue . version ) === 2 ) {
75
+ // for Vue 2 projects
76
+ const vueLoaderCacheConfig = api . genCacheConfig ( 'vue-loader' , {
77
+ 'vue-loader' : require ( 'vue-loader/package.json' ) . version ,
78
+ '@vue/component-compiler-utils' : require ( '@vue/component-compiler-utils/package.json' ) . version ,
79
+ 'vue-template-compiler' : require ( 'vue-template-compiler/package.json' ) . version
80
+ } )
79
81
80
- // The following 2 deps are sure to exist in Vue 2 projects.
81
- // But once we switch to Vue 3, they're no longer mandatory.
82
- // (In Vue 3 they are replaced by @vue/compiler-sfc)
83
- // So wrap them in a try catch block.
84
- try {
85
- vueLoaderCacheIdentifier [ '@vue/component-compiler-utils' ] =
86
- require ( '@vue/component-compiler-utils/package.json' ) . version
87
- vueLoaderCacheIdentifier [ 'vue-template-compiler' ] =
88
- require ( 'vue-template-compiler/package.json' ) . version
89
- } catch ( e ) { }
90
- const vueLoaderCacheConfig = api . genCacheConfig ( 'vue-loader' , vueLoaderCacheIdentifier )
82
+ webpackConfig . resolve
83
+ . alias
84
+ . set (
85
+ 'vue$' ,
86
+ options . runtimeCompiler
87
+ ? 'vue/dist/vue.esm.js'
88
+ : 'vue/dist/vue.runtime.esm.js'
89
+ )
90
+
91
+ webpackConfig . module
92
+ . rule ( 'vue' )
93
+ . test ( / \. v u e $ / )
94
+ . use ( 'cache-loader' )
95
+ . loader ( require . resolve ( 'cache-loader' ) )
96
+ . options ( vueLoaderCacheConfig )
97
+ . end ( )
98
+ . use ( 'vue-loader' )
99
+ . loader ( require . resolve ( 'vue-loader' ) )
100
+ . options ( Object . assign ( {
101
+ compilerOptions : {
102
+ whitespace : 'condense'
103
+ }
104
+ } , vueLoaderCacheConfig ) )
105
+
106
+ webpackConfig
107
+ . plugin ( 'vue-loader' )
108
+ . use ( require ( 'vue-loader' ) . VueLoaderPlugin )
109
+ } else if ( semver . major ( vue . version ) === 3 ) {
110
+ // for Vue 3 projects
111
+ const vueLoaderCacheConfig = api . genCacheConfig ( 'vue-loader' , {
112
+ 'vue-loader' : require ( 'vue-loader-v16/package.json' ) . version ,
113
+ '@vue/compiler-sfc' : require ( '@vue/compiler-sfc/package.json' ) . version
114
+ } )
91
115
92
- webpackConfig . module
93
- . rule ( 'vue' )
94
- . test ( / \. v u e $ / )
95
- . use ( 'cache-loader' )
96
- . loader ( require . resolve ( 'cache-loader' ) )
97
- . options ( vueLoaderCacheConfig )
116
+ webpackConfig . resolve
117
+ . alias
118
+ . set (
119
+ 'vue$' ,
120
+ options . runtimeCompiler
121
+ ? 'vue/dist/vue.esm-bundler.js'
122
+ : '@vue/runtime-dom'
123
+ )
124
+
125
+ webpackConfig . module
126
+ . rule ( 'vue' )
127
+ . test ( / \. v u e $ / )
128
+ . use ( 'cache-loader' )
129
+ . loader ( require . resolve ( 'cache-loader' ) )
130
+ . options ( vueLoaderCacheConfig )
131
+ . end ( )
132
+ . use ( 'vue-loader' )
133
+ . loader ( require . resolve ( 'vue-loader' ) )
134
+ . options ( vueLoaderCacheConfig )
135
+ . end ( )
98
136
. end ( )
99
- . use ( 'vue-loader' )
100
- . loader ( require . resolve ( 'vue-loader' ) )
101
- . options ( Object . assign ( {
102
- compilerOptions : {
103
- whitespace : 'condense'
104
- }
105
- } , vueLoaderCacheConfig ) )
106
137
107
- webpackConfig
108
- . plugin ( 'vue-loader' )
109
- . use ( require ( 'vue-loader/lib/plugin' ) )
138
+ webpackConfig
139
+ . plugin ( 'vue-loader' )
140
+ . use ( require ( 'vue-loader-v16' ) . VueLoaderPlugin )
141
+ }
110
142
111
143
// static assets -----------------------------------------------------------
112
144
0 commit comments