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

Jam*_*lor 5 node.js npm lerna yarnpkg

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

我最初希望使用我在以前的项目中熟悉的 npm shrinkwrap。不幸的是lerna 似乎不支持 shrinkwrap

计划 B 是使用纱线,在最初的一些困难之后,在切换到使用纱线工作空间后似乎没问题——至少我认为yarn install --frozen-lockfile正在做我想做的事。

不幸的是,除了依赖关系锁定之外,yarn 似乎没有帮助——一切都与 npm 和 lerna 一起工作,但 lerna 和 yarn 工作区似乎会导致解决模块的问题(甚至解决同一目录中令人困惑的问题)。

也许切换到 yarn 无论如何都太过分了,所以我开始想知道更新版本的 npm 和package-lock.json是否是一个更好的主意。不幸的是,看起来它需要对 lerna进行一些解决,此时我开始想知道 lerna 到底增加了多少。也许放弃lerna会有所帮助?

那么,tl; dr,有没有人有一个很好的方法来锁定 monorepo 中的模块依赖关系?

小智 0

我建议简单地使用精确版本控制;因此,在您的package.json文件中,存在依赖项的版本号,例如^3.4.2,将其更改为3.4.2. 数字前面的^(或~) 表示版本范围。您可以使用保存精确配置选项--save-exact标志或将文件save-exact=true放入.npmrc存储库中来实现这一点。lerna add还支持精确选项

希望有帮助!