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

Jac*_*Guy 24 npm lerna yarnpkg

我有一个正在开发的项目的lerna回购.它有几个相互依赖的包.为了简化开发,没有发布任何软件包,它们依赖于彼此的最新版本.

目录树

foo/
  packages/
    core/
      package.json
    errors/
      package.json
Run Code Online (Sandbox Code Playgroud)

富/包/核心/的package.json

{
  ...
  dependencies: {
    "@foo/errors": "*"
  }
}
Run Code Online (Sandbox Code Playgroud)

我有另一个项目,bar我正在用来测试lerna项目.目前我正在使用本地file:依赖关系链接到它的依赖项:

酒吧/的package.json

{
  ...
  dependencies: {
    "@foo/core": "../foo/packages/core"
  }
}
Run Code Online (Sandbox Code Playgroud)

这种方法给了我一个麻烦的世界.

  • 使用npm,我经常遇到ENOENT .DELETE错误.删除我的package-lock.json并重新安装已经花费了数年时间.
  • 使用纱,我已经无法yarn installbar.Yarn遵循file:依赖关系@foo/core,看到它依赖于@foo/errors并且不了解lerna的符号链接.这导致它失败,告诉我它找不到@foo/errors.

这使得为​​这个项目编写实际代码是次要的依赖管理.

我怎样才能做到这一点(我感觉相当简单?)项目结构工作?此时打开到lerna/yarn/npm/pnpm/shell脚本/ MS DOS.

jjb*_*kir 7

您应该能够使用npm link. 虽然我还没有尝试过使用未在 npm 上发布的本地依赖项。

目录树

foo/
  packages/
    core/
      package.json
    errors/
      package.json
bar/
    package.json
Run Code Online (Sandbox Code Playgroud)

foo/packages/core/package.json

{
  ...
  dependencies: {
    "@foo/errors": "*"
  }
}
Run Code Online (Sandbox Code Playgroud)

栏/package.json

{
  ...
  dependencies: {
    "@foo/core": "../foo/packages/core"
  }
}
Run Code Online (Sandbox Code Playgroud)

运行以下命令

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
Run Code Online (Sandbox Code Playgroud)

删除 package-lock.json 文件通常弊大于利!而有关无法找到@foo/errors,如果你跑了NPM引导,@foo/core应该被符号链接到@foo/errors。一种可能性可能是您的 lerna 脚本在您使用纱线运行安装/链接时正在使用 npm。


Dop*_*pio 5

您可以将lerna移到同时包含“ foo”和“ bar”的目录吗?那可能吗?

root/
  foo/
    packages/
      core/
        package.json
      errors/
        package.json
  bar/
    package.json
  lerna.json
Run Code Online (Sandbox Code Playgroud)

在您的lerna文件中,您可以将仓库添加到软件包中

{
  "lerna": "2.9.0",
  "packages": [
     "foo/packages/*",
     "bar/",
  ],
}
Run Code Online (Sandbox Code Playgroud)

  • 奖励赏金是因为这是我所见过的最可行的解决方案,但它并不能作为希望得到更好解决方案的答案。:) (4认同)
  • 虽然我过去使用过这个选项,但它并不理想,因为我想单独管理 git repos 并最终将 `/foo` 发布到 npm。 (2认同)

小智 0

使用可以这样尝试:

foo/packages/core/package.json

{
   ...
  dependencies: {
    "@foo/errors": "file:../errors"
   }
}
Run Code Online (Sandbox Code Playgroud)

栏/package.json

{
  ...
  dependencies: {
    "@foo/core": "file:../foo/packages/core"
  }
}
Run Code Online (Sandbox Code Playgroud)