有没有办法禁用与npm完全匹配的版本匹配?

时间:2013-09-05 04:05:29

标签: node.js npm

npm能够匹配直接和传递依赖的非精确版本。

https://npmjs.org/doc/misc/semver.html

作为示例,如果您依赖于v1.2.3的模块/库,并将package.json中的此依赖关系声明为

"foo": "~1.2.3"

使用~字符,您可以在foo之前解析任何版本的1.3.0,包括标记为-beta的任何版本。

有没有办法禁用这种松散/模糊匹配,以便依赖性解析更加一致?

例如,如果上述依赖关系到位,则解析的版本将始终为1.2.3。

最重要的是,这也需要适用于传递依赖。

2 个答案:

答案 0 :(得分:3)

我认为npm shrinkwrap正是您所寻找的。一旦您有一组已安装的依赖关系要冻结以进行部署,请运行npm shrinkwrap并将所有版本的整个依赖关系树锁定到位。

这是一个有点新功能(2012年2月,好吧不是新的)我还没有看到那么多采用,但正式这是你的问题的解决方案。人们采取的另一种方法是永远不要在其依赖版本中使用任何通配符:“1.2.3”,这对于应用程序来说已经足够了,但对可重用模块不满意。

关于npm shrinkwrap背后原因的更多细节在the blog post from when it was announced

答案 1 :(得分:0)

默认情况下,npm使用^安装软件包,这意味着任何版本在同一主要范围内,您可以使用--save-exact来切换此行为。

这仅适用于父依赖项,对于您需要使用npm shrinkwrap或yarn lock文件的子依赖项。

// npm
npm install --save --save-exact react

// yarn
yarn add --exact react

我创建了一篇关于保存确切的博客文章,如果有人在将来找这个。

https://www.dalejefferson.com/blog/how-to-save-exact-npm-package-versions/