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

NestJS应用启动时出现??=运算符相关语法错误求助

NestJS应用启动时出现??=运算符相关语法错误求助

兄弟,我太懂你碰到这个问题的糟心了!先还原下你遇到的错误场景和日志:

[16:00:15] Starting compilation in watch mode...
[16:00:18] Found 0 errors. Watching for file changes.

/Users/kirill/Documents/Документы — MacBook Pro - Customer/IT/additional courses/nest.js/educ-project/node_modules/@nestjs/common/file-stream/streamable-file.js:34
this.stream ??= bufferOrReadStream;
^^^

SyntaxError: Unexpected token '??='
at wrapSafe (internal/modules/cjs/loader.js:1029:16)
at Module._compile (internal/modules/cjs/loader.js:1078:27)
...(错误栈后续内容省略)

你说改源码发现其他模块也有这个表达式,其实这根本不是源码的问题——核心原因是你的Node.js版本太低,不支持ES2020引入的??=(空值合并赋值)运算符。

为什么会出现这个错误?

现在新版本的@nestjs/common已经用上了较新的ES语法,而??=这个运算符需要Node.js 14.0.0及以上版本才支持。从你错误栈里的internal/modules/cjs/loader.js版本来看,你的Node.js版本肯定低于14.0.0,所以才会把这个运算符识别成非法语法。

怎么解决?

给你两个可行方案,优先选第一个:

  • 升级Node.js到支持的版本
    这是最彻底的解决办法。推荐直接升级到Node.js的LTS长期支持版本(比如18.x或者20.x),现在NestJS官方也要求最低Node.js 16+版本。升级后记得:

    1. 删除项目里的node_modules文件夹和package-lock.json(或yarn.lock)文件
    2. 重新执行npm install(或yarn install)
    3. 再启动项目,这个语法错误应该就消失了
  • 降级@nestjs/common到兼容旧Node.js的版本
    如果你暂时没法升级Node.js,只能退而求其次,把@nestjs/common降级到还没使用??=语法的旧版本(比如@nestjs/common@8.x系列的某个稳定版本)。不过这个办法不推荐,因为旧版本会缺少新功能和安全补丁,长期来看还是升级Node.js更稳妥。

另外提醒一句:别再改node_modules里的代码啦,就算你改了这一处,其他依赖包也可能用同样的新语法,而且每次执行npm install都会覆盖你改的内容,完全是白费功夫~

备注:内容来源于stack exchange,提问作者Kirilll

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 08:49:31