Npm 允许本地项目依赖本地lerna包
我有一个正在开发的项目的勒纳回购协议。它有几个相互依赖的包。为了简化开发,没有发布任何包,它们相互依赖于最新版本 目录树 foo/packages/core/package.jsonNpm 允许本地项目依赖本地lerna包,npm,yarnpkg,lerna,Npm,Yarnpkg,Lerna,我有一个正在开发的项目的勒纳回购协议。它有几个相互依赖的包。为了简化开发,没有发布任何包,它们相互依赖于最新版本 目录树 foo/packages/core/package.json { ... dependencies: { "@foo/core": "file:../foo/packages/core" } } 我还有另一个项目,bar,我正在用它来测试lerna项目。目前,我正在使用一个本地文件链接到它的依赖项:依赖项: bar/package.json { ..
{
...
dependencies: {
"@foo/core": "file:../foo/packages/core"
}
}
我还有另一个项目,bar
,我正在用它来测试lerna项目。目前,我正在使用一个本地文件链接到它的依赖项:
依赖项:
bar/package.json
{
...
dependencies: {
"@foo/core": "file:../foo/packages/core"
}
}
这种做法给我带来了很多麻烦
- 使用npm时,我经常受到攻击。删除我的package-lock.json并重新安装使我的生命缩短了几年
- 使用纱线,我无法在
中安装bar
纱线。纱线遵循
依赖于文件:
,看到它依赖于@foo/core
,不知道勒纳的符号链接。这导致它失败,告诉我它找不到@foo/errors
@foo/errors
{
...
dependencies: {
"@foo/errors": "file:../errors"
}
}
bar/package.json
{
...
dependencies: {
"@foo/core": "file:../foo/packages/core"
}
}
你能把你的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/",
],
}
您应该能够通过
npm链接
实现这一点。尽管我还没有尝试使用未在npm上发布的本地依赖项来实现这一点
目录树
foo/packages/core/package.json
{
...
dependencies: {
"@foo/core": "file:../foo/packages/core"
}
}
bar/package.json
{
...
dependencies: {
"@foo/core": "file:../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引导,@foo/core
应与@foo/errors
进行符号链接。一种可能是,当您运行install/link with thread时,您的lerna脚本正在使用npm。这与我在问题中指定的目录结构不匹配,也不适用于lerna:(您好:您可以尝试更改core/package.json的属性“name”:“@foo/core”,以及errors/package.json的属性“name”:“@foo/errors”,祝您好运!{“name”:“bar”,“version”:“1.0.0”,“main”:“index.js”,“license”:“MIT”,“dependencies”:“{@foo/core”:“file:../foo/packages/core”,“@foo/errors”:“file:../foo/packages/errors”},{“name”:“@foo/core”,“version”:“1.0.0”,“main”:“index.js”,“license”:“MIT”,“dependencies”:{“@foo/errors”:“file:../errors”},{“name”:“@foo/errors”,“version”:“1.0.0”,“main”:“index.js”,“license”:“MIT”}但是发布项目时会发生什么情况?使用本地文件夹作为依赖项将不起作用?在正常工作流中,您可能希望临时覆盖包路径,如npm link
通常会这样做。因此,依赖项“foobar@0.0.1"通常从NPM获取,或者使用NPM链接从您的本地开发版本获取。我找不到与Lerna类似的模式。虽然我过去使用过此选项,但这并不理想,因为我希望单独管理git回购,并最终将/foo
发布到NPM。奖励奖金是因为这是最接近可行的解决方案我已经看到了,但并不是为了得到更好的答案而做标记@JackGuy你找到办法了吗?我和你一样陷入困境。@Michaelworthers我坚持使用Thread,主要依靠Thread link
将包放入非lerna项目。有点痛苦,但我找到了唯一可靠的解决方案。在向npm发布初始版本后,事情变得容易多了。Thread lerna exec Thread link
-如果您需要一次性创建链接,则非常方便。-提升
帮助很大!
{
...
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