我确实必须使用大型 Yarn PnP mono 存储库(约 30 个包和 3 个微型应用程序)。
其中一个包(
package-b
)正在使用外部npm包package-a
(使用npm
作为包管理器),它不是我需要使用的monorepo的一部分。
开发 npm
package-a
(Mono 存储库外部)并在 Yarn PnP package-b
(Mono 存储库的一部分)中测试它的正确方法是什么?
我使用的版本:
$ yarn --version
4.1.1
$ node --version # (same throughout all projects"
v18.15.0
$ npm --version
9.5.0
这是我尝试过的:
$ cd /Users/user/gitlab.com/org/package-a
$ npm install
$ npm run build
$ yarn link
$ cd /Users/user/gitlab.com/org/monorepo/package-b
$ yarn link package-a
Usage Error: Invalid destination 'package-a'; Can't link the project to itself
$ yarn link [-A,--all] [-p,--private] [-r,--relative] ...
这个错误绝对很奇怪,因为我没有链接到同一个包(100%确认)。
resolutions
(传送门)在
project-b/package.json
:
...
"resolutions": {
"package-a": "portal:/Users/user/gitlab.com/org/package-a"
},
...
我重新运行了纱线
(mono repo level)
。从头开始重建所有包。未显示更改。
dependencies
(传送门)在
project-b/package.json
:
"dependencies": {
"package-a": "portal:/Users/user/gitlab.com/org/package-a",
}
当我构建我的 Mono 存储库时,我得到:
Module not found: Error: Can't resolve 'package-a' in '/Users/myuser/gitlab.com/org/monorepo/.yarn/__virtual__/package-b-virtual-126d6aafbe/1/packages/package-b/dist/components/SomeComponent/util'
@ ../..
我确认
/Users/user/gitlab.com/org/package-a/dist
存在并且已完全构建。我可以在其他基于 npm
的项目中使用这个包,没有任何问题。
我能够通过完全卸载该软件包并使用
portal
重新安装它来获得工作链接
$ yarn remove package-a
$ yarn add package-a@portal:/Users/user/gitlab.com/org/package-a
之后,我重建了 mono 仓库。由于我在
portal
和 vite
中将 package-a
与实时构建/刷新 (package-b
) 结合使用,因此 package-a
中的更改将立即可用。