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:功能最强大,支持覆盖、删除、替换、引用顶层版本,适合复杂依赖树管理。
相关推荐
专吃海绵宝宝菠萝屋的派大星13 小时前
使用Dify对接自己开发的mcp
java·服务器·前端
爱分享的阿Q13 小时前
Rust加WebAssembly前端性能革命实践指南
前端·rust·wasm
蓝黑202013 小时前
Vue的 value=“1“ 和 :value=“1“ 有什么区别
前端·javascript·vue
小李子呢021114 小时前
前端八股6---v-model双向绑定
前端·javascript·算法
He少年14 小时前
【基础知识、Skill、Rules和MCP案例介绍】
java·前端·python
史迪仔011214 小时前
[QML] QML IMage图像处理
开发语言·前端·javascript·c++·qt
AwesomeCPA14 小时前
Miaoduo MCP 使用指南(VDI内网环境)
前端·ui·ai编程
前端大波14 小时前
前端面试通关包(2026版,完整版)
前端·面试·职场和发展
qq_4335021814 小时前
Codex cli 飞书文档创建进阶实用命令 + Skill 创建&使用 小白完整教程
java·前端·飞书
IT_陈寒14 小时前
为什么我的Vite热更新老是重新加载整个页面?
前端·人工智能·后端