使用Puppeteer v22.8.1与Node v18.19.0遇语法错误,需升级Node吗?
Node v18.19.0 + Puppeteer v22.8.1 语法错误问题解答
问题场景
在Node v18.19.0环境下使用Puppeteer v22.8.1时,出现以下语法错误:
/app/node_modules/puppeteer-core/lib/cjs/puppeteer/util/disposable.js:9 Symbol.dispose ??= Symbol('dispose'); ^^^ SyntaxError: Unexpected token '??=' at wrapSafe (internal/modules/cjs/loader.js:1029:16) at Module._compile (internal/modules/cjs/loader.js:1078:27) at Object.Module._extensions..js (internal/modules/cjs/loader.js:1143:10) at Module.load (internal/modules/cjs/loader.js:979:32) at Function.Module._load (internal/modules/cjs/loader.js:819:12) at Module.require (internal/modules/cjs/loader.js:1003:19) at require (internal/modules/cjs/helpers.js:107:18) at Object.<anonymous> (/app/node_modules/puppeteer-core/lib/cjs/puppeteer/common/EventEmitter.js:13:25) at Module._compile (internal/modules/cjs/loader.js:1114:14) at Object.Module._extensions..js (internal/modules/cjs/loader.js:1143:10)
问题原因与解决方案
错误核心是Puppeteer v22.8.1依赖了Symbol.dispose特性,虽然代码中的??=运算符在Node v14.17.0+就已支持,但Symbol.dispose是Node v20.4.0及以上版本才默认启用的特性,Node v18全系列(包括v18.19.0)均不支持该特性。
因此Node v18.19.0无法解决这个问题,你有两种可行方案:
- 升级到Node v20.4.0或更高版本,完全适配Puppeteer v22.8.1的依赖要求;
- 降级Puppeteer到v21.x及以下版本,这类版本兼容Node v18环境。
内容的提问来源于stack exchange,提问作者MrCorn
相关产品推荐
相关产品推荐

