npm 如何在node_modules中本地化包的依赖项

nbnkbykc  于 2023-10-19  发布在  其他
关注(0)|答案(1)|浏览(150)

这是我的项目的package.json

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

此软件包的优点:myproject -> react-infinite-viewer -> infinite-viewer -> gesto
项目的实际情况,实际上有不止一个包直接或间接依赖于gesto。这意味着它是multiple packages dependencies on gesto at different levels
我试过这种方法

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

这种方法只在项目的node_modules中安装修改后的代码。这意味着我可以在我的项目中使用修改后的代码,但react-infinite-viewer仍将使用原始代码。

myproject
  ->node_modules
    ->react-infinite-viewer
        ->node_modules
            ->infinite-viewer
                ->node_modules
                    gesto // here is still use the original code
  ...
  ->gesto // here using the modified code

我应该使用pnpm还是lerna来解决这个问题?
当使用yarn/pnpm i/yarn add xxx...时,所有依赖于gesto的包都使用修改后的gesto代码

eaf3rand

eaf3rand1#

通过配置resolutions解决
如果使用npm,请更改package.json:

{
    ...
      "scripts": {
          "preinstall": "npx npm-force-resolutions"
      },
     "resolutions": {
          "gesto":"file:packages/gesto"
     }
}

如果使用yarn,它将比npm更容易

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

Yarn的选择性依赖解析特性是npm-force-resolutions的默认功能。你不需要安装npm-force-resolutions来使用它。Selective dependency resolutions

相关问题