如何在monorepo中成功锁定节点模块依赖?

时间:2017-09-29 15:51:08

标签: node.js npm yarnpkg lerna

我正在开发一个开源项目,目前正在使用lerna来帮助管理包含多个软件包的单个存储库。到目前为止,这么好,除了因为我们目前没有收缩任何东西而偶尔会出现问题。我一直在尝试做一些monorepo版本的shrinkwrapping,这样我们就不会受到所有依赖项的支配(令人惊讶的是,在发布的过程中,一切都出错了!)但是已经打了一个墙,我想知道我是否走在正确的轨道上。

我原本希望使用我之前项目中熟悉的npm shrinkwrap。不幸的是lerna doesn't appear to support shrinkwrap

B计划是利用纱线,经过一些初步的困难,在转用纱线工作区后似乎没问题 - 至少我认为yarn install --frozen-lockfile做了我想做的事。

不幸的是,除了依赖锁定之外,纱线似乎没有帮助 - 一切都与npm和lerna一起工作,但是lerna和纱线工作空间似乎导致解决模块的问题(甚至在同一目录中解决某些令人困惑的问题)

无论如何转换到纱线都是过度杀伤所以我开始想知道更新版本的npm和 package-lock.json 是否会更好。不幸的是,它看起来像would need some work arounds with lerna,此时我开始怀疑lerna真正添加了多少。也许dropping lerna会有帮助吗?

那么, tl; dr ,是否有人有一种很好的方法可以锁定monorepo中的模块依赖?

2 个答案:

答案 0 :(得分:0)

我建议只使用精确的版本控制;因此,在您的package.json文件中,存在诸如^3.4.2之类的依赖项的版本号,请将其更改为3.4.2。数字前的^(或~)表示版本范围。您可以使用save exact config option--save-exact标志或通过将save-exact=true放在仓库中的.npmrc文件中来实现此目的。 lerna add也支持exact option

希望有帮助!

答案 1 :(得分:0)

yarn是生产就绪的程序包管理器,本机支持monorepos:)

使用yarn workspaces时,无需同时将lerna用作monorepo管理器。

如果需要,您可以使用lerna的其他功能,但是没有理由使用lerna安装monorepos(已经使用yarn了)。

如果使用yarn安装/管理monorepo时出现特定错误,请将其添加到问题中。

注意:

  • --frozen-lockfile在纱线monorepo中没有任何作用。 yarn对此有一个未解决的问题,我认为不会很快解决。