MonorePo中的VUE2和VUE3的构建:Vue-Template-Compiler的版本不匹配错误
假设我使用pnpm在monorepo中有两个软件包。一个用于vue@3( package-a
),另一个用于vue@2( package-b
)。对于记录,它们都取决于第三个软件包,称为 core
。
您可以在下面找到它的样子:
.
├── .npmrc
├── .nvmrc
├── package.json
├── packages
│ ├── package-a
│ │ ├── index.ts
│ │ ├── node_modules
│ │ │ ├── .bin
│ │ │ │ ├── tsc
│ │ │ │ ├── tsserver
│ │ │ │ ├── vite
│ │ │ │ └── vue-tsc
│ │ │ ├── @myscope
│ │ │ │ └── core -> ../../../core
│ │ │ ├── @vitejs
│ │ │ │ └── plugin-vue -> ../../../../node_modules/.pnpm/@[email protected][email protected][email protected]/node_modules/@vitejs/plugin-vue
│ │ │ ├── typescript -> ../../../node_modules/.pnpm/[email protected]/node_modules/typescript
│ │ │ ├── vite -> ../../../node_modules/.pnpm/[email protected]/node_modules/vite
│ │ │ ├── vue -> ../../../node_modules/.pnpm/[email protected]/node_modules/vue
│ │ │ └── vue-tsc -> ../../../node_modules/.pnpm/[email protected][email protected]/node_modules/vue-tsc
│ │ ├── package.json
│ │ ├── tsconfig.json
│ │ ├── tsconfig.node.json
│ │ └── vite.config.ts
│ ├── package-b
│ │ ├── index.ts
│ │ ├── node_modules
│ │ │ ├── .bin
│ │ │ │ ├── tsc
│ │ │ │ ├── tsserver
│ │ │ │ ├── vite
│ │ │ │ └── vue-tsc
│ │ │ ├── @myscope
│ │ │ │ └── core -> ../../../core
│ │ │ ├── typescript -> ../../../node_modules/.pnpm/[email protected]/node_modules/typescript
│ │ │ ├── vite -> ../../../node_modules/.pnpm/[email protected]/node_modules/vite
│ │ │ ├── vite-plugin-vue2 -> ../../../node_modules/.pnpm/[email protected]_dj3dtukdyynhbiqf2xbv2ocyei/node_modules/vite-plugin-vue2
│ │ │ ├── vue -> ../../../node_modules/.pnpm/[email protected]/node_modules/vue
│ │ │ ├── vue-template-compiler -> ../../../node_modules/.pnpm/[email protected]/node_modules/vue-template-compiler
│ │ │ └── vue-tsc -> ../../../node_modules/.pnpm/[email protected][email protected]/node_modules/vue-tsc
│ │ ├── package.json
│ │ ├── tsconfig.json
│ │ ├── tsconfig.node.json
│ │ └── vite.config.ts
│ └── core
│ ├── index.ts
│ └── package.json
├── pnpm-lock.yaml
└── pnpm-workspace.yaml
在 packages/package-a/povpage.json
中:
{
"name": "@myscope/package-a",
"version": "0.0.0",
"private": true,
"scripts": {
"build": "vue-tsc --noEmit && vite build"
},
"dependencies": {
"@myscope/core": "workspace:*",
"vue": "^3.2.25"
},
"devDependencies": {
"@vitejs/plugin-vue": "^2.3.3",
"typescript": "^4.5.4",
"vite": "^2.9.9",
"vue-tsc": "^0.34.7"
}
}
in packages/package-b/poffcate.json
{
"name": "@myscope/package-b",
"version": "0.0.0",
"private": true,
"scripts": {
"build": "vue-tsc --noEmit && vite build"
},
"dependencies": {
"@myscope/core": "workspace:*",
"vue": "^2.6.14"
},
"devDependencies": {
"typescript": "^4.5.4",
"vite": "^2.9.9",
"vite-plugin-vue2": "^2.0.0",
"vue-template-compiler": "^2.6.14",
"vue-tsc": "^0.34.7"
}
}
当我运行时pnpm在
我得到了版本不匹配错误,而应该不应该: package-b
(vue@2)中,pnpm run build
> vue-tsc --noEmit && vite build
failed to load config from /path/to/my/project/monorepo/packages/package-b/vite.config.ts
error during build:
Error:
Vue packages version mismatch:
- [email protected] (/path/to/my/project/monorepo/node_modules/.pnpm/[email protected]/node_modules/vue/index.js)
- [email protected] (/path/to/my/project/monorepo/node_modules/.pnpm/[email protected]/node_modules/vue-template-compiler/package.json)
This may cause things to work incorrectly. Make sure to use the same version for both.
If you are using vue-loader@>=10.0, simply update vue-template-compiler.
If you are using vue-loader@<10.0 or vueify, re-installing vue-loader/vueify should bump vue-template-compiler to the latest.
at Object.<anonymous> (/path/to/my/project/monorepo/node_modules/.pnpm/[email protected]/node_modules/vue-template-compiler/index.js:10:9)
at Module._compile (node:internal/modules/cjs/loader:1101:14)
at Object.Module._extensions..js (node:internal/modules/cjs/loader:1153:10)
at Module.load (node:internal/modules/cjs/loader:981:32)
at Function.Module._load (node:internal/modules/cjs/loader:822:12)
at Module.require (node:internal/modules/cjs/loader:1005:19)
at require (node:internal/modules/cjs/helpers:102:18)
at Object.<anonymous> (/path/to/my/project/monorepo/node_modules/.pnpm/[email protected]_dj3dtukdyynhbiqf2xbv2ocyei/node_modules/vite-plugin-vue2/dist/utils/descriptorCache.js:34:42)
at Module._compile (node:internal/modules/cjs/loader:1101:14)
at Object.Module._extensions..js (node:internal/modules/cjs/loader:1153:10)
at Module.load (node:internal/modules/cjs/loader:981:32)
at Function.Module._load (node:internal/modules/cjs/loader:822:12)
at Module.require (node:internal/modules/cjs/loader:1005:19)
at require (node:internal/modules/cjs/helpers:102:18)
at Object.<anonymous> (/path/to/my/project/monorepo/node_modules/.pnpm/[email protected]_dj3dtukdyynhbiqf2xbv2ocyei/node_modules/vite-plugin-vue2/dist/main.js:35:27)
at Module._compile (node:internal/modules/cjs/loader:1101:14)
ELIFECYCLE Command failed with exit code 1.
ELIFECYCLE Command failed with exit code 1.
似乎已解决的版本未遵循 package.json < /code>并使用
vue@3
而不是 vue@2
。我不明白为什么。这可能是关于 vue-template-compiler
解决vue之类的错误吗?
我发现可以使它工作的“肮脏”解决方法是添加到 .npmrc
在项目的根部,但我不知道通过这样做可能会得到什么副作用。无论如何,是否有一种更干净的方法可以解决此问题?
PS。这可以与 https://github.com/vuejs/vuejs/vuejs/vue/vue/issues/11828 但是我在这里问,请在封闭的问题中回复。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
![扫码二维码加入Web技术交流群](/public/img/jiaqun_03.jpg)
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
从 i got eve)
。 ://github.com/pnpm/pnpm/blob/main/packages/pnpm/changelog.md#700“ rel =“ nofollow noreferrer”>打破变化:
with
pnpm.packageextensions
nohoist = false 到.npmrc
。Answering my own question since I got help on the VueJS discord server.
Option a) doesn't seem to work as of pnpm@7 because of a breaking change:
Option B with
pnpm.packageExtensions
is working fine. No need to addnohoist=false
anymore to.npmrc
.