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引擎
- 先安装v12以上的Node.js LTS版本,确保添加到系统环境变量。
- 修改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
相关产品推荐
相关产品推荐

