如何修复 React Native 错误“jest-haste-map:Haste 模块命名冲突”?

Posted

技术标签:

【中文标题】如何修复 React Native 错误“jest-haste-map:Haste 模块命名冲突”?【英文标题】:How to fix React Native error "jest-haste-map: Haste module naming collision"? 【发布时间】:2019-06-21 19:52:54 【问题描述】:

当我安装 react-native-popup-menu 时,我遇到了这样的错误。

这是错误代码

在中寻找JS文件 E:\react-native\......\

加载依赖图...(node:9460) UnhandledPromiseRejectionWarning: 错误: jest-haste-map: Haste 模块 命名冲突:重复的模块名称:react-native 路径: E:\react-native\......\node_modules\react-native-twitter-signin\node_modules\react-native\package.json 与 E:\react-native\......\node_modules\react-native\package.json

此错误是由 hasteImpl 返回相同的名称引起的 不同的文件。 在 setModule (E:\react-native\................\node_modules\jest-haste-map\build\index.js:551:17) 在 workerReply (E:\react-native\................\node_modules\jest-haste-map\build\index.js:613:9) 在 process._tickCallback (internal/process/next_tick.js:68:7) (node:9460) UnhandledPromiseRejectionWarning: 未处理的承诺 拒绝。此错误源于在异步内部抛出 没有 catch 块的函数,或者通过拒绝一个承诺 不使用 .catch() 处理。 (拒绝 ID:2)(节点:9460)[DEP0018] DeprecationWarning:不推荐使用未处理的承诺拒绝。在 未来,未处理的承诺拒绝将终止 具有非零退出代码的 Node.js 进程。 (节点:9460) UnhandledPromiseRejectionWarning: 错误: jest-haste-map: Haste 模块 命名冲突:重复的模块名称:react-native 路径: E:\react-native\......\node_modules\react-native-twitter-signin\node_modules\react-native\package.json 与 E:\react-native\......\heybuddy\node_modules\react-native\package.json

此错误是由 hasteImpl 返回相同的名称引起的 不同的文件。 在 setModule (E:\react-native\................\node_modules\jest-haste-map\build\index.js:551:17) 在 workerReply (E:\react-native\................\node_modules\jest-haste-map\build\index.js:613:9) 在 process._tickCallback (internal/process/next_tick.js:68:7) (node:9460) UnhandledPromiseRejectionWarning: 未处理的承诺 拒绝。此错误源于在异步内部抛出 在没有 catch 块的情况下运行,或者通过拒绝一个承诺 不使用 .catch() 处理。 (拒绝编号:3)

我试图找到解决此错误的方法,但找不到任何解决方案。

【问题讨论】:

【参考方案1】:

我通过在文件夹的根目录中创建一个metro.config.js 文件解决了这个问题:

module.exports = 
  resolver: 
    blacklistRE: /#current-cloud-backend\/.*/,
  ,
;

【讨论】:

【参考方案2】:

我通过在项目根文件夹中添加一个名为“rn-cli.config.js”的新文件来解决它,内容如下。

const blacklist = require('metro-config/src/defaults/blacklist');
module.exports = 
    resolver: 
        blacklistRE: blacklist([
            /node_modules\/.*\/node_modules\/react-native\/.*/,
        ])
    ,
;

【讨论】:

【参考方案3】:

我遇到了这个问题,我创建了源文件的备份并删除了所有内容,整个文件夹。删除 node_modules 是不够的。取回文件并为软件包使用 npm install 后,它工作了。

【讨论】:

你删除了哪些“所有内容”? 整个文件夹。这就是我备份源文件的原因。

以上是关于如何修复 React Native 错误“jest-haste-map:Haste 模块命名冲突”?的主要内容,如果未能解决你的问题,请参考以下文章

React Native + Jest EMFILE:打开文件过多错误

意外的导入令牌 - 使用 Jest 测试 React Native

如何修复导入错误:来自“react-native-web”的“requireNativeComponent”

react-native-vector-icons/MaterialIcons jest-expo 快照测试错误与打字稿

如何修复这个 react-native iOS 错误?

React Native Expo - Jest - React Native Firebase - Invariant Violation:Native 模块不能为空