云服务器运行Discord音乐机器人报错Unexpected token '.'如何解决
问题诊断
核心错误为SyntaxError: Unexpected token '.',触发位置是代码中的?.可选链操作符:
- 该语法是ES2020版本新增特性,仅Node.js 14.0.0及以上版本支持
- 本地运行正常是因为你的本地Node版本符合要求,云服务器环境Node版本过低导致语法不识别
解决方案
方案一:升级云服务器Node.js版本(推荐)
无需修改任何代码,适配性最好:
- 若使用PebbleHost托管面板,直接在运行环境设置中选择14.x及以上的Node.js LTS版本即可
- 若为自行管理的云服务器,可通过nvm工具管理Node版本,安装完成后执行
nvm install --lts即可安装最新长期支持版Node,同时解决日志中提示的Server executable "node" not found问题 - 补充优化:可在项目
package.json中添加启动脚本,避免面板识别不到启动命令:
{ "scripts": { "start": "node index.js" } }
方案二:修改代码兼容低版本Node.js
若暂时无法升级服务器环境,只需替换代码中所有?.可选链写法为传统嵌套判断即可,你当前的代码共需修改2处:
- 第67行原代码:
if (!client.application?.owner) await client.application?.fetch();
替换为:
if (client.application && !client.application.owner) await client.application.fetch();
- 第69行原代码:
if (message.content === "!deploy" && message.author.id === client.application?.owner?.id) {
替换为:
if (message.content === "!deploy" && client.application && client.application.owner && message.author.id === client.application.owner.id) {
替换后重新上传代码启动即可。
内容的提问来源于stack exchange,提问作者MrScoloink
相关产品推荐
相关产品推荐

