语义版本控制问题和 npm 5 或更高版本

Posted

技术标签:

【中文标题】语义版本控制问题和 npm 5 或更高版本【英文标题】:Semantic versioning issue and npm 5 or above 【发布时间】:2018-01-02 14:25:51 【问题描述】:

你能告诉我为什么我们需要NPM 5 或更高版本来避免语义版本控制问题吗?换句话说,我们如何使用package-lock.json 文件来避免它?如果我们在同一个项目的所有开发机器上使用相同的package.json 文件,我们不能避免这个问题吗?我在这里有点困惑。希望您对此提供反馈。

【问题讨论】:

【参考方案1】:

如果您的 package.json 文件列出以下包,则可以避免这种情况:

"@angular/core": "4.2.6",
"@angular/forms": "4.2.6",
"@angular/http": "4.2.6",

而不是

"@angular/core": "^4.2.6",
"@angular/forms": "^4.2.6",
"@angular/http": "~4.2.6",

通过从 package.json 中删除波浪号或大写字母 (~, ^) 符号,npm 将在所有机器上安装完全相同的版本。但是添加波浪号或大写符号是安全的,因此您可以在不更新文件的情况下安装包的小版本更新。但有时这可能会导致问题,当包开发人员在小版本中打包一个重大更改时。

package-lock.json 也会这样做,它会删除波浪号或大写符号,并标记要安装的包的具体版本。并且在安装包的时候会优先锁定文件获取包的版本信息。

编辑:来自 Youtube 上 Angular University 的精彩解释。

【讨论】:

非常感谢您的精彩解释 :) 目前,我自动生成的包锁有波浪号和克拉符号,前缀为版本号。但我想锁定依赖项的版本。我应该手动删除这些插入符号和波浪号并检查包锁定到源代码吗?这是个好习惯吗? @Murtuza 是的,你可以这样做,但不要更新 package-lock.json 文件。更新package.json文件,自动生成package-lock.json文件。

以上是关于语义版本控制问题和 npm 5 或更高版本的主要内容,如果未能解决你的问题,请参考以下文章

已在此计算机上安装相同或更高版本的 .NET Framework 4

-next 在语义版本控制中的含义

MVC 脚手架不支持 Entity Framework 6 或更高版本

如果您在文件夹中使用语义版本控制,如何获得前 5 个语义版本

Asp.Net 5 语义版本控制

Maven编译项目时报错:不再支持源选项 5。请使用 6 或更高版本。 不再支持目标选项 1.5。请使用 1.6 或更高版本。