我正在尝试了解package.json更新过程的工作方式。例如:
"dependencies": {
"express": "^4.16.4",
},
在这种情况下,我的Express带有减号^
,仅适用于4.X.X更新。这很清楚。但是,此更新究竟如何工作?我的意思是,如果我在第一次安装(下载了新的Express版本)之后的1个星期下载了node_module
文件夹(和package-lock.json),就下载该版本吗? 4.16.4或(例如)4.17.0?我认为4.17.0,但package.json仍然保留在4.16.4(文本描述)中,并且更新报告在package-lock.json或其他内容中?我从未在package.json中看到数字变化。
对此我感到很困惑。
有时,当我从其文件夹中检查某个模块时,我会从package.json中看到不同的版本。为什么?
答案 0 :(得分:1)
插入符号(^)将更新为最近的主要版本(第一个数字)。 ^4.16.4
将与任何4.x.x
版本(包括4.17.x
)匹配,但将推迟更新到5.0.0.
版本Express
的版本,因为这是一个重大的发行版,更改为Express
库。
关于您的问题:“如果我要在首次安装node_modules
后一周删除package-lock.json
目录和Express
文件,然后说一个新的{{1} }版本已在该时间范围内发布。我将下载哪个版本的Express
?
这取决于最新版本是主要,次要还是补丁。如果最新版本是次要版本或补丁程序发行版:第二个或第三个数字已更改,则 npm将安装最新的4.x.x。 Express
版本。在您的特定示例场景中,是的,它将安装Express
V4.17.0 。您还正确地认为Express
仍将package.json
列为构建项目的必要依赖项。如前所述,这是因为插入符号的工作方式:获取最新的4.x.x。 "express: "^4.16.4"
的版本。无需将Express
中的Express
列表更新为最新版本,因为胡萝卜会帮您解决这个问题。如果您考虑一下,那将是一个非常不错的功能,因为另一种选择是手动指定每个新版本,即使它只是次要版本或修补程序版本。而且没有人有时间……除非是主要版本。
此外,由于最新的package.json
版本不是主要版本,即Express
的第一个数字没有变化,因此没有“重大变化”,因此抓取最新版本通常是安全的。话虽如此,如果需要,您可以指定任何依赖项的确切版本。至于Semver
文件,此文件有点像您的当前配置和构建依赖项的“ 快照”。因此,当您进行影响项目构建的更改时,此文件将更新:即添加新的依赖项或更新现有的版本。。这是因为此文件应为“真理之源” ,以防其他人想复制您的项目并有可能为此做贡献。
希望有帮助!