假设在package.json文件中,我的依存关系为-
"dependencies": {
"moment": "^2.22.2"
}
在这里,我们是说对于包“ moment”,我们可以使用版本2.xx的任何功能(即,尽管我们在自己的应用中安装了2.22.2,但我们可以在应用中使用2.23.2提供的新功能。计算机)还是我们要说使用我们应用程序代码的其他任何人都可以使用任何2.xx版本的“ moment”软件包?
答案 0 :(得分:0)
如果您设置:
"moment": "^2.22.2"
用户将几乎下载v2.22.2
。在这种情况下,您将下载v2.24.0
如果您设置:
"moment": "2.22.2"
用户将完全下载该版本
如果您设置:
"moment": "~2.22.1"
用户将几乎下载v2.22.1
。在这种情况下,您将下载v2.22.2
仅当模块遵守semver标准时,才可以使用v2.9.9
中的功能。
99.999%的情况都是如此。
答案 1 :(得分:0)
我们可以使用任何2.x.x版本的功能吗(即,尽管我们在计算机上安装了2.22.2,也可以在应用程序中使用2.9.9提供的新功能)
只是为了避免造成混乱。您不会在计算机上安装版本2.22.2。通过说^ 2.22.2,npm将查找2.x.x的最高版本并安装该版本。您将永远不会安装版本2.22.2。您将安装版本2.24,并在将其软件包更新为2.25.0时,将安装该版本。因此,您将始终安装最新的版本2.x.x,因此您将获得2.9.9的功能。
我们是说使用我们的应用程序代码的其他任何人都可以使用任何2.x.x版本的“ moment”包吗?
是的,您可以通过检出NPM创建的package-lock.json并描述确切的依赖关系树来验证这一点。 https://docs.npmjs.com/files/package-lock.json
如果您的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版的瞬间
为什么一旦安装“ moment.js”(即更新它),为什么 安装在我的计算机上–
您不必这样做。但是常见的规则是将node_modules保留在存储库之外,而只包含package.json。这样,当您将网站发布到例如AWS,Azure或DigitalOcean时,它们将在每次发布网站时进行npm安装并因此安装所有内容。
以阐明程序包的正常运行情况