我有一个正在进行中的项目的lerna回购。它有几个相互依赖的程序包。为了简化开发,没有发布任何软件包,并且它们相互依赖最新版本。

目录树

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

foo / packages / core / package.json
{
  ...
  dependencies: {
    "@foo/errors": "*"
  }
}

我还有另一个项目bar,用于测试lerna项目。目前,我正在使用本地file:依赖关系链接到其依赖关系:

bar / package.json
{
  ...
  dependencies: {
    "@foo/core": "../foo/packages/core"
  }
}

这种方法给我带来了很多麻烦。
  • 使用npm,我经常被ENOENT .DELETE errors打中。删除我的package-lock.json并重新安装已经花了我很多年的时间。
  • 使用yarn,我无法在yarn install中进行bar。 Yarn遵循file:@foo/core的依赖关系,发现它依赖于@foo/errors,并且不知道lerna的符号链接(symbolic link)。这导致它失败,告诉我找不到@foo/errors

  • 这使得为​​该项目编写实际代码仅次于这种依赖管理的困惑。

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

    最佳答案

    您应该可以使用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符号链接(symbolic link)。一种可能是您的lerna脚本在运行带有yarn的安装/链接时正在使用npm。

    关于npm - 允许本地项目依赖于本地lerna包,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49037987/

    10-16 19:58