代码之家  ›  专栏  ›  技术社区  ›  Jac Mos

如何防止节点模块内部嵌套节点模块

  •  4
  • Jac Mos  · 技术社区  · 6 年前

    @material-ui 它的依赖性 package.json

    当我在项目A中安装它时,我在XYZ文件夹中嵌套了node_模块(因此 A\node_modules\XYZ\node_modules\@material-ui @物料界面 在他们的 包.json

    如何强制我的XYZ包使用 @物料界面 A\node_modules ?

    2 回复  |  直到 6 年前
        1
  •  15
  •   Md. Abu Taher    6 年前

    它的优点是嵌套的文件夹较少,缺点是直接在node_modules文件夹中有更多的文件夹和版本控制问题。

    使用正确的npm版本

    对的 yarn npm (即:npm v3)不应该有这样的结构问题。在可能的情况下,它应始终使整个结构变平

    检查版本

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

    从你的问题来看,它说的是同一个版本。但是,您没有提到如何在这两个项目上安装软件包。如果安装时使用 yarn link npm link

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

    如果你检查一下包裹,最近 material-ui @material-ui/core 相反。可能是文件夹中的某些包不相同。不管怎样,每当有依赖冲突时都是这样。检查内部 @物料界面

    手动压平(危险)

    有几个包可以强制解决此问题。它们将遍历嵌套的node_modules文件夹并将其展平到单个文件夹中。

    flatten-packages

    • npm install -g flatten-packages .
    • 扁平化包 重新排列项目目录中node_modules文件夹中的所有包。
        2
  •  2
  •   RaynorChan    5 年前

    你可以用 npm dedupe 命令完成这项任务。

    postinstall 脚本输入 package.json ,并且每次NPM安装包时 命令将为您展平同一版本中的所有重复包。

    有关详细信息,请参见 https://docs.npmjs.com/cli/dedupe

    npm postinstall script

        3
  •  0
  •   kudo44    5 年前

    在一个全新的项目(B)中安装这个包,当然当时使用的是React Native的最新版本,与我的包(0.59.8)相同。