我正在开发一个项目的lerna回购。它有几个相互依赖的包。为了简化开发,没有发布任何软件包,它们依赖于彼此的最新版本。
目录树
foo/
packages/
core/
package.json
errors/
package.json
富/包/核心/的package.json
{
...
dependencies: {
"@foo/errors": "*"
}
}
我有另一个项目bar
,我用它来测试lerna项目。目前,我使用本地file:
依赖关系链接到其依赖项:
酒吧/的package.json
{
...
dependencies: {
"@foo/core": "../foo/packages/core"
}
}
这种方法给我带来了麻烦。
yarn install
无法bar
。 Yarn遵循file:
依赖关系@foo/core
,看到它取决于@foo/errors
并且不了解lerna的符号链接。这导致它失败,告诉我它无法找到@foo/errors
。这使得为这个项目编写实际代码是次要的依赖管理。
我怎样才能做到这一点(我感觉相当简单?)项目结构工作?此时打开到lerna / yarn / npm / pnpm / shell脚本/ MS DOS。
答案 0 :(得分:4)
你能把你的lerna移动到一个同时包含“foo”的目录吗?并且' bar'? 这可能吗?
root/
foo/
packages/
core/
package.json
errors/
package.json
bar/
package.json
lerna.json
在你的lerna文件中,你可以将你的存储库添加到包
{
"lerna": "2.9.0",
"packages": [
"foo/packages/*",
"bar/",
],
}
答案 1 :(得分:1)
您应该可以使用npm link
完成此操作。尽管我尚未使用未在npm上发布的本地依赖项进行尝试。
目录树
foo/
packages/
core/
package.json
errors/
package.json
bar/
package.json
foo / packages / core / package.json
{
...
dependencies: {
"@foo/errors": "*"
}
}
bar / package.json
{
...
dependencies: {
"@foo/core": "../foo/packages/core"
}
}
运行以下命令
cd foo
npx lerna clean
npx lerna bootstrap --hoist
npm run build # command to build your projects
cd packages/core
npm link
cd ../../../bar
npm i
npm link @foo/core
删除package-lock.json文件通常弊大于利!关于无法找到@foo/errors
的问题,如果您运行npm bootstrap,应将@foo/core
链接到@foo/errors
。一种可能是您的lerna脚本在运行带有yarn的安装/链接时正在使用npm。
答案 2 :(得分:0)
使用可以这样尝试:
foo / packages / core / package.json
{
...
dependencies: {
"@foo/errors": "file:../errors"
}
}
酒吧/的package.json
{
...
dependencies: {
"@foo/core": "file:../foo/packages/core"
}
}