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

React Native 0.64.4 非调试/Release模式下报property intl does not exist错误

解决React Native 0.64.4开启Hermes时“property intl does not exist”错误

问题核心:你开启了Hermes引擎,但Hermes默认不包含完整的Intl国际化支持,而你的jscFlavor配置因为enableHermes=true并未生效,导致非调试/Release模式下缺失Intl相关属性。

以下是几种可行的解决方法:

方法1:添加Intl Polyfills

直接安装并引入缺失的Intl相关polyfill,补全Hermes的国际化支持:

  1. 安装依赖包:
    npm install @formatjs/intl-pluralrules @formatjs/intl-relativetimeformat @formatjs/intl-getcanonicallocales @formatjs/intl-listformat @formatjs/intl-displaynames
    
  2. 在项目入口文件(如index.js或App.js)最顶部引入polyfill及对应语言的locale数据(示例为中文,可替换为你需要的语言):
    import '@formatjs/intl-getcanonicallocales/polyfill';
    import '@formatjs/intl-pluralrules/polyfill';
    import '@formatjs/intl-pluralrules/locale-data/zh';
    import '@formatjs/intl-relativetimeformat/polyfill';
    import '@formatjs/intl-relativetimeformat/locale-data/zh';
    import '@formatjs/intl-displaynames/polyfill';
    import '@formatjs/intl-displaynames/locale-data/zh';
    import '@formatjs/intl-listformat/polyfill';
    import '@formatjs/intl-listformat/locale-data/zh';
    

方法2:启用Hermes的Intl编译选项

修改Android端gradle配置,让Hermes编译时带上Intl支持:

  1. 打开android/app/build.gradle,找到Hermes的配置块,添加hermesFlags参数:
    if (enableHermes) {
        def hermesPath = "../../node_modules/hermes-engine/android/";
        debugImplementation files(hermesPath + "hermes-debug.aar")
        releaseImplementation files(hermesPath + "hermes-release.aar")
        // 新增Hermes Intl支持的编译参数
        project.ext.react = [
            enableHermes: true,
            hermesFlags: ["-O", "-output-source-map", "-enable-intl"]
        ]
        // 可选:解决so文件冲突
        packagingOptions {
            pickFirst 'lib/armeabi-v7a/libhermes.so'
            pickFirst 'lib/arm64-v8a/libhermes.so'
            pickFirst 'lib/x86/libhermes.so'
            pickFirst 'lib/x86_64/libhermes.so'
        }
    } else {
        implementation jscFlavor
    }
    
    注意:如果project.ext.react已经在文件其他位置定义,直接在原有配置里添加hermesFlags即可,不需要重复定义。

方法3:临时切换回JSC引擎

如果上述方法都无法解决,可以临时关闭Hermes,使用带Intl支持的JSC:

  1. 找到android/app/build.gradle中的project.ext.react配置,将enableHermes改为false:
    project.ext.react = [
        enableHermes: false,
        // 其他配置...
    ]
    
    这样项目就会使用你配置的org.webkit:android-jsc-intl:+,但会损失Hermes的性能优势。

通用操作步骤

修改配置后,务必执行以下操作确保生效:

  • 清理Android构建缓存:cd android && ./gradlew clean
  • 清除RN打包缓存:npm start -- --reset-cache
  • 重新构建并运行应用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 06:45:38