【发布时间】:2019-11-12 04:35:27
【问题描述】:
当我安装一个模块时,phantomChildren 的列表出现在package.json 文件中。什么是phantomChildren?
【问题讨论】:
-
仍然是真实的。它是一种元数据,但它添加了不需要的额外依赖项和包
标签: npm package yarnpkg package.json
当我安装一个模块时,phantomChildren 的列表出现在package.json 文件中。什么是phantomChildren?
【问题讨论】:
标签: npm package yarnpkg package.json
我没有找到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 需要() 函数在那里找到它们,因为它探测没有文件夹 完全考虑 package.json 文件。
总结一下:如果包使用了自己依赖的依赖,则可以将其视为phantomChildren。包没有直接这样的依赖,而是从其他地方使用它。
【讨论】: