React-native捆绑失败。 ERROR MESSAGE: "While trying to resolve module 'idb'..... Indeed none of these files exist":
问题中的错误信息。
当试图从文件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将我的代码恢复到该行为开始之前,现在该问题在这里也持续存在。
现在看来,整个项目几乎都被毁掉了,我应该如何继续前进。
如果你使用expo,为了解决这个问题,在项目根部创建一个metro.config.js文件。在该文件中添加文件扩展名cjs
。details
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",
],
};
.cjs
文件扩展名,Expo和react native默认不支持。所以我们需要手动配置metro.config
来解析它。请阅读这里的细节。
- Sohel Islam Imran 2022-06-01
node_modules
,才终于成功了。
- geg 2022-06-06
我得到了同样的错误......我觉得新的Firebase版本有些奇怪。我把我的Firebase版本降级到9.6.11来暂时解决这个问题...
npm uninstall firebase
npm install firebase@9.6.11
我刚刚在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'],
},
};
getDefaultConfig
在metro启动时由于某种原因而未被定义。但我注意到我在node_modules/metro-config/src/defaults/defaults.js
中的默认值是["js", "json", "ts", "tsx"]
,所以我把它改为["js", "json", "ts", "tsx", "cjs"]
。
- scipilot 2022-08-27
我尝试了一些方法来解决expo中的这个问题,解决办法是在根目录下创建metro.config.js文件,并添加以下代码。
const { getDefaultConfig } = require("@expo/metro-config");
const defaultConfig = getDefaultConfig(__dirname);
defaultConfig.resolver.assetExts.push("cjs");
module.exports = defaultConfig;
现在重新启动你的博览会应用程序!!。
在重启metro bundler后发现这个方法有效:https://github.com/thysultan/stylis/issues/233。
对于Expo,你必须改变你的app.json文件。
{
"expo": {
...,
"packagerOpts": {
"sourceExts": ["cjs"]
}
}
我有一个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"
},
经过一个小时的研究,我找到了我的解决方案。我得到这个错误是因为Firebase配置中的authDomain
错误。
旧的。
authDomain: "https://something.firebaseio.com"
修整。
authDomain: "something.firebaseio.com"
希望这能对某人有所帮助!
我刚刚安装了这个命令,它将自动降级你的Firebase版本,并解决这个问题。
expo install firebase@9.6.11
注意:这不是一个有效的或推荐的修复。只是快速和肮脏。
如果你一直遇到这个问题,并需要一个短期的解决方案,那么你可以导航到node_modules
文件夹内的idb
文件夹,访问package.json
文件,并将任何以cjs
结尾的文件类型改为js
。
node_modules --> idb --> package.json --> change any 'cjs' to 'js'
再次,这不是最好的解决方案。这只是一个胶布修复。
在一个干净的expo项目中添加了firebase后也遇到了完全相同的问题。这个问题是由于Expo不支持.cjs。
我通过在metro.config.js中添加cjs来解决这个问题,如这里所述。https://github.com/thysultan/stylis/issues/233#issuecomment-1000648356