35

我有一个正在开发的项目的 lerna repo。它有几个相互依赖的包。为了使开发更容易,没有发布任何包,它们依赖于彼此的最新版本。

目录树

foo/
  packages/
    core/
      package.json
    errors/
      package.json

foo/packages/core/package.json

{
  ...
  dependencies: {
    "@foo/errors": "*"
  }
}

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

栏/package.json

{
  ...
  dependencies: {
    "@foo/core": "../foo/packages/core"
  }
}

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

  • 使用 npm,我经常遇到ENOENT .DELETE 错误。删除我的 package-lock.json 并重新安装已经让我失去了很多年。
  • 使用纱线,我一直无法yarn install进入bar. Yarn 遵循file:to 的依赖关系@foo/core,看到它依赖于@foo/errors并且不知道 lerna 的符号链接。这导致它失败,告诉我它找不到@foo/errors

这使得为​​这个项目编写实际代码仅次于依赖管理的混乱。

我怎样才能使这个(我觉得很简单?)项目结构工作?此时打开 lerna/yarn/npm/pnpm/shell scripts/MS DOS。

4

4 回答 4

7

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

目录树

foo/
  packages/
    core/
      package.json
    errors/
      package.json
bar/
    package.json

foo/packages/core/package.json

{
  ...
  dependencies: {
    "@foo/errors": "*"
  }
}

栏/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 脚本在运行 install/link with yarn 时正在使用 npm。

于 2019-02-27T16:02:30.500 回答
6

你能把你的 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/",
  ],
}
于 2018-03-21T17:12:05.743 回答
0

在您正在工作的 npm 模块之一不属于您的 lerna 存储库的稍微不同的情况下,您可以使用 lerna 执行npm link命令。

npx lerna exec -- npm link <npm_package_name>

这将npm link是所有 lerna 模块中的外部包。

这不应与lerna linkwhich 将对您的 lerna 存储库中的所有子模块执行类似操作相混淆,并且是该问题的当前解决方案。

于 2022-02-03T02:37:01.880 回答
0

使用可以这样尝试:

foo/packages/core/package.json

{
   ...
  dependencies: {
    "@foo/errors": "file:../errors"
   }
}

栏/package.json

{
  ...
  dependencies: {
    "@foo/core": "file:../foo/packages/core"
  }
}
于 2018-03-12T10:00:28.430 回答