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

Expo运行NodeJS版本异常致async函数语法错误

解决Expo中调用Async函数时的语法错误问题

听起来你遇到的问题挺让人头疼的——明明已经把Node版本升到了8.4.0(满足async/await的最低要求),但在Expo里调用_signInWithGoogleAsync()还是报语法错误。我之前帮朋友排查过类似的问题,大概率不是系统Node版本的锅,而是Expo自身的打包环境或者配置有问题,给你几个具体的排查方向:

1. 先检查你的async函数定义是否正确

有时候语法错误真的是因为函数写得不对,比如async关键字的位置错了。你可以对照下面的正确写法检查:

// 函数声明式的正确写法
async function _signInWithGoogleAsync() {
  // 这里写你的登录逻辑
  try {
    const result = await GoogleSignIn.signInAsync();
    // 处理登录结果
  } catch (error) {
    // 处理错误
  }
}

// 箭头函数的正确写法
const _signInWithGoogleAsync = async () => {
  // 同样的逻辑
};

确认一下你有没有把async放在函数声明的最前面,有没有拼写错误(比如写成asyn或者少了字母)。

2. 检查Expo实际使用的Node版本

虽然你系统的Node是8.4.0,但Expo CLI或者Expo的打包环境可能在使用另一个版本的Node。你可以运行这个命令查看Expo的诊断信息:

expo diagnostics

在输出里找到Node.js那一行,看看它显示的版本是不是和你终端运行node -v得到的一致。如果不一致,说明Expo在使用一个旧版本的Node,这时候你可以尝试:

  • 重新安装Expo CLI:npm install -g expo-cli
  • 检查你的环境变量,确保系统的Node路径在最前面,避免Expo调用到旧版本

3. 确认Babel配置正确

Expo依赖Babel来转译代码,如果Babel预设没有正确支持async/await,也会报语法错误。检查你的项目根目录下的babel.config.js,确保它用了Expo的官方预设:

module.exports = function(api) {
  api.cache(true);
  return {
    presets: ['babel-preset-expo'],
  };
};

如果你自定义了Babel配置,一定要确保包含支持async/await的插件,不过一般用Expo的预设就足够覆盖需求了。

4. 清除Expo的缓存试试

有时候旧的编译缓存会导致奇怪的语法错误,这时候清除缓存就能解决问题。运行这个命令重启项目并清除缓存:

expo r -c

或者完整写法:

expo start --clear

按照这几个步骤排查下来,应该能解决你的问题。如果还是不行,可以把expo diagnostics的输出和你的函数代码片段贴出来,方便进一步排查。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:12:51