Expo项目读取assets下txt文件报错:路径正确仍无法解析求解决
解决Expo项目中无法读取assets目录下txt文件的问题
你遇到的Unable to resolve "./assets/a.txt" from "App.tsx"错误,本质是Metro打包器默认不将txt文件识别为可通过require加载的资源,或者资源配置未正确生效,以下是几种可行解决方案:
方案1:修改Metro配置支持txt文件
Metro默认只处理特定扩展名的资源,需要手动添加txt到允许列表:
- 在项目根目录创建或编辑
metro.config.js文件,添加如下代码:
const { getDefaultConfig } = require('expo/metro-config'); const config = getDefaultConfig(__dirname); // 将txt添加到可解析的资源扩展名列表 config.resolver.assetExts.push('txt'); module.exports = config;
- 完全关闭当前Expo开发服务器,重新启动(
npx expo start),配置修改需要重启才能生效。 - 原代码可以保持不变,此时
require("./assets/a.txt")就能正确解析。
方案2:使用expo-file-system读取文件
无需修改配置,直接通过文件系统API读取:
- 先安装依赖:
npx expo install expo-file-system
- 修改App.tsx代码为:
import { StatusBar } from "expo-status-bar" import { useEffect } from "react" import { Text, View } from "react-native" import * as FileSystem from 'expo-file-system'; export default function App() { useEffect(() => { const readTxtFile = async () => { // Expo会将assets目录下的文件打包到documentDirectory/assets路径下 const fileUri = `${FileSystem.documentDirectory}assets/a.txt`; try { const content = await FileSystem.readAsStringAsync(fileUri); console.log('文件内容:', content); } catch (error) { console.error('读取文件失败:', error); } }; readTxtFile(); }, []) return ( <View> <Text>Open up App.tsx to start working on your app!</Text> </View> ) }
额外检查项
- 确认
assets/a.txt文件确实存在,文件名大小写与代码中的引用完全一致(部分操作系统区分大小写); - 若使用Git管理项目,检查文件是否被.gitignore排除,导致未被打包到项目中。
内容的提问来源于stack exchange,提问作者daxw
相关产品推荐
相关产品推荐

