React Native 0.68+Jest29配置:Flow类型定义引发语法错误
解决React Native 0.68 + Jest 29.0中@react-native/polyfills的Flow语法错误
问题核心
你遇到的SyntaxError: Unexpected identifier,是因为Jest未转译@react-native/polyfills/error-guard.js里的Flow类型定义,而你配置的transformIgnorePatterns存在匹配范围不全或逻辑错误,导致该模块被错误排除在转译流程外。
具体解决方案
1. 修正Jest配置中的transformIgnorePatterns
确保@react-native下所有子模块(包括polyfills)都被纳入转译范围,而非忽略。修改package.json中的Jest配置:
"jest": { "preset": "@react-native/jest-preset", "transformIgnorePatterns": [ "node_modules/(?!(@react-native|react-native|@react-native-community)/)" ], "setupFiles": [ "./node_modules/react-native/jest/setup.js" ] }
preset: "@react-native/jest-preset":复用React Native官方Jest预设,省去大量基础配置工作transformIgnorePatterns:通过负向预查,排除@react-native、react-native及社区模块,让babel-jest处理这些模块的转译setupFiles:引入React Native的Jest初始化脚本,保证测试环境初始化正确
2. 确保Babel配置正确处理Flow语法
修改babel.config.js,使用Metro的Babel预设(该预设会自动剥离Flow类型):
module.exports = { presets: ['module:metro-react-native-babel-preset'], };
3. 安装/校验必要依赖
确保安装了对应版本的转译工具和预设:
yarn add --dev babel-jest @react-native/jest-preset metro-react-native-babel-preset
4. 清除Jest缓存
缓存可能导致配置变更不生效,执行以下命令清除缓存:
yarn jest --clearCache
5. 重新运行测试
yarn jest
额外排查点
- 如果上述方案仍无效,可临时将
transformIgnorePatterns设为[](不忽略任何模块)测试是否解决问题,再逐步缩小范围排查其他依赖的转译情况 - 若存在版本冲突,可尝试降级Jest到28.x版本,测试是否兼容React Native 0.68
内容的提问来源于stack exchange,提问作者user938363
相关产品推荐
相关产品推荐

