编译NestJS项目时WebSocket出现类型错误,求解决方案
问题
按照NestJS官方文档编写WebSocket网关代码,实现如下:
events.gateway.ts
import { MessageBody, SubscribeMessage, WebSocketGateway, WebSocketServer, } from "@nestjs/websockets"; import { Server } from "socket.io"; @WebSocketGateway({ cors: { origin: "http://localhost:3000", }, }) export class EventsGateway { @WebSocketServer() server: Server; @SubscribeMessage("events") handleEvent(@MessageBody() data: string): string { return data; } }
events.module.ts
import { Module } from "@nestjs/common"; import { EventsGateway } from "./events.gateway"; @Module({ providers: [EventsGateway], }) export class EventsModule {}
将EventsModule导入app.module.ts后,编译项目时出现错误:
TypeError: this.graphInspector.insertEntrypointDefinition is not a function at /home/Desktop/New Folder/nest_try_1/node_modules/@nestjs/websockets/web-sockets-controller.js:108:33 at Array.forEach (<anonymous>) at WebSocketsController.inspectEntrypointDefinitions (/home/Desktop/New Folder/nest_try_1/node_modules/@nestjs/websockets/web-sockets-controller.js:106:25) at WebSocketsController.subscribeToServerEvents (/home/Desktop/New Folder/nest_try_1/node_modules/@nestjs/websockets/web-sockets-controller.js:39:14) at WebSocketsController.connectGatewayToServer (/home/Desktop/New Folder/nest_try_1/node_modules/@nestjs/websockets/web-sockets-controller.js:30:14) at SocketModule.connectGatewayToServer (/home/Desktop/New Folder/nest_try_1/node_modules/@nestjs/websockets/socket-module.js:47:35) at /home/Desktop/New Folder/nest_try_1/node_modules/@nestjs/websockets/socket-module.js:36:38 at IteratorWithOperators.forEach (/home/Desktop/New Folder/nest_try_1/node_modules/iterare/lib/iterate.js:157:13) at SocketModule.connectAllGateways (/home/Desktop/New Folder/nest_try_1/node_modules/@nestjs/websockets/socket-module.js:36:14) at /home/Desktop/New Folder/nest_try_1/node_modules/@nestjs/websockets/socket-module.js:31:61 Node.js v19.4.0
严格遵循文档编写仍持续出现该错误,请求排查解决。
解决方案
这个错误的核心原因是NestJS核心包与WebSocket包版本不兼容:graphInspector是NestJS核心模块的API,当@nestjs/websockets版本高于@nestjs/core时,会调用核心包中不存在的方法,触发报错。
具体解决步骤
- 检查版本一致性:打开
package.json,确认所有@nestjs/*开头的包版本完全一致(大版本、小版本均需匹配,比如v8.x.x或v9.x.x全统一)。 - 卸载不兼容依赖:
npm uninstall @nestjs/core @nestjs/common @nestjs/websockets @nestjs/platform-socket.io - 重新安装统一版本依赖(以NestJS v9为例,可根据需求替换为v8或v10):
npm install @nestjs/core@^9 @nestjs/common@^9 @nestjs/websockets@^9 @nestjs/platform-socket.io@^9 - 清理缓存并重构项目:
rm -rf node_modules package-lock.json npm install npm run build
额外注意事项
- 禁止混合使用不同大版本的NestJS包,大版本间存在API变更,极易引发兼容性问题。
- 推荐通过NestJS CLI创建WebSocket模块(
nest g gateway events),CLI会自动安装匹配版本的依赖,避免手动安装导致的版本不一致。
内容的提问来源于stack exchange,提问作者James Jeramiah
相关产品推荐
相关产品推荐

