package.json 中的 phantomChildren 是什么?

lan*_*ane 6 package npm package.json yarnpkg

当我安装一个模块时,文件中会phantomChildren出现一个列表package.json。什么是phantomChildren

Ale*_*huk 6

我没有找到npmpackage 的官方文档phantomChildren。但是遇到了一些其他的解释:https : //rushjs.io/pages/advanced/phantom_deps/。它是关于rast,但npm很好地解释了依赖关系的行为。

例如 libraryA可能从 librariesB和导入定义C,但是然后BC都可以从 导入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")  // ???
Run Code Online (Sandbox Code Playgroud)

等一下——其中两个库没有在 package.json 文件中声明为依赖项。这到底是怎么工作的!?事实证明,大括号扩展是 minimatch 的一个依赖项,而 glob 是 rimraf 的一个依赖项。在安装过程中,NPM 将它们的文件夹扁平化到 my-library/node_modules 下。NodeJS require() 函数会在那里找到它们,因为它根本不考虑 package.json 文件而探测文件夹。

总结一下:如果包使用了自己依赖的依赖,则可以将其视为phantomChildren。包不直接具有此类依赖项,而是从其他地方使用它。