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

execjs调用JS文件报SyntaxError语法错误,JS单独运行正常,求助排查

execjs调用JS报SyntaxError的环境排查与解决

你遇到的execjs._exceptions.ProgramError: SyntaxError: syntax error确实是环境不兼容导致的——核心原因是execjs默认调用的JS引擎,和你单独运行JS时用的引擎版本/类型不一致,对ES6语法的支持程度不同。

你的JS代码用到了const、解构赋值const { JSDOM } = jsdom这些ES6特性,而execjs如果默认绑定了低版本引擎(比如Windows自带的JScript,或者旧版Node.js),就会因不支持这些语法触发报错,和代码本身无关。

排查与解决步骤:

  • 检查当前execjs使用的引擎
    运行这段Python代码,确认引擎类型和版本:

    import execjs
    print(execjs.get().name)
    print(execjs.get().version)
    

    如果输出是JScript(Windows默认)或版本低于v12的Node.js,直接确定是引擎问题。

  • 切换到高版本Node.js引擎

    1. 先安装v12以上的Node.js LTS版本,确保添加到系统环境变量。
    2. 修改Python代码,显式指定用Node.js运行:
      import execjs
      
      js = '''
      const jsdom = require("jsdom");
      const { JSDOM } = jsdom;
      const dom = new JSDOM('<!DOCTYPE html><p>Hello world</p>');
      window = global;
      var document = dom.window.document;
      function signature(){
          return 1
      }
      '''
      # 指定Node引擎编译
      ctx = execjs.compile(js, engine='Node')
      ct = ctx.call("signature")
      print(ct)
      
      也可以全局设置环境变量EXECJS_RUNTIME=Node,避免每次代码里指定。
  • 确认jsdom依赖安装
    在Python代码的运行目录下,执行npm install jsdom,确保execjs能找到对应的node_modules依赖。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 04:22:37