Npm 允许本地项目依赖本地lerna包

Npm 允许本地项目依赖本地lerna包,npm,yarnpkg,lerna,Npm,Yarnpkg,Lerna,我有一个正在开发的项目的勒纳回购协议。它有几个相互依赖的包。为了简化开发,没有发布任何包,它们相互依赖于最新版本 目录树 foo/packages/core/package.json { ... dependencies: { "@foo/core": "file:../foo/packages/core" } } 我还有另一个项目,bar,我正在用它来测试lerna项目。目前,我正在使用一个本地文件链接到它的依赖项:依赖项: bar/package.json { ..

我有一个正在开发的项目的勒纳回购协议。它有几个相互依赖的包。为了简化开发,没有发布任何包,它们相互依赖于最新版本

目录树

foo/packages/core/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
这使得为这个项目编写实际的代码成为这种混乱的依赖关系管理的次要任务

我如何使这个(我觉得相当简单?)项目结构工作?此时打开lerna/Thread/npm/pnpm/shell scripts/MS DOS。

用户可以这样尝试:

foo/packages/core/package.json

{
   ...
  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