未满足对等依赖关系的npm问题,与react native相关

未满足对等依赖关系的npm问题,与react native相关,npm,react-native,Npm,React Native,我想我对npm如何管理依赖关系感到困惑。我看到: npm list react-native project@0.0.1 /Users/me/workspace/project └── UNMET PEER DEPENDENCY react-native@0.15.0 npm ERR! peer dep missing: react-native@^0.13.2, required by react-native-dialogs@0.0.5 npm ERR! code 1 所以我试着。。。但

我想我对npm如何管理依赖关系感到困惑。我看到:

npm list react-native
project@0.0.1 /Users/me/workspace/project
└── UNMET PEER DEPENDENCY react-native@0.15.0

npm ERR! peer dep missing: react-native@^0.13.2, required by react-native-dialogs@0.0.5
npm ERR! code 1
所以我试着。。。但我得到:

   npm install react-native@0.15.0

    ....

    project@0.0.1 /Users/me/workspace/project
└─┬ UNMET PEER DEPENDENCY react-native@0.15.0
  └── react-tools@0.14.0-beta1  (git+https://github.com/facebook/react.git#b4e74e38e43ac53af8acd62c78c9213be0194245)

npm WARN EPEERINVALID react-native-dialogs@0.0.5 requires a peer of react-native@^0.13.2 but none was installed.
npm ERR! code 1
My package.json:

{
  "name": "project",
  "version": "0.0.1",
  "private": true,
  "scripts": {
    "start": "react-native start"
  },
  "dependencies": {
    "apsl-react-native-button": "^2.1.0",
    "base-64": "^0.1.0",
    "es6-react-mixins": "^0.2.1",
    "fifo": "^2.3.0",
    "money-math": "^2.2.0",
    "react-native": "^0.15.0",
    "react-native-dropdown-android": "0.0.4",
    "react-native-lightbox": "^0.5.0",
    "react-native-mail": "^0.2.4",
    "react-native-router-flux": "^0.3.4",
    "react-native-simpledialog-android": "^1.0.2",
    "react-native-swiper": "^1.3.0",
    "superagent": "^1.4.0",
    "tcomb-form-native": "^0.3.0",
    "utf8": "^2.1.1",
    "react-native-facebook-login": "^1.0.0"
  }
}
请尝试“npm install”命令的“-save”参数,如:

npm install react-native@0.15.0 --save

我知道这是一个古老的问题,但对于将来看到这一点的其他人来说,回答仍然是有用的

对问题的解释 在package.json中,您正在安装依赖项
react native-dialogs@0.0.5
这也是模块的对等依赖:
react native@^0.13.2
。由于该项目是公开的,因此可以在其文件中进行验证:

“对等依赖项”:{
“本机反应”:“^0.13.2”
}
此语句的第一部分是模块名,第二部分是支持的版本范围

这意味着根模块应在该版本范围内提供此类依赖项,以便安装成功且无错误。在本例中,它表示
react-native
依赖项,并且在
^0.13.2
版本范围内

现在,在package.json中,您列出了依赖项:

    "react-native": "^0.15.0",
那么为什么它不起作用呢?版本范围中的
^
(插入符号)应该包括同一主版本中的所有补丁次版本,对吗?(即,在
“^X.Y.Z”
范围内,所有
X.*.
都应该工作,对吗?)。事实证明,对于1.x之前的范围,情况并非如此。对于0.x范围,
^
插入符号仅涵盖范围内的补丁版本(来源:)

因此,根据此规则,
“^0.15.0”
不在
“^0.13.2”
的范围内,因此会出现
未满足的对等依赖关系
错误

可能的解决方案 你有几个选择

提供预期的对等依赖关系 最简单的方法是在一个版本中提供预期的对等依赖关系,该版本在预期的版本范围内

因此,在本例中,您可以使用相同的版本范围:
“^0.13.2”
。也可以指定确切的版本,例如:
“0.13.2”

提示:您可以使用此实用程序检查与给定软件包的请求范围匹配的所有版本

在这种情况下,唯一存在并匹配范围的版本是
“0.13.2”
,但可能还有更多版本(即
“0.13.3”
,如果存在的话也可以。但是“0.14.0”或“0.12.0”不起作用,如上所述)

更新您的模块依赖项 在许多情况下,原始模块会得到升级,更改可能包括支持不同或更广泛的对等依赖性包/版本

到今天为止,我可以在中看到,当前模块版本为1.1.1,对等依赖项已被删除,因此升级您的
“react native dialogs”
依赖项版本
^0.0.5
->
^1.1.1
将完成此场景的工作

但是,如果没有发生这种情况,或者如果您不想升级到最新版本,该怎么办?让我们探索更多选项

更改要依赖的模块本身 如果您使用的模块提供作为对等依赖项请求的依赖项版本与您的要求冲突,将此依赖项升级到删除此约束的较新版本对您不起作用

允许的范围
“^0.13.2”
可能非常有限,即它不支持版本
0.14.0
及更高版本。这背后的原因可能是兼容性问题,也可能只是在允许/支持更多版本方面缺乏意识。可能存在其他可以正常工作的版本,但是原始开发人员没有采取额外的步骤来包含它们

因此,您只想继续按原样使用此模块,但允许使用更新的
react-native
版本

想象一下原始场景,
0.0.5
是主分支机构的当前最新版本,将其作为一个问题提交给原始模块回购,和/或向其提交一份建议更广泛支持范围的请购单是有意义的。例如:

“对等依赖项”:{
“本机反应”:“<1.0.0”
}
范围
“<1.0.0”
现在允许
“^0.15.2”
版本范围

如果您不想允许所有0.x版本,该怎么办?然后可以使用更窄的范围,例如:
>0.4.0<1.0.0“
。看看文档的语法,还有更多的可能性

完全不要使用该模块/构建自己的模块 可能会出现这样的情况:原来的模块可能会被放弃,出现bug,或者无法满足您的所有需求。在这种情况下,您可以在社区中寻找可用的替代方案,甚至自己构建一个


由于此模块是公共的,您甚至可以自行完成项目并上传新的软件包版本(当然,您必须使用不同的软件包名称)。

我知道晚了一点,但对我有效,也许可以尝试删除节点模块并重新运行?