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

React Native如何从Assets导入docx文件?Expo安卓端导入docx文件报模块未找到错误的排查与解决

React Native/Expo 导入Assets目录docx文件的解决方案

嘿,我来帮你搞定这两个问题——先讲清楚怎么在React Native/Expo里从Assets目录导入docx文件,再解决你遇到的Web正常但Expo安卓报错的问题。

1. 如何从Assets目录导入docx文件?

在Expo或纯React Native项目中,没法像Web那样直接用import导入docx这类非代码文件,得借助Expo的资源管理系统来处理。具体步骤如下:

  • 先把你的docx文件放到项目的assets目录下(建议创建子文件夹,比如assets/documents,方便统一管理各类文档)
  • 打开项目根目录的app.json(如果用的是动态配置就是app.config.js),在expo配置项里添加assets数组,告诉Expo要打包这个目录下的资源:
    {
      "expo": {
        // 其他项目配置...
        "assets": [
          "./assets/documents/"
        ]
      }
    }
    
  • 使用expo-asset库来加载文件并获取可访问的URI:
    import { Asset } from 'expo-asset';
    
    // 异步加载docx文件的函数
    async function loadTimesheetDoc() {
      // 用require引用文件,Metro打包器会把它识别为项目资产
      const docAsset = Asset.fromModule(require('./assets/documents/Timesheet.docx'));
      // 下载资源到本地设备(安卓/iOS必须这一步,确保文件能被访问)
      await docAsset.downloadAsync();
      // 现在docAsset.uri就是文件的本地路径,你可以用它做后续操作,比如打开、上传等
      console.log('Timesheet doc URI:', docAsset.uri);
      return docAsset.uri;
    }
    

2. Web正常但Expo安卓报错的原因及修复

问题根源

你用import Timesheet from './Timesheet.docx'在Web上能跑通,是因为Web的打包工具(比如Webpack)默认会把这类静态资源复制到输出目录,import语句会直接返回资源的在线URL。但Expo用的Metro打包器不支持这种直接导入非代码/非标准资源的逻辑,它没法把docx文件识别为可导入的模块,所以就抛出了“module not found, file not found error”的错误。

修复方法

直接按照第一部分的步骤调整你的代码和配置就行:

  • 把docx文件移到assets目录的子文件夹中(比如assets/documents/Timesheet.docx)
  • 更新app.json的assets配置,包含这个子文件夹的路径
  • 替换原来的import语句,改用expo-asset的方式加载文件(代码示例看第一部分)

这样调整后,不管是Web还是Expo安卓/iOS环境,都能正常获取到docx文件的访问路径了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 19:03:11