pnpm / Yarn / npm 覆盖依赖用法对比

pnpm / Yarn / npm 覆盖依赖用法对比

特性 / 维度 pnpm: overrides Yarn: resolutions npm: overrides
配置位置 pnpm-workspace.yamlpackage.jsonpnpm.overrides 字段 package.jsonresolutions 字段 package.jsonoverrides 字段(npm 8.3+ 支持)
作用范围 可以覆盖任意依赖树中的依赖(全局 + 子依赖) 全局覆盖依赖,影响所有匹配项 可以覆盖任意依赖树中的依赖(全局 + 子依赖)
覆盖粒度 支持全局覆盖 / 子依赖覆盖(如 foo>bar) / 版本范围覆盖 主要是全局覆盖,不能单独针对某个子依赖 支持全局覆盖 / 子依赖覆盖(如 foo>bar) / 版本范围覆盖
删除依赖 ✅ 支持 "-" 删除子依赖(适合 optionalDependencies) ❌ 不支持删除依赖 ❌ 不支持删除依赖
替换 fork 包 ✅ 支持(如 npm:@org/pkg@1.0.0 ❌ 不支持 ✅ 支持(如 npm:@org/pkg@1.0.0
引用顶层版本 ✅ 支持 $ 引用顶层依赖版本 ❌ 不支持 ❌ 不支持
典型使用场景 安全漏洞修复、统一依赖版本、删除无用依赖、替换 fork 安全漏洞修复、统一版本 安全漏洞修复、替换 fork、统一依赖版本
适用范围 最终应用项目(不推荐在库中使用) 应用或库都可用(库发布时一般不推荐) 应用或库都可用

🔹 使用示例

1. pnpm.overrides

perl 复制代码
// package.json
{
  "pnpm": {
    "overrides": {
      "lodash": "4.17.21",          // 全局覆盖 lodash 版本
      "foo>bar": "1.2.3",           // 覆盖 foo 的子依赖 bar
      "quux": "npm:@myorg/quux@2.0" // 替换为 fork 包
    }
  }
}

删除子依赖示例:

json 复制代码
"pnpm": {
  "overrides": {
    "foo>bar": "-"   // 删除 foo 的 bar 子依赖
  }
}

2. Yarn resolutions

json 复制代码
// package.json
{
  "resolutions": {
    "lodash": "4.17.21",  // 全局覆盖 lodash
    "foo/bar": "1.2.3"    // 覆盖 foo 的 bar(Yarn v2+ 支持路径写法)
  }
}

Yarn 不支持删除依赖或引用顶层版本。


3. npm overrides

perl 复制代码
// package.json
{
  "overrides": {
    "lodash": "4.17.21",            // 全局覆盖 lodash
    "foo>bar": "1.2.3",             // 覆盖 foo 的 bar 子依赖
    "quux": "npm:@myorg/quux@2.0"   // 替换为 fork 包
  }
}

npm 目前不支持删除子依赖,也不支持 $ 引用顶层版本。


🔹 总结

  • Yarn resolutions:功能最简单,主要是"强制锁定版本"。
  • npm overrides:功能比 Yarn 强,支持覆盖子依赖和替换包,但不能删除。
  • pnpm overrides:功能最强大,支持覆盖、删除、替换、引用顶层版本,适合复杂依赖树管理。
相关推荐
麦当_2 小时前
ReAct 模式在 Neovate 中的应用
前端·javascript·架构
折七2 小时前
告别传统开发痛点:AI 驱动的现代化企业级模板 Clhoria
前端·后端·node.js
程序0072 小时前
纯html实现商品首页
前端
coderlin_2 小时前
BI磁吸布局 (2) 基于react-grid-layout扩展的布局方式
前端·react.js·前端框架
Ankkaya2 小时前
vue3 实现自定义模板表单打印
前端
itslife2 小时前
vite源码 - 开始
前端·javascript
Achieve - 前端实验室2 小时前
【每日一面】React Hooks闭包陷阱
前端·javascript·react.js
张愚歌2 小时前
Leaflet行政区划边界开发全攻略
前端
Asort2 小时前
JavaScript设计模式(四)——建造者模式:优雅构建复杂对象的实用指南
前端·javascript·设计模式