完全用另一个NPM包覆盖原有的NPM包

5
根据官方的NPM文档,package.json中的overrides允许完全用另一个包替换一个包:

覆盖提供了一种方法,可以用另一个版本或完全不同的包替换依赖树中的包。这些更改可以具有特定或模糊的作用域。

https://docs.npmjs.com/cli/v8/configuring-npm/package-json#overrides

然而,我无法想出如何用除同一软件包的更改版本以外的任何东西来替换软件包。
我正在尝试将node-sass替换为sass在一个传递依赖中,但是我尝试过的所有配置都无效。
"overrides": {
  "node-sass": "sass@^1.3.0"
}

"overrides": {
  "node-sass": {
    ".": "sass@^1.3.0"
  }
}

任何一种上述配置都会产生以下NPM错误:
Invalid tag name "sass@^1.3.0": Tags may not have any characters that encodeURIComponent encodes.

如果我尝试更基础的东西:

"overrides": {
  "node-sass": "sass"
}

NPM错误信息:

No matching version found for node-sass@sass.

我使用的是NPM v8.3.1。

是否真的可以将一个包完全替换为另一个包,还是我误解了文档中的内容?


1
这不是一个解决方案,但你应该一定订阅此问题,以改进文档。 - Phil
2
可能的解决方案在这里~ https://github.com/npm/cli/issues/4909#issuecomment-1144837588 - Phil
@Phil 感谢您提供的链接,解决了和这个问题几乎一模一样的问题。不知怎么的,在我的搜索中完全错过了它。 - Stephen Watkins
1个回答

6
根据@Phil评论中Github问题链接的评论,我能够使用npm:前缀完全覆盖一个包来替换另一个包:
"overrides": {
  "dependency": {
    "node-sass": "npm:sass@1.54.7"
  }
}

据我所知,与 overrides 相关的文档并未记录,因此我不知道该功能得到了多大程度的支持,但在至少基本情况下似乎可以正常工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接