新建React Native项目触发Metro Bundler报错:Unexpected token =
报错原因
该报错是Node版本与React Native依赖的metro-cache版本语法不兼容导致:
- 你当前使用的Node v14.x版本默认未完全支持ES6+的类静态字段语法
- 新版metro-cache的代码中使用了
static HttpError = HttpError这类类静态字段写法,Node v14解析该语法时直接抛出异常 - 你看到的app成功启动提示是因为流程分阶段执行,模拟器安装启动步骤先完成,后续Metro打包缓存阶段才触发报错
解决方法
你可以根据实际场景选择以下任意一种方案:
- 方案1:升级Node版本(最推荐)
将Node升级到v16.x及以上的LTS版本,该版本默认完整支持类静态字段语法。升级完成后删除项目下的node_modules文件夹、package-lock.json或yarn.lock文件,重新执行依赖安装命令后再启动项目即可。 - 方案2:临时开启Node实验性语法支持
运行启动命令时添加harmony参数开启类静态字段支持,命令如下:
也可以直接修改package.json中的scripts启动脚本,把参数内置进去,避免每次运行都手动输入。NODE_OPTIONS=--harmony-class-fields npx react-native run-ios - 方案3:锁定兼容版本的metro-cache
如果你暂时无法升级Node版本,可以在package.json中添加配置锁定支持Node v14的metro-cache版本:- 如果你使用npm v8及以上版本,添加如下配置:
{ "overrides": { "metro-cache": "0.72.3" } }- 如果你使用yarn,添加如下配置:
配置完成后重新安装依赖,清理Metro缓存后启动项目即可。{ "resolutions": { "metro-cache": "0.72.3" } }
内容的提问来源于stack exchange,提问作者schoenbl
相关产品推荐
相关产品推荐

