npm install --save-exact 不考虑确切的版本

npm install --save-exact not respecting exact version

我的环境:

我运行npm install --save --save-exact mjml@4.5.1,然后我的package.json显示

"mjml": "4.5.1",

我的 package-lock.json 显示:

 "mjml": {
      "version": "4.5.1",
      "resolved": "https://npm.alertmd.io/mjml/-/mjml-4.5.1.tgz",
      "integrity": "sha512-sQVbQ30UwxMpjzkTPdU9RD5OC9ikEjtZEY+zqAioHXAtEmiO0L0eUdfpcb0ni1pu09hMWU4iqRtOyxLgZIOThg==",
      "requires": {
        "mjml-accordion": "4.5.1",
        "mjml-body": "4.5.1",
        "mjml-button": "4.5.1",
        "mjml-carousel": "4.5.1",
        "mjml-cli": "4.5.1",
        "mjml-column": "4.5.1",
        "mjml-core": "4.5.1",
        "mjml-divider": "4.5.1",
        "mjml-group": "4.5.1",
        "mjml-head": "4.5.1",
        "mjml-head-attributes": "4.5.1",
        "mjml-head-breakpoint": "4.5.1",
        "mjml-head-font": "4.5.1",
        "mjml-head-preview": "4.5.1",
        "mjml-head-style": "4.5.1",
        "mjml-head-title": "4.5.1",
        "mjml-hero": "4.5.1",
        "mjml-image": "4.5.1",
        "mjml-migrate": "4.5.0",
        "mjml-navbar": "4.5.1",
        "mjml-raw": "4.5.1",
        "mjml-section": "4.5.1",
        "mjml-social": "4.5.1",
        "mjml-spacer": "4.5.1",
        "mjml-table": "4.5.1",
        "mjml-text": "4.5.1",
        "mjml-validator": "4.5.0",
        "mjml-wrapper": "4.5.1"
      }
    }

另外 none 我的其他依赖项将 mjml 作为子依赖项。

然而,当我 运行 npm show mjml version 我得到: 4.6.2.

我认为使用 --save-exact 会安装准确的 4.5.1 版本,所以我不明白什么?

您假设 --save-exact 将安装准确的版本 (4.5.1) 是正确的。

但是,当您使用 npm show 命令时,即当您 运行:

npm show mjml version

您实际上是在 https://registry.npmjs.org/mjml 向 npm 注册表执行 http GET 请求。上述命令查询注册表中可用的 registry/database 和 returns 最新版本的 mjml,即本例中的版本 4.6.2

要obtain/check安装了哪个版本的mjml,您需要使用npm ls命令来代替。

  1. cd 到你的项目目录。
  2. 然后运行:

    npm ls mjml
    

    这会将以下内容打印到您的控制台:

    └── mjml@4.5.1