我正在开发一个开源项目,该项目当前正在使用lerna来帮助管理具有多个软件包的单个存储库。到目前为止,一切都很好,只不过有时会因为我们目前不包装任何东西而中断某些事情。我一直在尝试做一些收缩包装的monorepo版本,以使我们不受所有依赖的约束(令人惊讶的是,在发行过程中,经常出现错误!),但是遇到了一些麻烦,想知道我是否在正确的轨道上。
我最初希望使用以前项目中熟悉的npmrinkwraprap。不幸的是lerna doesn't appear to support shrinkwrap。
计划B是要使用 yarn ,在遇到一些最初的困难之后,在切换到使用 yarn 工作区后,看起来似乎还可以-至少我认为yarn install --frozen-lockfile
可以满足我的要求。
不幸的是,除了依赖项锁定以外,yarn似乎并没有帮助-一切都可以在npm和lerna上使用,但是lerna和yarn工作区似乎在解决模块方面引起了问题(甚至解决了同一目录中令人困惑的问题)。
也许无论如何改用yarn还是太过分了,所以我开始怀疑npm和 package-lock.json 的最新版本是否是一个更好的主意。不幸的是,它看起来像would need some work arounds with lerna,这时我开始想知道真的增加了多少lerna。也许dropping lerna会有所帮助吗?
那么,tl; dr,有没有人能很好地锁定monorepo中的模块依赖关系?
最佳答案
我建议只使用精确的版本控制;因此,在您的package.json
文件中,存在诸如^3.4.2
这样的依赖项的版本号,请将其更改为3.4.2
。数字前的^
(或~
)建议版本范围。您可以通过save exact config option:--save-exact
标志或通过将save-exact=true
放置在仓库中的.npmrc
文件中来实现。 lerna add
也支持exact option。
希望对您有所帮助!
关于node.js - 如何成功锁定Monorepo中的 Node 模块依赖项?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46492597/