首页 > 解决方案 > 自定义节点模块的依赖项未安装在根目录上

问题描述

我有一个应用程序项目和 2 个节点模块项目。

依赖结构是这样的:

App {
  NodeModule1 {
    NodeModule2,
    ...
  },
  ...
}

我遇到的问题是我的 NodeModule2 不是安装在应用程序 node_module 的根目录上App/node_modules/NodeModule2,而是安装在App/node_modules/NodeModule1/node_modules/NodeModule2

这会导致运行时出现一些错误,说我的 NodeModule2 没有找到。我的解决方法是直接将 NodeModule2 添加到 App 中,这不是一个理想的解决方案。

NodeModule1 的所有其他依赖项都按预期安装在 App/node_modules/.. 中。

我的 NodeModule2 的 package.json

{
  "name": "NodeModule2",
  "version": "0.0.2-20210202.1.0",
  "private": false,
  "description": "",
  "author": "",
  "license": "ISC",
  "peerDependencies": {
    "react": "16.13.1",
    "react-native": "0.59.10",
    ...
  }
}

标签: javascriptnpmnode-modules

解决方案


我明白了

为了使子 node_module 出现在根级别,它的所有peerDependenciess 版本必须与 App 匹配。

在我的情况下,我的 App 和 NodeModule1 都有dependencyreact-native-picker-select但版本不同。

App {
  dependency: {
    "react-native-picker-select": "^8.0.0"
  }
}

NodeModule1 {
  dependency: {
    "react-native-picker-select": "8.0.0"
  }
}

NodeModule2 {
  peerDependency: {
    "react-native-picker-select": "8.0.0"
  }
}

在这种情况下,App 收到 8.0.4,NodeModule1 收到 8.0.0。Yarn 放在NodeModule2NodeModule1共享相同的依赖版本 8.0.0。

修复:确保 App、NodeModule1 和 NodeModule2 中的所有版本都匹配。


推荐阅读