React-native捆绑失败。 ERROR MESSAGE: "While trying to resolve module 'idb'..... Indeed none of these files exist":

回答 10 浏览 2.4万 2022-05-09

问题中的错误信息。

当试图从文件C:\Users\OG\Desktop\programming\react_native\mealstogo\MealsToGo2\node_modules\@firebase\app\dist\esm\index.esm2017.js解析模块idb时,成功找到了包C:\Users\OG\Desktop\programming\react_native\mealstogo\MealsToGo2\node_modules\idb\package.json。然而,这个包本身指定了一个无法解析的main模块字段(C:\Users\OG\Desktop\programming\react_native\mealstogo\MealsToGo2\node_modules\idb\build\index.cjs。事实上,这些文件都不存在。

错误信息的照片

这个错误令人困惑的部分是,index.esm2017这个文件在目录中确实存在。'C:\Users\OG\Desktop\programming\react_native\mealstogo\MealsToGo2\node_modules\idb\build\index.cjs

我已经卸载并重新安装了Firebase。我安装和卸载了'idb'。我清除了yarn缓存,expo缓存,删除了node_modules并重新安装,同时也清除了watchman缓存,但都没有用。我还检查了三遍文件目录是否在错误信息所说的地方。

这个错误是在expo安装lottie-react-native时出现的,然而这似乎无关紧要,一旦移除lottie-react-native,问题依然存在。我已经用git将我的代码恢复到该行为开始之前,现在该问题在这里也持续存在。

现在看来,整个项目几乎都被毁掉了,我应该如何继续前进。

JohnyClash 提问于2022-05-09
10 个回答
#1楼 已采纳
得票数 91

如果你使用expo,为了解决这个问题,在项目根部创建一个metro.config.js文件。在该文件中添加文件扩展名cjsdetails

const { getDefaultConfig } = require("@expo/metro-config");

const defaultConfig = getDefaultConfig(__dirname);

defaultConfig.resolver.assetExts.push("cjs");

module.exports = defaultConfig;

画面截图

反应式原生型客户端

const { getDefaultConfig } = require("metro-config");
const { resolver: defaultResolver } = getDefaultConfig.getDefaultValues();
exports.resolver = {
  ...defaultResolver,
  sourceExts: [
    ...defaultResolver.sourceExts,
    "cjs",
  ],
};
Sohel Islam Imran 提问于2022-05-11
Sohel Islam Imran 修改于2022-05-11
@Sohel 那么问题其实是出在expo上,而不是firebase上?JohnyClash 2022-05-31
@JohnyClash 实际上,Firebase使用.cjs文件扩展名,Expo和react native默认不支持。所以我们需要手动配置metro.config来解析它。请阅读这里的细节Sohel Islam Imran 2022-06-01
我不得不在事后重新安装node_modules,才终于成功了。geg 2022-06-06
这对我来说很有效。非常感谢。我的项目是React Native,所以我只是把第二段代码粘贴到根部的一个新文件中,名为metro.config.js。user2364424 2022-06-08
是的,这对我来说也很有效。在安卓系统上,我也遇到了同样的错误,因为我是用Expo来构建的。Ryan Trainor 2022-08-04
#2楼
得票数 32

我得到了同样的错误......我觉得新的Firebase版本有些奇怪。我把我的Firebase版本降级到9.6.11来暂时解决这个问题...

npm uninstall firebase
npm install firebase@9.6.11
crunchytoast 提问于2022-05-10
你是一个神的脆皮吐司Abdel Shokair 2022-07-18
用react-native-cli和yarn为我工作,但要记住,如果在iOS上做npx pod-install iosMarco Sajeva 2022-08-08
我不得不从9.12版本降级到这个版本。benwl 2022-10-19
#3楼
得票数 29

我刚刚在metro.config.js文件中添加了以下代码。我使用Firebase v9.8.1。

module.exports = {
  transformer: {
    getTransformOptions: async () => ({
      transform: {
        experimentalImportSupport: false,
        inlineRequires: true,
      },
    }),
  },
  //added this
  resolver: {
    sourceExts: ['jsx', 'js', 'ts', 'tsx', 'cjs'],
  },
};
EdEd 提问于2022-05-13
这为我解决了错误,也是唯一可行的方法,因为getDefaultConfig在metro启动时由于某种原因而未被定义。但我注意到我在node_modules/metro-config/src/defaults/defaults.js中的默认值是["js", "json", "ts", "tsx"],所以我把它改为["js", "json", "ts", "tsx", "cjs"]scipilot 2022-08-27
#4楼
得票数 4

我尝试了一些方法来解决expo中的这个问题,解决办法是在根目录下创建metro.config.js文件,并添加以下代码。

const { getDefaultConfig } = require("@expo/metro-config");

const defaultConfig = getDefaultConfig(__dirname);

defaultConfig.resolver.assetExts.push("cjs");

module.exports = defaultConfig;

现在重新启动你的博览会应用程序!!。

Diven Khatri 提问于2022-06-22
#5楼
得票数 2

在重启metro bundler后发现这个方法有效:https://github.com/thysultan/stylis/issues/233

对于Expo,你必须改变你的app.json文件。

{
  "expo": {
    ..., 
    "packagerOpts": {
      "sourceExts": ["cjs"]
    }
}
Sharmaine Teo 提问于2022-05-28
#6楼
得票数 0

我有一个react-native项目(没有expo),得到了同样的错误,在我的例子中,我有firebase 9.7.0,但我像这个线程中的好友一样改成了9.6.11,它就工作了。 我用yarn install构建节点模块,并在npx pod-install之后。这是我的package.json之后和之前(只是Firebase改变了)的情况。

后的。

"dependencies": {
"@react-navigation/native": "^6.0.10",
"@react-navigation/stack": "^6.2.1",
"axios": "^0.27.2",
"firebase": "9.7.0",
"react": "17.0.2",
"react-native": "0.68.1",
"react-native-gesture-handler": "^2.4.1",
"react-native-safe-area-context": "^4.2.5",
"react-native-screens": "^3.13.1"

},

之前:(它是有效的)。

"dependencies": {
"@react-navigation/native": "^6.0.10",
"@react-navigation/stack": "^6.2.1",
"axios": "^0.27.2",
"firebase": "9.6.11",
"react": "17.0.2",
"react-native": "0.68.1",
"react-native-gesture-handler": "^2.4.1",
"react-native-safe-area-context": "^4.2.5",
"react-native-screens": "^3.13.1"

},

user10415531 提问于2022-05-21
user10415531 修改于2022-05-21
#7楼
得票数 0

经过一个小时的研究,我找到了我的解决方案。我得到这个错误是因为Firebase配置中的authDomain错误。

旧的。

authDomain: "https://something.firebaseio.com"

修整。

authDomain: "something.firebaseio.com"

希望这能对某人有所帮助!

Lê Vũ Huy 提问于2022-08-28
#8楼
得票数 0

我刚刚安装了这个命令,它将自动降级你的Firebase版本,并解决这个问题。

expo install firebase@9.6.11

Akhzar Nazir 提问于2022-10-24
#9楼
得票数 0

注意:这不是一个有效的或推荐的修复。只是快速和肮脏。

如果你一直遇到这个问题,并需要一个短期的解决方案,那么你可以导航到node_modules文件夹内的idb文件夹,访问package.json文件,并将任何以cjs结尾的文件类型改为js

node_modules --> idb --> package.json --> change any 'cjs' to 'js'

再次,这不是最好的解决方案。这只是一个胶布修复。

Josh 提问于2022-10-25
#10楼
得票数 -1

在一个干净的expo项目中添加了firebase后也遇到了完全相同的问题。这个问题是由于Expo不支持.cjs。

我通过在metro.config.js中添加cjs来解决这个问题,如这里所述。https://github.com/thysultan/stylis/issues/233#issuecomment-1000648356

hsinyuu 提问于2022-05-10
我最后尝试的是按照@crunchtoast的建议降级Firebase版本。我还没有实验,也没有发现这个答案是否有效。JohnyClash 2022-05-10
我确实尝试过在metro.config文件中添加一个cjs解析器,但这并没有解决我的问题......metro在识别文件方面仍然存在问题。我认为这最终是一个Firebase的问题,因为他们几天前刚把idb作为一个依赖项加入。crunchytoast 2022-05-11