Package-lock.json - 需要vs依赖项

Krz*_*bek 18 javascript node.js npm package-lock.json

在依赖对象的package-lock.json中,我有两个requiresdependencies字段,例如

  "requires": {
    "@angular-devkit/core": "0.8.5",
    "rxjs": "6.2.2",
    "tree-kill": "1.2.0",
    "webpack-sources": "1.3.0"
  },
  "dependencies": {
    "rxjs": {
      "version": "6.2.2",
      "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.2.2.tgz",
      "integrity": "sha512-0MI8+mkKAXZUF9vMrEoPnaoHkfzBPP4IGwUYRJhIRJF6/w3uByO1e91bEHn8zd43RdkTMKiooYKmwz7RH6zfOQ==",
      "dev": true,
      "requires": {
        "tslib": "1.9.3"
      }
    }
  }
Run Code Online (Sandbox Code Playgroud)

这两者有什么区别?为什么一些依赖列在requires,其他的dependencies,其中一些在这两个领域?

Gui*_*chi 19

阅读以上答案后。也许我可以用更简单的方式来表达

requires可以共享,而所有其他高层之间的依赖关系由dependencies独立的,只有属于该模块需要它

IE

"@angular-devkit/core": "0.8.5""tree-kill": "1.2.0""webpack-sources": "1.3.0"不属于唯一的模块,他们都在同一水平模块需要它们。相比之下,"rxjs": "6.2.2"仅因模块需要而存在。并且只被模块使用


Krz*_*bek 15

详细解释,基于Barr J的答案:

默认情况下,npm直接将所有软件包安装在中node_modules

但是,假设X软件包Z在1.0版Y中依赖于package Z,而软件包在2.0版中依赖于同一package 。在这种情况下,我们必须安装此软件包的两个版本。一个将安装在根node_modules文件夹中,另一个将安装在node_modules相关软件包的文件夹中,例如

package.json
node_modules
   /X
   /Y
      /Z@2.0
   /Z@1.0
Run Code Online (Sandbox Code Playgroud)

有了这些知识,就很容易理解:

“ requires”反映了package.json文件的依赖关系,而“ dependencies”反映了此依赖关系在node_modules文件夹中实际安装的依赖关系。

  • 与 ruby​​ 的 Gemfile.lock 相比,允许同一包的多个版本一起使用要复杂得多。证明其好处有点困难。 (2认同)