当我安装模块时,在package.json
文件中将出现phantomChildren列表。什么是phantomChildren?
答案 0 :(得分:1)
我没有找到npm
软件包phantomChildren
的官方文档。但是遇到了其他一些解释:https://rushjs.io/pages/advanced/phantom_deps/。它与rast
有关,但是很好地说明了npm
依赖项的行为。
例如,库A
可以从库B
和C
导入定义,但是B
和C
都可以从D
导入,这在这四个软件包之间创建了“钻石依赖”。
当项目使用以下软件包时,会出现“幻影依赖项” : 未在其
package.json
文件中定义。
一些实时示例:
my-library/package.json
{
"name": "my-library",
"version": "1.0.0",
"main": "lib/index.js",
"dependencies": {
"minimatch": "^3.0.4"
},
"devDependencies": {
"rimraf": "^2.6.2"
}
}
my-library/lib/index.js
var minimatch = require("minimatch")
var expand = require("brace-expansion"); // ???
var glob = require("glob") // ???
请稍等-这些库中的两个未声明为依赖项 在package.json文件中。这是怎么工作的?原来 大括号扩展是minimatch的依赖项,而glob是 rimraf的依赖。在安装过程中,NPM将其扁平化 文件夹位于my-library / node_modules下。 NodeJS require() 函数会在此处找到它们,因为它会探测没有 完全考虑package.json文件。
总结:如果程序包使用其自身依赖项的依赖项,则可以将其视为phantomChildren。程序包没有直接的依赖关系,而是在其他地方使用它。