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”包?

最佳答案

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 并安装所有内容。

澄清包裹的流程通常是如何的

  1. 您创建具有特定版本的包/模块
  2. 我决定使用您的软件包
  3. 所以我将执行 npm install (以使用您的软件包)
  4. NPM 将遍历依赖关系树并相应地安装版本。
  5. 我的网站正常运行,我很高兴
  6. 与此同时,您正在更改代码并更新软件包。
  7. 几个月过去了,我决定更改我的网站。因此,现在当我执行 npm install 时(因为我更新了代码),我也会收到您的更新。

关于node.js - package.json 依赖项插入符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54706488/

相关文章:

angularjs - 使用 Maven、Protractor 和 Selenium WebDriver 进行集成测试

node.js - vue-loader : Module was not found

node.js - 如何使用Yarn全局安装本地包?

javascript - 为什么我们需要使用 package.json?

node.js - 连接 node-mssql 时出错无效对象名称

node.js - 打包和解包要修补的 Electron Native 应用程序的 node_modules

Javascript 使新对象可以在所有范围内访问

node.js - Express 和 i18n 默认区域设置不起作用

javascript - 如何在同一个 Nodejs 项目中混合 CoffeeScript 和 typescript 文件?

node.js - repo 可以在不同目录中有多个 package.json 吗?