Node.js package.json依赖项插入符号

Node.js package.json依赖项插入符号,node.js,package.json,Node.js,Package.json,假设在package.json文件中,我的依赖项如下- "dependencies": { "moment": "^2.22.2" } 在这里,我们是说对于软件包,我们可以使用任何版本2.x.x的功能,即我们可以在我们的应用程序中使用2.23.2提供的新功能,尽管我们在我们的计算机上安装了2.22.2,还是说任何使用我们的应用程序代码的人都可以使用任何版本2.x.x的软件包?如果您设置: "moment": "^2.22.2" "moment": "2.22.2" "momen

假设在package.json文件中,我的依赖项如下-

"dependencies": {
     "moment": "^2.22.2"
 }
在这里,我们是说对于软件包,我们可以使用任何版本2.x.x的功能,即我们可以在我们的应用程序中使用2.23.2提供的新功能,尽管我们在我们的计算机上安装了2.22.2,还是说任何使用我们的应用程序代码的人都可以使用任何版本2.x.x的软件包?

如果您设置:

"moment": "^2.22.2"
"moment": "2.22.2"
"moment": "~2.22.1"
用户将下载几乎所有的v2.22.2。在本例中,您将下载v2.24.0

如果设置:

"moment": "^2.22.2"
"moment": "2.22.2"
"moment": "~2.22.1"
用户将完全下载该版本

如果设置:

"moment": "^2.22.2"
"moment": "2.22.2"
"moment": "~2.22.1"
用户将下载几乎所有的v2.22.1。在本例中,您将下载v2.22.2

当且仅当模块符合标准时,才可以使用v2.9.9中的功能。 99.999%的情况都是这样

我们是否可以使用2.x.x版本的任何功能,即我们可以在应用程序中使用2.9.9提供的新功能,尽管我们在计算机上安装了2.22.2

只是为了避免混淆。您不会在计算机上安装版本2.22.2。通过说^2.22.2,npm将查看2.x.x的最高版本并安装该版本。您永远不会安装版本2.22.2。您将安装版本2.24,当moment将其软件包更新为2.25.0时,您将安装该版本。因此,您将始终安装最新的verison 2.x.x,因此您将获得2.9.9的功能

我们是说任何使用我们的应用程序代码的人都可以使用任何2.x.x版本的MomentPackage吗

是的,您可以通过签出package-lock.json来验证这一点。package-lock.json是由NPM创建的,它描述了确切的依赖关系树

如果您的package.json是1.0.0版,并且您对矩有2.22.2依赖性,并且进行了npm安装,那么您将在package lock中看到

{
  "name": "mypackage",
  "version": "1.0.0",
  "lockfileVersion": 1,
  "requires": true,
  "dependencies": {
    "moment": {
      "version": "2.24.0",
      "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz",

    }
  }
}
因此,安装软件包1.0.0版的每个人都将获得2.24版


为什么我需要再次安装momente.js,即一旦安装完成就更新它 安装在我的计算机上-

你不必这么做。但通常的规则是将节点_模块排除在存储库之外,并且只有package.json。因此,当您将网站发布到AWS、Azure或DigitalOcean时,他们将执行npm安装,从而在每次发布网站时安装所有内容

阐明包的流动通常是如何进行的

使用特定的verison创建包/模块 我决定用你的包裹 所以我会做npm安装来使用你的软件包 NPM将遍历依赖关系树并相应地安装版本。 我的网站运行正常,我很高兴 与此同时,您正在更改代码并更新包。 几个月过去了,我决定改变我的网站。所以现在,当我因为更新了代码而进行npm安装时,我也会得到您的更新。
在该线程中可能存在重复,答案是插入符号与2.x.x匹配,但波浪线仅与2.22.x匹配。请阅读我的完整问题。这里没有回答。虽然我们在计算机上安装了2.22.2,我们的package.json包含^2.22.2,但我们是否可以在我们的应用程序中使用2.9.9提供的新功能?更新的答案。为什么我需要再次安装moment.js,即在我的计算机上安装后更新它更新的答案。我们是否可以在我们的应用程序中使用2.9.9提供的新功能,虽然我们在计算机上安装了2.22.2,我们的package.json包含^2.22.2?是的,2.22.2包含2.9.9函数,我指的是2.99.9,即2.22.2No的更高版本,你不能:你应该在dependenciesso中设置^2.99.9,当安装了2.21.2版本并希望运行我的应用程序的用户不能使用其2.22.2功能时,在我的代码中说^2.22.2版本有什么用。如果我错了,请更正-^2.22.2说2.x.x版本也可以运行我的代码