}
解析,
-
^
字符,告诉npm,安装主版本等于4的任意一个版本即可 -
现在运行npm进行安装,npm将安装lodash的主版本为4的最新版,可能是 lodash@4.25.5(@是npm约定用来确定包名的指定版本的)
-
理论上,次版本号的变化并不会影响向后兼容性。因此,安装最新版的依赖库应该是能正常工作的,而且能引入自4.17.4版本以后的重要错误和安全方面的修复。
-
但是,即使不同的开发人员使用了相同的
package.json
文件,在他们自己的机器上也可能会安装同一个库的不同种版本,这样就会存在潜在的难以调试的错误和“在我的电脑上…”的情形。
大多数npm库都严重依赖于其他npm库,这会导致嵌套依赖关系,并增加无法匹配相应版本的几率。
虽然可以通过npm config set save-exact true
命令关闭在版本号前面使用^
的默认行为,但这个只会影响顶级依赖关系。由于每个依赖的库都有自己的package.json
文件,而在它们自己的依赖关系前面可能会有^
符号,所以无法通过package.json
文件为嵌套依赖的内容提供保证。
为了解决这个问题,npm提供了shrinkwrap
命令。此命令将生成一个npm-shrinkwrap.json
文件,为所有库和所有嵌套依赖的库记录确切的版本。
然而,即使存在npm-shrinkwrap.json
这个文件,npm也只会锁定库的版本,而不是库的内容。即便npm现在也能阻止用户多次重复发布库的同一版本,但是npm管理员仍然具有强制更新某些库的权力。
这是引用自shrinkwrap
文档的内容:
如果你希望锁定包中的特定字节,比如是为了保证能正确地重新部署或构建,那么你应该在源代码控制中检查依赖关系,或者采取一些其他的机制来校验内容,而不是靠校验