[英]Why are there extra required dependencies in package-lock.json?
[英]Package-lock.json - requires vs dependencies
在依赖对象中的 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
,而其中一些列在这两个字段中?
默认情况下,npm 将所有包直接安装在node_modules
。
但是,假设包X
依赖于版本 1.0 中的包Z
并且包Y
依赖于相同的包Z
,但在版本 2.0 中。 在这种情况下,我们必须安装这个包的两个版本。 一个安装在根节点node_modules
文件夹中,另一个安装在依赖包的node_modules
文件夹中,例如
package.json
node_modules
/X
/Y
/node_modules
/Z@2.0
/Z@1.0
同样有可能,npm 可以构建一个不同但仍然正确的包树:
package.json
node_modules
/X
/node_modules
/Z@1.0
/Y
/Z@2.0
package-lock.json
文件不仅会尝试描述项目的依赖项,还会尝试描述此树结构。 上面要构建的两棵树中的哪一个将在 JSON 中编码。
有了这些知识,就很容易理解了:
“requires”反映了这个依赖的package.json
文件中的依赖,而dependencies
反映了这个依赖的node_modules文件夹中实际安装的依赖。
阅读以上答案后。 也许我可以用更简单的方式来表达
requires
可以由所有其他顶级依赖项共享,而dependencies
是独立的,仅属于模块 require 它
IE
"@angular-devkit/core": "0.8.5"
, "tree-kill": "1.2.0"
, "webpack-sources": "1.3.0"
并不只属于模块,他们在与模块需要它们的级别相同。 相比之下, "rxjs": "6.2.2"
仅存在于模块需要它。 并且只被模块使用
让我们从头开始,从docs.npmjs开始:
要求:
这是模块名称到版本的映射。 这是该模块所需的所有内容的列表,无论它将在何处安装。 版本应该通过正常的匹配规则匹配依赖关系中的依赖关系或高于我们的关联。
含义需要映射您的模块以及特定模块所需的一切,以便正确工作,无论您在何处安装它。
例如,为了使您的模块工作,您必须具有"@angular-devkit/core": "0.8.5",
通过npm i
安装。
依赖关系:
此依赖项的依赖项,与顶层完全相同。
只是听起来的方式。
区别:
需要说明应用程序运行和正常运行所需的模块。
依赖关系 ,以与顶层完全相同的方式列出应用程序中的依赖关系。
依赖关系的含义使事情变得更加清晰
包名称到依赖项对象的映射。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.