【问题标题】:What are phantomChildren in package.json?package.json 中的 phantomChildren 是什么?
【发布时间】:2019-11-12 04:35:27
【问题描述】:

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

【问题讨论】:

  • 仍然是真实的。它是一种元数据,但它添加了不需要的额外依赖项和包

标签: npm package yarnpkg package.json


【解决方案1】:

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

例如库A可能会从库BC导入定义,但是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")  // ???

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

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

【讨论】:

    猜你喜欢
    • 2022-12-29
    • 2021-01-04
    • 2021-08-01
    • 2018-01-24
    • 2012-05-24
    • 2019-07-22
    • 1970-01-01
    • 2011-11-11
    • 2017-07-31
    相关资源
    最近更新 更多