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

React Native中能否用import()替代require()动态导入资源?

React Native 替换require资源导入的可行方案

下面提供两种完全符合ESM规范、可以绕过@typescript-eslint/no-var-requires规则报错的实现方案:

方案1:常规ESM静态导入(最推荐)

这种方案的行为和原require写法完全一致,属于静态导入,会在打包阶段完成资源处理,也支持tree shaking优化。

  1. 首先确认项目tsconfig.json的compilerOptions.module配置为ESNext,适配React Native打包工具的ES模块解析规则。
  2. 直接将require写法替换为静态import即可:
import foo from "../path/to/foo.png"

注意:@types/react-native已经内置了png、jpg等常用资源的类型声明,如果是自定义后缀的资源(如.svg、.ttf),可以在全局类型声明文件(比如global.d.ts)中添加对应声明,避免类型报错:

declare module "*.svg" {
  const value: import("react-native").ImageSourcePropType;
  export default value;
}

方案2:动态import()按需导入

如果你的场景需要按需异步加载资源,可以使用import()语法,注意该方法返回Promise,需要配合async/await或者then回调使用,资源的实际值存放在返回模块的default属性中:

// 异步加载示例
const getFooResource = async () => {
  const fooModule = await import("../path/to/foo.png");
  const foo = fooModule.default;
  // 后续使用foo的逻辑和原require写法完全一致
}

临时兼容方案

如果暂时需要保留旧的require写法,可以在对应文件的顶部添加注释,单独关闭当前文件的no-var-requires规则,不推荐长期使用:

/* eslint-disable @typescript-eslint/no-var-requires */
const foo = require("../path/to/foo.png")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 08:54:00