Skip to content

Commit 7c672bd

Browse files
committed
fix: use vue-loader v16 as the main vue-loader dependency
This avoids incorrect hoisting caused by vuepress sharing the vue-loader dependency, which falsely injects webpack v4 into the dependencies of vue-loader v15. Also added a hot fix for vue-cli-plugin-apollo
1 parent 920db51 commit 7c672bd

File tree

5 files changed

+69
-19
lines changed

5 files changed

+69
-19
lines changed

package.json

+1-2
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,6 @@
9393
"resolutions": {
9494
"puppeteer": "1.11.0",
9595
"vue-template-compiler": "^2.6.12",
96-
"vue-server-renderer": "^2.6.12",
97-
"webpack": "^5.0.0"
96+
"vue-server-renderer": "^2.6.12"
9897
}
9998
}

packages/@vue/cli-service/lib/config/base.js

+16-6
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
const path = require('path')
12
const { semver } = require('@vue/cli-shared-utils')
23

34
/** @type {import('@vue/cli-service').ServicePlugin} */
@@ -62,7 +63,7 @@ module.exports = (api, options) => {
6263
if (vueMajor === 2) {
6364
// for Vue 2 projects
6465
const vueLoaderCacheConfig = api.genCacheConfig('vue-loader', {
65-
'vue-loader': require('vue-loader/package.json').version,
66+
'vue-loader': require('vue-loader-v15/package.json').version,
6667
'@vue/component-compiler-utils': require('@vue/component-compiler-utils/package.json').version,
6768
'vue-template-compiler': require('vue-template-compiler/package.json').version
6869
})
@@ -84,7 +85,7 @@ module.exports = (api, options) => {
8485
.options(vueLoaderCacheConfig)
8586
.end()
8687
.use('vue-loader')
87-
.loader(require.resolve('vue-loader'))
88+
.loader(require.resolve('vue-loader-v15'))
8889
.options(Object.assign({
8990
compilerOptions: {
9091
whitespace: 'condense'
@@ -93,11 +94,20 @@ module.exports = (api, options) => {
9394

9495
webpackConfig
9596
.plugin('vue-loader')
96-
.use(require('vue-loader').VueLoaderPlugin)
97+
.use(require('vue-loader-v15').VueLoaderPlugin)
98+
99+
// some plugins may implicitly relies on the `vue-loader` dependency path name
100+
// such as vue-cli-plugin-apollo
101+
// <https://github.com/Akryum/vue-cli-plugin-apollo/blob/d9fe48c61cc19db88fef4e4aa5e49b31aa0c44b7/index.js#L88>
102+
// so we need a hotfix for that
103+
webpackConfig
104+
.resolveLoader
105+
.modules
106+
.prepend(path.resolve(__dirname, './vue-loader-v15-resolve-compat'))
97107
} else if (vueMajor === 3) {
98108
// for Vue 3 projects
99109
const vueLoaderCacheConfig = api.genCacheConfig('vue-loader', {
100-
'vue-loader': require('vue-loader-v16/package.json').version,
110+
'vue-loader': require('vue-loader/package.json').version,
101111
'@vue/compiler-sfc': require('@vue/compiler-sfc/package.json').version
102112
})
103113

@@ -118,7 +128,7 @@ module.exports = (api, options) => {
118128
.options(vueLoaderCacheConfig)
119129
.end()
120130
.use('vue-loader')
121-
.loader(require.resolve('vue-loader-v16'))
131+
.loader(require.resolve('vue-loader'))
122132
.options({
123133
...vueLoaderCacheConfig,
124134
babelParserPlugins: ['jsx', 'classProperties', 'decorators-legacy']
@@ -128,7 +138,7 @@ module.exports = (api, options) => {
128138

129139
webpackConfig
130140
.plugin('vue-loader')
131-
.use(require('vue-loader-v16').VueLoaderPlugin)
141+
.use(require('vue-loader').VueLoaderPlugin)
132142

133143
// feature flags <http://link.vuejs.org/feature-flags>
134144
webpackConfig
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
module.exports = require('vue-loader-v15')

packages/@vue/cli-service/package.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -69,8 +69,8 @@
6969
"ssri": "^8.0.0",
7070
"thread-loader": "^3.0.0",
7171
"url-loader": "^4.1.1",
72-
"vue-loader": "^15.9.5",
73-
"vue-loader-v16": "npm:vue-loader@^16.0.0-beta.7",
72+
"vue-loader": "^16.0.0-rc.2",
73+
"vue-loader-v15": "npm:vue-loader@^15.9.5",
7474
"vue-style-loader": "^4.1.2",
7575
"webpack": "^5.4.0",
7676
"webpack-bundle-analyzer": "^3.8.0",

yarn.lock

+49-9
Original file line numberDiff line numberDiff line change
@@ -20419,16 +20419,18 @@ vue-jest@^3.0.5:
2041920419
tsconfig "^7.0.0"
2042020420
vue-template-es2015-compiler "^1.6.0"
2042120421

20422-
"vue-loader-v16@npm:vue-loader@^16.0.0-beta.7":
20423-
version "16.0.0-rc.2"
20424-
resolved "https://registry.yarnpkg.com/vue-loader/-/vue-loader-16.0.0-rc.2.tgz#b6a7e7f30d28f35659a83de41f4a1831a4232a04"
20425-
integrity sha512-cz8GK4dgIf1UTC+do80pGvh8BHcCRHLIQVHV9ONVQ8wtoqS9t/+H02rKcQP+TVNg7khgLyQV2+8eHUq7/AFq3g==
20422+
"vue-loader-v15@npm:vue-loader@^15.9.5":
20423+
version "15.9.5"
20424+
resolved "https://registry.npm.taobao.org/vue-loader/download/vue-loader-15.9.5.tgz?cache=0&sync_timestamp=1605670792427&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvue-loader%2Fdownload%2Fvue-loader-15.9.5.tgz#7a960dc420a3439deaacdda038fdcdbf7c432706"
20425+
integrity sha1-epYNxCCjQ53qrN2gOP3Nv3xDJwY=
2042620426
dependencies:
20427-
chalk "^4.1.0"
20428-
hash-sum "^2.0.0"
20429-
loader-utils "^2.0.0"
20427+
"@vue/component-compiler-utils" "^3.1.0"
20428+
hash-sum "^1.0.2"
20429+
loader-utils "^1.1.0"
20430+
vue-hot-reload-api "^2.3.0"
20431+
vue-style-loader "^4.1.0"
2043020432

20431-
vue-loader@^15.7.1, vue-loader@^15.9.5:
20433+
vue-loader@^15.7.1:
2043220434
version "15.9.5"
2043320435
resolved "https://registry.yarnpkg.com/vue-loader/-/vue-loader-15.9.5.tgz#7a960dc420a3439deaacdda038fdcdbf7c432706"
2043420436
integrity sha512-oeMOs2b5o5gRqkxfds10bCx6JeXYTwivRgbb8hzOrcThD2z1+GqEKE3EX9A2SGbsYDf4rXwRg6D5n1w0jO5SwA==
@@ -20439,6 +20441,15 @@ vue-loader@^15.7.1, vue-loader@^15.9.5:
2043920441
vue-hot-reload-api "^2.3.0"
2044020442
vue-style-loader "^4.1.0"
2044120443

20444+
vue-loader@^16.0.0-rc.2:
20445+
version "16.0.0-rc.2"
20446+
resolved "https://registry.npm.taobao.org/vue-loader/download/vue-loader-16.0.0-rc.2.tgz?cache=0&sync_timestamp=1605670792427&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvue-loader%2Fdownload%2Fvue-loader-16.0.0-rc.2.tgz#b6a7e7f30d28f35659a83de41f4a1831a4232a04"
20447+
integrity sha1-tqfn8w0o81ZZqD3kH0oYMaQjKgQ=
20448+
dependencies:
20449+
chalk "^4.1.0"
20450+
hash-sum "^2.0.0"
20451+
loader-utils "^2.0.0"
20452+
2044220453
vue-meta@^1.6.0:
2044320454
version "1.6.0"
2044420455
resolved "https://registry.yarnpkg.com/vue-meta/-/vue-meta-1.6.0.tgz#89b664f6011a207e098e8ba3b9d32e29c819b65d"
@@ -20903,7 +20914,36 @@ webpack-sources@^2.1.1:
2090320914
source-list-map "^2.0.1"
2090420915
source-map "^0.6.1"
2090520916

20906-
webpack@^4.8.1, webpack@^5.0.0, webpack@^5.4.0:
20917+
webpack@^4.8.1:
20918+
version "4.44.2"
20919+
resolved "https://registry.npm.taobao.org/webpack/download/webpack-4.44.2.tgz?cache=0&sync_timestamp=1605786608413&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack%2Fdownload%2Fwebpack-4.44.2.tgz#6bfe2b0af055c8b2d1e90ed2cd9363f841266b72"
20920+
integrity sha1-a/4rCvBVyLLR6Q7SzZNj+EEma3I=
20921+
dependencies:
20922+
"@webassemblyjs/ast" "1.9.0"
20923+
"@webassemblyjs/helper-module-context" "1.9.0"
20924+
"@webassemblyjs/wasm-edit" "1.9.0"
20925+
"@webassemblyjs/wasm-parser" "1.9.0"
20926+
acorn "^6.4.1"
20927+
ajv "^6.10.2"
20928+
ajv-keywords "^3.4.1"
20929+
chrome-trace-event "^1.0.2"
20930+
enhanced-resolve "^4.3.0"
20931+
eslint-scope "^4.0.3"
20932+
json-parse-better-errors "^1.0.2"
20933+
loader-runner "^2.4.0"
20934+
loader-utils "^1.2.3"
20935+
memory-fs "^0.4.1"
20936+
micromatch "^3.1.10"
20937+
mkdirp "^0.5.3"
20938+
neo-async "^2.6.1"
20939+
node-libs-browser "^2.2.1"
20940+
schema-utils "^1.0.0"
20941+
tapable "^1.1.3"
20942+
terser-webpack-plugin "^1.4.3"
20943+
watchpack "^1.7.4"
20944+
webpack-sources "^1.4.1"
20945+
20946+
webpack@^5.0.0, webpack@^5.4.0:
2090720947
version "5.6.0"
2090820948
resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.6.0.tgz#282d10434c403b070ed91d459b385e873b51a07d"
2090920949
integrity sha512-SIeFuBhuheKElRbd84O35UhKc0nxlgSwtzm2ksZ0BVhRJqxVJxEguT/pYhfiR0le/pxTa1VsCp7EOYyTsa6XOA==

0 commit comments

Comments
 (0)