Package-lock.json-需要vs依赖

时间:2018-10-22 10:13:59

标签: 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"
      }
    }
  }

两者之间有什么区别?为什么在requires中列出了某些依赖项,在dependencies中列出了其他依赖项,而在这两个字段中又列出了其中一些依赖项?

3 个答案:

答案 0 :(得分:4)

基于Barr J答案的详细说明:

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

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

package.json
node_modules
   /X
   /Y
      /Z@2.0
   /Z@1.0

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

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

答案 1 :(得分:3)

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

requires可以被所有其他顶层依赖项共享,而dependencies独立的,仅属于需要它的模块 >

"@angular-devkit/core": "0.8.5""tree-kill": "1.2.0""webpack-sources": "1.3.0"不仅仅属于,属于模块,它们与模块所需的级别相同。相反,"rxjs": "6.2.2"仅由于模块需要而存在。并且仅由模块使用

答案 2 :(得分:1)

让我们从docs.npmjs开始吧

要求:

  

这是模块名称到版本的映射。这是一个清单   该模块所需的一切,无论它在哪里   已安装。版本应通过常规匹配规则进行匹配   依赖关系,无论是我们的依赖关系还是更高的水平。

含义 Requires 映射您的模块以及特定模块所需的一切以便正常工作,无论您将其安装在何处。

例如,为了使您的模块正常工作,您必须通过"@angular-devkit/core": "0.8.5",安装npm i


依赖项:

  

此依赖项的依赖项,与顶层完全相同。

只是听起来。


差异:

要求,指出需要的模块才能使您的应用正常运行和运行。

依赖项,以与顶层完全相同的方式列出应用程序中的依赖项。

依赖关系的含义使事情更清晰

  

程序包名称到依赖项对象的映射。