我有一个从 csv 读取数据的应用程序。我使用文件系统和 Expo Asset 来访问我的文件。在开发过程中,我使用 Google 的 Project IDX 来编码此应用程序并使用此应用程序的网络版本进行调试。另外,在开发过程中,没有错误,在启动展会时可以读取所有 csv 文件。但是,当我尝试使用 eas 构建应用程序时,有点找不到 csv 文件,因为它总是显示“正在加载...”。我的 csv 文件位于 expo 的 asset 文件夹中(assets/jadwal_sholat.csv),index.tsx 位于 app 文件夹中。我已经做了USB调试,log.txt中没有错误。有什么解决办法吗?我把我的代码放在下面
interface ParsedSholatTimes {
Tanggal: string;
Subuh: string;
Dzuhur: string;
Ashar: string;
Maghrib: string;
Isya: string;
}
useEffect(() => {
const fetchCsvData = async () => {
try {
const asset: Asset = Asset.fromModule(require('../assets/jadwal_sholat.csv'));
await asset.downloadAsync();
const csvFile: string = await FileSystem.readAsStringAsync(asset.localUri || '');
Papa.parse<ParsedSholatTimes>(csvFile, {
header: true,
complete: (results: ParseResult<ParsedSholatTimes>) => {
const now = new Date();
const formattedToday = `${now.getDate()}/${now.getMonth() + 1}/${now.getFullYear()}`;
const todayTimes = results.data.find((row: ParsedSholatTimes) => {
const [day, month, year] = row.Tanggal.split('/').map(Number);
const csvDate = new Date(year, month - 1, day);
return (
csvDate.getDate() === now.getDate() &&
csvDate.getMonth() === now.getMonth() &&
csvDate.getFullYear() === now.getFullYear()
);
});
if (todayTimes) {
setSholatTimes(todayTimes);
} else {
console.log('No times found for today');
}
},
});
} catch (error) {
console.error('Error fetching or parsing CSV:', error);
}
};
{prayerTimes.map((prayer: PrayerTime, index: number) => {
const borderColor = tw`border-${prayer.color}`;
const bgColor = tw`bg-${prayer.color}`;
return (
<View key={prayer.name} style={[tw`w-full bg-neutral-100 p-3 rounded-xl mb-3`, borderColor]}>
<View style={tw`flex-row items-center justify-between`}>
<View style={tw`flex-row items-center`}>
<View style={[tw`rounded-full px-5 py-3 mr-2 w-44 `, bgColor]}>
<Text style={tw`text-3xl font-bold text-white text-center`}>{prayer.name}</Text>
</View>
</View>
<Text style={tw`text-4xl font-bold`}>{prayer.time || 'Loading...'}</Text>
</View>
</View>
);
})}
我已经尝试使用直接路径使用
require()
,但它也不起作用。我已经在进行USB调试并且log.txt中没有错误。
我通过 Junek 的回答中建议的解决方案解决了该问题:在此处输入链接描述 提示是将 csv 添加到世博资源支持的文件类型中: 编辑metro.config.js并添加csv类型如下
const { getDefaultConfig } = require('expo/metro-config');
/** @type {import('expo/metro-config').MetroConfig} */
const config = getDefaultConfig(__dirname);
config.resolver.assetExts.push('csv');
module.exports = config;