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

Ubuntu 20.04启动Node.js v10.19.0服务报=符号语法错误

问题根因

该报错和符号书写错误、nano编辑器操作、Git配置均无关系,核心原因是服务器上运行的Node.js v10.19.0版本不支持类静态字段赋值语法。
你代码中static websiteRegex = /xxx/这种在类体内部直接给静态属性赋值的写法,是ES2022正式纳入标准的语法特性,Node.js 10.x版本的语法解析器完全不识别该结构,解析到赋值用的=时就会抛出Unexpected token =错误,和你贴出的报错栈完全匹配。
补充说明:你本地Windows开发环境大概率实际运行的Node版本高于10.x,或是使用了babel等转译工具处理过源码,所以本地运行不会触发该问题;而Ubuntu 20.04默认apt软件源提供的Node.js版本恰好就是v10.19.0,直接安装运行未转译的源码就会触发报错。

解决方案

二选一即可:

  • 方案1(推荐):升级服务器Node.js到LTS版本
    类静态字段语法在Node.js 16.0.0及以上版本默认开启支持,且和你项目用到的puppeteer依赖兼容性更好。操作时先卸载系统原有旧版Node.js,安装16/18/20任意一个长期支持版本即可,安装完成后执行node -v确认版本符合要求,重新安装项目依赖后启动服务即可恢复正常。
  • 方案2:不升级Node,修改源码为v10兼容写法
    把类体内部直接定义的静态属性,移到类定义完成后从外部挂载,Node 10可完全识别该写法,修改示例:
    class ScrapingBot {
      // 保留类内部所有原有方法逻辑不变
    }
    // 类定义完成后挂载静态属性
    ScrapingBot.websiteRegex = /^(https?\:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})(\/[\w\W]*)*$/gm
    ScrapingBot.phoneRegex = /\+?\d{1,4}?[-.\s]?\(?\d{1,3}?\)?[-.\s]?\d{1,4}[-.\s]?\d{1,4}[-.\s]?\d{1,9}/g;
    ScrapingBot.addressRegex = /(([a-zA-Z-éÉèÈàÀùÙâÂêÊîÎôÔûÛïÏëËüÜçÇæœ'.]*\s)\d*(\s[a-zA-Z-éÉèÈàÀùÙâÂêÊîÎôÔûÛïÏëËüÜçÇæœ']*)*,)*\d*(\s[a-zA-Z-éÉèÈàÀùÙâÂêÊîÎôÔûÛïÏëËüÜçÇæœ']*)+,\s([\d]{5})\s[a-zA-Z-éÉèÈàÀùÙâÂêÊîÎôÔûÛïÏëËüÜçÇæœ']+/
    
    注意如果项目其他代码里还存在类体内部直接写实例属性赋值(比如class A { name = 'test' })的写法,也要同步改成兼容写法,否则会触发同类报错。
常见无效操作说明
  • 单独替换代码里的=符号无法解决问题:报错不是符号输入错误,是旧版本解析器不支持对应的语法结构,替换符号只会触发其他语法错误。
  • 调整Git配置、更换编辑器不会对该问题产生任何影响:报错发生在Node.js加载编译JS文件阶段,和版本管理工具、文本编辑器没有关联。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 08:24:11