React Native升级到0.79.1后出现Hermes引擎JS编译错误(import声明需在模块顶级)
React Native升级到0.79.1后出现Hermes引擎JS编译错误(import声明需在模块顶级)
兄弟,太懂你升级RN版本踩坑的糟心了!这个问题其实是RN 0.79版本升级后,Hermes引擎启用了更严格的ES模块规范检查导致的——现在它要求所有import语句必须放在文件的最顶级位置,绝对不能嵌套在条件判断、函数或者任何代码块里。
给你整理几个实用的解决步骤:
先定位问题代码:全局搜一遍你的项目,看看有没有类似下面的错误写法:
// ❌ 错误:import嵌套在条件判断里 if (Platform.OS === 'ios') { import IOSComponent from './IOSComponent'; } // ❌ 错误:import放在函数内部 function initModule() { import Utils from './utils'; }针对性修复:
- 静态导入必须移到顶部:如果是固定需要导入的模块,直接把
import移到文件第一行(注释除外)的位置。 - 动态场景改用动态导入:如果是需要按需加载的模块,别用静态
import,改用import()异步语法,示例:// ✅ 正确:动态导入写法 async function loadIOSComponent() { if (Platform.OS === 'ios') { const { default: IOSComponent } = await import('./IOSComponent'); // 这里正常使用组件即可 } } - 排查第三方依赖:有些老依赖可能也存在不规范的写法,先尝试把依赖更新到最新版本;如果更新不了,可以临时在
metro.config.js里添加豁免配置(长远来看还是建议换成合规的依赖):module.exports = { resolver: { unstable_enablePackageExports: false, }, };
- 静态导入必须移到顶部:如果是固定需要导入的模块,直接把
额外小提示:如果已经调整完import位置还是报错,检查下有没有文件存在语法错误,比如import语句后面跟了非法字符,或者文件编码异常导致Hermes解析失败。
备注:内容来源于stack exchange,提问作者mohammad hanafi
相关产品推荐
相关产品推荐

