package.json如何更新标志工作(在引擎盖下)

问题描述 投票:0回答:1

我正在尝试了解package.json更新过程的工作原理。例如:

"dependencies": {
 "express": "^4.16.4",
},

在这种情况下,我使用减号标志^表示只有4.X.X更新。这很清楚。但究竟这个更新如何工作?我的意思是,如果我删除node_module文件夹(和package-lock.json)第一次安装后1周(和一个新的Express版本发布)我下载的版本? 4.16.4或(例如)4.17.0?我认为4.17.0但是package.json仍然保留在4.16.4(文本描述)中,并且更新是在package-lock.json或其他内容中报告的?我从未见过package.json中的数字发生了变化。

我对此非常困惑。

有时,当我从他们的文件夹中检查一些模块时,我会看到与package.json不同的版本。为什么?

node.js npm package.json
1个回答
1
投票

插入符号(^)将更新为最新的主要版本(第一个数字)。 ^4.16.4将匹配任何4.x.x发布,包括4.17.x,但将推迟更新到5.0.0.版本Express版本,因为这是一个重大版本,对Express库有重大改变。

至于你的问题:“如果我在首次安装node_modules一周后删除package-lock.json目录和Express文件,并说在那段时间内发布了新的Express版本。我会下载哪个版本的Express

这取决于最新版本是主要版本,次要版本还是补丁版本。如果最新版本是次要版本或补丁版本:第二次或第三次更改,则npm将安装最新的4.x.x. Express版本。在您的具体示例场景中,是的,它将安装Express V4.17.0。你也是正确的,package.json仍然会将"express: "^4.16.4"列为构建项目的必要依赖项。这是因为插入符号如何工作,如前所述:获取最新的4.x.x. Express的版本。没有必要将Express中的package.json列表更新到最新版本,因为胡萝卜会为您处理。如果您考虑一下,这是一个非常好的功能,因为替代方案是手动指定每个新版本,即使它只是次要版本或补丁版本。没有人有时间......除非是主要的释放。

此外,由于最新的Express版本不是主要版本,即你的Semver的第一个数字没有改变,没有“突破性的变化”,所以通常只能抓住最新版本。但是,如果需要,您可以指定任何依赖项的确切版本。对于package-lock.json文件,此文件有点像当前配置和构建依赖项的“快照”。因此,当您进行影响项目构建的更改时,此文件将更新:即添加新依赖项或更新现有版本。这是因为这个文件应该是其他人的“真相来源”,以防他们想要复制你的项目并可能对它做出贡献。

希望这有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.