1+ const { semver, loadModule } = require ( '@vue/cli-shared-utils' )
2+
13module . exports = ( api , options ) => {
24 api . chainWebpack ( webpackConfig => {
35 const isLegacyBundle = process . env . VUE_CLI_MODERN_MODE && ! process . env . VUE_CLI_MODERN_BUILD
@@ -51,12 +53,6 @@ module.exports = (api, options) => {
5153 . end ( )
5254 . alias
5355 . 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- )
6056
6157 webpackConfig . resolveLoader
6258 . plugin ( 'pnp-loaders' )
@@ -73,40 +69,76 @@ module.exports = (api, options) => {
7369 // js is handled by cli-plugin-babel ---------------------------------------
7470
7571 // 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+ } )
7981
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+ } )
91115
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 ( )
98136 . end ( )
99- . use ( 'vue-loader' )
100- . loader ( require . resolve ( 'vue-loader' ) )
101- . options ( Object . assign ( {
102- compilerOptions : {
103- whitespace : 'condense'
104- }
105- } , vueLoaderCacheConfig ) )
106137
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+ }
110142
111143 // static assets -----------------------------------------------------------
112144
0 commit comments