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

Mac终端运行Gatsby遇Node版本问题:npm -v显示与实际版本不符

解决Mac终端运行Gatsby站点的Node版本兼容与npm版本不一致问题

核心问题分析

你遇到的SyntaxError: Unexpected identifier报错,本质是Node 6.x版本不原生支持ES2017的async/await语法——Gatsby的依赖(比如gatsby-telemetry)用到了这个特性,旧Node版本解析不了。而后续的npm版本显示不一致,是因为brew管理的npm和旧Node附带的npm路径冲突导致的。

一步一步解决

1. 升级Node版本(最关键)

不要单独升级npm,因为npm版本和Node版本是绑定的,旧Node跑不了高版本npm。推荐用nvm(Node Version Manager)来管理Node版本,它能轻松切换不同Node版本,避免路径冲突:

  • 先安装nvm(用brew即可):
    brew install nvm
    
  • 配置终端环境变量(根据你用的shell,比如zsh或bash):
    打开~/.zshrc(zsh用户)或~/.bash_profile(bash用户),添加以下内容:
    export NVM_DIR="$HOME/.nvm"
    [ -s "/usr/local/opt/nvm/nvm.sh" ] && . "/usr/local/opt/nvm/nvm.sh"
    [ -s "/usr/local/opt/nvm/etc/bash_completion.d/nvm" ] && . "/usr/local/opt/nvm/etc/bash_completion.d/nvm"
    
  • 重启终端,或者执行命令让配置生效:
    source ~/.zshrc  # zsh用户
    # 或者 source ~/.bash_profile  # bash用户
    
  • 安装Node长期支持版(LTS),这是最稳定的版本:
    nvm install --lts
    
  • 设置默认使用这个新版本:
    nvm alias default node
    

2. 验证版本并解决npm冲突

现在执行以下命令验证:

node -v  # 应该显示v18.x或v20.x左右的版本
npm -v   # 会对应显示比如v9.x或v10.x的版本

之前的npm版本不一致问题是因为终端优先调用了旧Node附带的npm,现在切换到新Node后,系统会用新Node自带的npm,所以不需要单独用brew管理npm了。如果之前用brew装过npm,可以卸载它避免冲突:

brew uninstall npm

3. 重新运行Gatsby站点

现在Node版本已经满足要求,重新执行Gatsby命令:

gatsby develop

应该不会再出现async相关的语法错误了。

补充说明

你之前尝试brew upgrade npm时提示已安装12.11.1,是因为brew确实装了这个版本,但它不在终端的默认路径里,所以npm -v显示的是旧Node的6.12.0。解决Node版本问题后,这个冲突就彻底消失了——新Node自带的npm版本完全能满足Gatsby的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:48:05