在依赖对象的package-lock.json中,我同时拥有requires
和dependencies
字段,例如
"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
中列出了其他依赖项,而在这两个字段中又列出了其中一些依赖项?
答案 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
。
依赖项:
此依赖项的依赖项,与顶层完全相同。
只是听起来。
差异:
要求,指出需要的模块才能使您的应用正常运行和运行。
依赖项,以与顶层完全相同的方式列出应用程序中的依赖项。
依赖关系的含义使事情更清晰
程序包名称到依赖项对象的映射。