You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让项目中所有依赖gesto的包统一使用本地修改版?

解决多依赖层级下强制使用本地修改版gesto的问题

你的项目存在多包直接或间接依赖gesto的场景,之前直接在根package.json添加本地gesto依赖的方式无效——嵌套依赖链里的包(比如react-infinite-viewer -> infinite-viewer)依然会加载自身node_modules中的原版gesto,不会使用根目录的修改版。

下面分别给出pnpm和Lerna的解决方案,满足你执行yarn/pnpm i/yarn add xxx等命令时,所有依赖gesto的包统一使用修改版代码的需求:

一、用pnpm解决(推荐)

pnpm的pnpm.overrides字段可以强制所有层级的依赖统一使用指定版本或本地包,步骤如下:

  1. 在项目根目录的package.json中添加配置:
{
  "dependencies": {
    "react-infinite-viewer": "^0.28.0",
    "gesto": "file:packages/gesto"
  },
  "pnpm": {
    "overrides": {
      "gesto": "file:packages/gesto"
    }
  }
}
  1. 执行pnpm install,pnpm会自动替换所有层级依赖中的gesto为你本地修改的版本,不会再在嵌套node_modules中安装原版。后续执行pnpm add xxx等命令时,该规则依然生效。

二、用Lerna解决(适用于monorepo项目)

如果你的项目是Lerna管理的monorepo结构,可以通过以下两种方式处理:

方式1:利用hoist特性统一提升依赖

  1. 在lerna.json中开启hoist配置:
{
  "packages": ["packages/*"],
  "version": "independent",
  "npmClient": "yarn", // 也可替换为pnpm
  "hoist": true
}
  1. 确保修改版gesto在monorepo的packages目录下,根package.json中添加gesto的本地依赖后,执行lerna bootstrap --hoist。Lerna会将gesto提升到根node_modules,所有依赖它的包都会自动使用这个提升后的版本。

方式2:手动链接本地包

  1. 进入修改版gesto的包目录,执行lerna link convert,将本地包纳入Lerna的依赖链接体系。
  2. 确保所有依赖gesto的子包,其package.json中gesto的版本指向本地包(或通过Lerna版本管理统一控制),然后执行lerna bootstrap,Lerna会自动处理依赖映射,让所有包使用本地修改版gesto。

额外补充:Yarn环境下的解决方案

如果需要继续使用Yarn,可通过resolutions字段强制覆盖:

{
  "dependencies": {
    "react-infinite-viewer": "^0.28.0",
    "gesto": "file:packages/gesto"
  },
  "resolutions": {
    "**/gesto": "file:packages/gesto"
  }
}

执行yarn install后,所有层级的gesto依赖都会被替换为本地修改版。

内容的提问来源于stack exchange,提问作者NaN.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 17:34:59