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

树莓派运行Discord机器人报Unexpected token '.'错误Windows端正常

问题根因

这个语法错误是当前运行脚本的Node.js环境不支持可选链操作符?.导致的——该语法是ES2020标准特性,Node.js 14.0以上版本才原生支持。你提到两台设备都装了v16.15.1,但树莓派上执行node bot.js时实际调用的根本不是你安装的v16版本,是系统预装的低版本Node(Raspberry Pi OS默认软件源自带的Node版本通常是v10.x甚至更低,刚好不支持可选链语法)。

排查步骤

先在树莓派的终端执行以下命令确认实际环境:

  • 执行node -v,90%以上概率输出的版本号不是v16.15.1,而是v10及更早版本
  • 执行which node,输出的路径大概率是/usr/bin/node,也就是系统源预装的旧版本二进制,不是你手动安装的v16路径
修复方案

三选一即可,优先选前两种从环境层面修复,不要硬改代码。

方案1:修正环境变量优先级,让已安装的v16生效

如果你是用nvm管理Node版本:

  • 执行source ~/.bashrc(如果使用zsh终端则执行source ~/.zshrc)加载nvm配置
  • 执行nvm use 16.15.1切换版本,再执行node -v确认版本正确后,直接启动机器人即可
  • 如果配置了机器人开机自启,注意自启脚本里要先加载nvm环境,不要直接硬编码旧的node路径
    如果你是手动下载二进制包安装的v16:
  • 编辑用户目录下的.bashrc文件,把Node16的bin目录加到PATH变量的最前面,比如安装路径是/home/pi/node-v16.15.1-linux-armv7l/,就追加一行:
export PATH=/home/pi/node-v16.15.1-linux-armv7l/bin:$PATH
  • 保存后执行source ~/.bashrc加载配置,确认node -v输出v16.15.1后再启动脚本

方案2:卸载旧版本,重装匹配架构的Node16

树莓派3B是armv7l架构,注意不要下载错成arm64架构的安装包:

  • 执行sudo apt remove -y nodejs npm nodejs-doc卸载系统预装的旧版本
  • 执行sudo rm -f /usr/bin/node /usr/bin/npm清理残留的旧软链接
  • 重新下载armv7l架构的Node.js 16.15.1安装包,安装完成后将node、npm软链接到/usr/bin目录下,保证全局可调用,确认版本正确后启动机器人

方案3:改写代码兼容旧Node(不推荐)

如果暂时没法调整Node版本,可以把所有ES2020+的新语法改成旧版兼容写法,比如报错的那行可选链可以改成传统多层判空:

if (channel && channel.messages && channel.messages.cache && channel.messages.cache.has(packet.d.message_id)) return;

注意:脚本里所有用到?.可选链、??空值合并运算符的地方都要做同类改写,否则会持续报同类语法错误,远不如直接修正Node版本省事。

验证

修复完成后先执行node -v确认输出为v16.15.1,再启动机器人,该语法错误就会消失。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 07:24:16