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

时间:2018-02-28 20:28:24

标签: npm yarnpkg lerna

我正在开发一个项目的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"
  }
}

这种方法给我带来了麻烦。

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

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

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

3 个答案:

答案 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" } }