如何本地化node_modules中某些包的dependencies?

这是我项目package.json的dependencies

"dependencies": {
    ...
    "react-infinite-viewer": "^0.28.0"
  }

其中这个包的依赖关系如下
react-infinite-viewer依赖infinite-viewer,infinite-viewer依赖gesto,

我把gesto的代码修改了,我要怎么配置才可以在每次npm i react-infinite-viewer的时候使用修改后的gesto代码包

项目的实际情况:项目依赖包直接或间接依赖于gesto其实不止一个。 这意味着这是一个多个包在不同层级依赖gesto问题(但项目不直接使用gesto这个包)。

我曾试过使用下面这个方式:
修改项目package.json的dependencies

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

这种方式只能在项目的node_modules中安装修改后的代码,意味着我只能在项目中直接使用gesto才是修改后的代码,但我使用的是react-infinite-viewer,而react-infinite-viewer使用的还是原来的代码

myproject
  ->node_modules
    ->react-infinite-viewer
        ->node_modules
            ->infinite-viewer
                ->node_modules
                    gesto // 这里安装的还是旧代码的gesto
  ...
  ->gesto // 这里是修改后的

使用pnpm或者lerna可以解决吗?要怎么配置


补充:根据楼下大佬的回答,如果使用的是yarn的话,解决办法可以更简洁
只需配置resolutions即可

"resolutions": {
  "gesto":"file:packages/gesto",
},

Yarn 的选择性依赖项解析功能与 npm-force-resolutions 的功能非常相似
但是,Yarn 的选择性依赖项解析功能是 npm-force-resolutions 的默认功能。不需要安装 npm-force-resolutions 可以使用。
yarn 选择性依赖项

阅读 3.2k
3 个回答
✓ 已被采纳
{
    ...
      "scripts": {
          "preinstall": "npx npm-force-resolutions"
      },
     "resolutions": {
          "gesto":"file:packages/gesto"
     }
}

可以使用 npm link 试试:

  1. 在本地其他目录拉一下 gesto 的代码,然后执行 npm link;
  2. 在项目目录下执行一下 npm link gesto。
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题