You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Expo React Native项目中SRT字幕文件路径解析失败求助

Expo React Native项目中SRT文件无法解析的解决思路

问题背景

开发基于Expo的React Native项目,需展示视频并搭配SRT字幕,未使用expo-av的字幕模块。部分SRT文件通过require引入时报错:

Unable to resolve "../assets/srt/Audio2.srt" from "components\PlayerSound.js"

代码中的路径配置:

const goodSubPaths = [
 require('../assets/srt/Audio2.srt'),
 require('../assets/srt/Audio4.srt'),
 ];
const badSubPaths = [
 require('../assets/srt/Audio3.srt'),
  require('../assets/srt/Audio5.srt'),
 ];
const introPath = require('../assets/srt/Audio1.srt');

SRT文件实际存在于C:\Dev\MI\assets\srt目录,包含对应文件:

Mode                 LastWriteTime         Length Name
-a----        15/10/2023     22:39           4335 Audio1.srt
-a----        15/10/2023     22:39           3013 Audio2.srt
-a----        15/10/2023     22:39           4216 Audio3.srt
-a----        15/10/2023     22:39            220 Audio4.srt
-a----        15/10/2023     22:39            295 Audio5.srt

已尝试调整路径、使用expo-asset/expo-file-system等方案,问题未解决,以下是针对性解决思路:


解决思路

1. 核对文件名大小写与路径分隔符

  • Metro bundler区分文件名大小写,即使Windows文件系统不区分,需确保代码中require的文件名(如Audio3.srt)与实际文件的大小写完全一致,无拼写错误。
  • 代码中使用正斜杠/,但报错路径显示反斜杠\,可尝试统一将代码中的路径改为反斜杠,或确认PlayerSound.js的位置:若该文件在components目录,../assets需指向项目根目录下的assets文件夹,确认目录层级无错误。

2. 配置Metro支持SRT文件解析

默认Metro不识别.srt格式,需修改metro.config.js添加对应扩展名:

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

const config = getDefaultConfig(__dirname);
// 将srt添加到可解析的资源扩展名列表
config.resolver.assetExts.push('srt');

module.exports = config;

修改后完全重启Metro bundler(不要仅热重载),再测试引入。

3. 确保SRT文件被Expo打包纳入

在app.json的expo.assets字段中添加srt目录,确保Expo打包时包含这些文件:

{
  "expo": {
    "assets": [
      "./assets/srt/"
    ]
  }
}

4. 正确使用expo-asset加载资源

若使用expo-asset,需通过异步方式加载资源,而非直接同步require:

import { Asset } from 'expo-asset';

async function loadSubtitle(subAsset) {
  const asset = Asset.fromModule(subAsset);
  await asset.downloadAsync();
  // 加载完成后使用asset.localUri获取本地路径
  console.log('字幕本地路径:', asset.localUri);
  return asset.localUri;
}

// 调用示例
loadSubtitle(require('../assets/srt/Audio2.srt'));

5. 清除Metro缓存

缓存可能导致路径解析异常,运行以下命令清除缓存并重启项目:

npx expo start --clear

6. 检查SRT文件内容合法性

部分文件(如报错的Audio3/Audio5)可能存在格式问题,打开文件确认:

  • 字幕格式符合SRT规范(序号、时间轴、字幕内容的结构)
  • 文件无特殊编码或不可见字符导致Metro解析失败

内容的提问来源于stack exchange,提问作者Arhkaz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 23:55:13