React Native Android运行报错:无法找到node:fs模块,求助解决方法
解决React Native中「Cannot find module 'node:fs'」错误
1. 修复Metro配置的重复导出问题
你当前的metro配置存在重复module.exports,后面的异步配置会完全覆盖前面的transform规则,导致babel转换逻辑缺失。将两个配置合并为一个:
const { getDefaultConfig } = require('metro-config'); module.exports = (async () => { const { resolver: { sourceExts, assetExts }, } = await getDefaultConfig(); return { transformer: { babelTransformerPath: require.resolve('react-native-svg-transformer'), getTransformOptions: async () => ({ transform: { experimentalImportSupport: false, inlineRequires: true, }, }), }, resolver: { assetExts: assetExts.filter(ext => ext !== 'svg'), sourceExts: [...sourceExts, 'svg'], // 添加Node.js模块映射规则 extraNodeModules: { // 将node:fs映射为React Native兼容的文件系统模块 'node:fs': require.resolve('react-native-fs') } }, }; })();
2. 配置Babel处理node:fs别名
安装babel-plugin-module-resolver让Babel识别并替换node:fs:
npm install babel-plugin-module-resolver --save-dev # 或使用yarn yarn add babel-plugin-module-resolver --dev
修改项目根目录的babel.config.js,添加别名配置:
module.exports = { presets: ['module:metro-react-native-babel-preset'], plugins: [ [ 'module-resolver', { alias: { 'node:fs': 'react-native-fs', // 其他Node.js内置模块报错时可在此追加映射 }, }, ], ], };
3. 排查并替换不兼容依赖
若上述配置后仍报错,大概率是第三方依赖直接使用了Node.js的fs模块(这类包仅适配Node.js环境,不兼容React Native):
- 检查近期安装的依赖,定位引用
node:fs或fs的包 - 替换为React Native生态的替代包(比如用
react-native-fs替代Node.js原生fs) - 若该依赖非必要,直接卸载
4. 临时Mock方案(针对无实际使用的fs引用)
如果某些依赖只是引用了node:fs但未实际调用相关功能,可用空模块Mock:
- 在项目根目录创建
mock/fs.js:
// 空模块,用于Mock Node.js的fs module.exports = {};
- 修改Metro配置的
extraNodeModules:
extraNodeModules: { 'node:fs': require.resolve('./mock/fs.js') }
最后清理缓存并重新运行项目:
npx react-native start --reset-cache npx react-native run-android
内容的提问来源于stack exchange,提问作者Tom
相关产品推荐
相关产品推荐

