假设在 package.json 文件中我有我的依赖项 -
"dependencies": {
"moment": "^2.22.2"
}
在这里,我们是说对于包“时刻”,我们可以使用任何版本 2.x.x 功能(即我们可以在我们的应用程序中使用 2.23.2 提供的新功能,尽管我们在我们的应用程序上安装了 2.22.2计算机)还是我们说使用我们的应用程序代码的任何其他人都可以使用任何 2.x.x 版本的“moment”包?
最佳答案
can we use any of version 2.x.x functionality( i.e. we can use the new functions provided by 2.9.9 in our app, though we installed 2.22.2 on our computer)
只是为了避免混淆。您不会在计算机上安装版本 2.22.2。通过说 ^2.22.2,npm 将查找 2.x.x 的最高版本并安装该版本。您永远不会安装版本2.22.2。您将安装版本 2.24,当 moment 将其软件包更新到 2.25.0 时,您将安装该版本。因此,您将始终安装最新版本 2.x.x,因此您将获得 2.9.9 的功能。
are we saying that anyone else who uses our code of app can use any 2.x.x version of "moment" package ?
是的,您可以通过查看由 NPM 创建的 package-lock.json 来验证这一点,并描述了确切的依赖关系树。 https://docs.npmjs.com/files/package-lock.json
如果你的 package.json 版本是 1.0.0 并且你对 moment 有 2.22.2 依赖,并且执行 npm install,你将在 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 版本
why do I need to install "moment.js" again (i.e. update it) once its installed on my computer –
你不必这样做。但通用规则是将 node_modules 排除在存储库之外,只包含 package.json。这样,当您将网站发布到 AWS、Azure 或 DigitalOcean 时,每次您发布网站时,他们都会执行 npm install 并安装所有内容。
澄清包裹的流程通常是如何的
- 您创建具有特定版本的包/模块
- 我决定使用您的软件包
- 所以我将执行 npm install (以使用您的软件包)
- NPM 将遍历依赖关系树并相应地安装版本。
- 我的网站正常运行,我很高兴
- 与此同时,您正在更改代码并更新软件包。
- 几个月过去了,我决定更改我的网站。因此,现在当我执行 npm install 时(因为我更新了代码),我也会收到您的更新。
关于node.js - package.json 依赖项插入符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54706488/