Package-lock.json - 需要 vs 依赖项
Package-lock.json - requires vs dependencies
在依赖对象的包-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 可以构建一个不同的,但是 still correct,包树:
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
是 独立的 ,属于仅适用于需要它们的模块。
即
"@angular-devkit/core": "0.8.5"
、"tree-kill": "1.2.0"
和 "webpack-sources": "1.3.0"
不属于 仅 模块。它们与需要它们的模块处于同一级别。相比之下,"rxjs": "6.2.2"
仅因模块需要而存在,并且仅由该模块使用。
在依赖对象的包-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 可以构建一个不同的,但是 still correct,包树:
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
是 独立的 ,属于仅适用于需要它们的模块。
即
"@angular-devkit/core": "0.8.5"
、"tree-kill": "1.2.0"
和 "webpack-sources": "1.3.0"
不属于 仅 模块。它们与需要它们的模块处于同一级别。相比之下,"rxjs": "6.2.2"
仅因模块需要而存在,并且仅由该模块使用。