如何制作一个节点包,并在测试代码中添加它所依赖的可选peerDependency?

问题描述 投票:0回答:1

peerDependency的官方文档说(强调我的):

插件包旨在与另一个“主机”包一起使用,即使它并不总是直接使用主机包。

我遇到了一种情况,我的插件确实直接使用主机包(在测试中),即使这个

peerDependency
对于应用程序来说是可选的。这就是我想要的这些包之间的关系:

App --may depend on, but may not--> canvas
My package --optional peer dependency--> canvas
My package tests --depends on--> canvas

我的

package.json
应该怎么写呢?这是我目前所拥有的,我认为它有效?

{
  // ...
  "devDependencies": {
    "canvas": "^2.11.2"
  },
  "peerDependencies": {
    "canvas": "^2.11.2",
    "jsdom": "^24.0.0"
  },
  "peerDependenciesMeta": {
    "canvas": {
      "optional": true
    }
  }
}

这是编写在测试代码中使用的带有可选

package.json
peerDependency
的正确方法吗?

javascript node.js package.json
1个回答
1
投票

是的,您的 package.json 配置对于您的场景来说看起来是正确的。通过将 canvas 标记为可选的对等依赖项并将其添加到您的 devDependency 以便在测试中使用,您已经设置了您所描述的关系:

该应用程序可能依赖于画布,但这不是必需的。 您的包将 canvas 作为可选的对等依赖项,这意味着安装不需要它,但如果可用则可以使用它。 您的包测试依赖于画布,确保运行测试时画布可用。

为了清晰起见,这是更新后的 package.json:

{
  "name": "your-package",
  "version": "1.0.0",
  "devDependencies": {
    "canvas": "^2.11.2"
  },
  "peerDependencies": {
    "canvas": "^2.11.2",
    "jsdom": "^24.0.0"
  },
  "peerDependenciesMeta": {
    "canvas": {
      "optional": true
    }
  }
}

此设置可确保您的包在安装或不安装画布的情况下都能正常工作,并且允许您在测试代码中使用画布,而无需定期使用它。

© www.soinside.com 2019 - 2024. All rights reserved.