首页 > 解决方案 > 如何防止在 node_modules 中嵌套 node_modules

问题描述

我已经创建了自己的 npm 包,我们称之为 XYZ,它的文件@material-ui中有依赖项。package.json

当我在项目 AI 中安装它时,在 XYZ 文件夹中嵌套了 node_modules(所以它是A\node_modules\XYZ\node_modules\@material-ui),但是当我在项目 BI 中安装它时,没有嵌套的 node_modules 文件夹。项目 A 和 B@material-ui在他们的package.json文件中都有相同的版本。

如何强制我的 XYZ 包使用@material-uifrom A\node_modules

标签: npmnpm-installnode-modules

解决方案


嵌套文件夹较少,而在 node_modules 文件夹中直接拥有更多文件夹以及版本控制问题有好处。

使用正确的 npm 版本

正确yarn并且npm(即:npm v3)不应该有这样的结构问题。它应该在可能的情况下始终展平整个结构,并且只有在版本与顶部的版本不兼容时才具有嵌套的 node_modules。

检查版本

因此,如果您让它在一个项目上正常工作而不是在另一个项目上,它可能是由于版本。检查@material-ui两者的版本是否相同。也许两个不​​同的包在某些时候相互冲突。

检查你是如何安装它们的

根据您的问题,它说它是相同的版本。但是,您没有提及如何在两个项目上安装软件包。如果您安装,yarn link或者npm link它应该按预期正确安装依赖项。

检查您是否使用不同的软件包

如果你检查包,最近material-ui已被弃用,通知说要升级到@material-ui/core代替。可能是该文件夹内的某些包不一样。无论哪种方式,只要有一些依赖冲突,它就是这样。检查@material-ui文件夹内部。

手动压平它们(危险)

有几个包可以强制解决这个问题。他们将通过嵌套的 node_modules 文件夹并将它们展平为单个文件夹。

flatten-packages

  • 安装,npm install -g flatten-packages.
  • 运行可执行文件flatten-packages以重新排列项目目录中 node_modules 文件夹中的所有包。
  • Flatten 将删除旧版本的包。您应该注意与版本中断更改相关的错误。

推荐阅读