NestJS@v9集成socketio-jwt构建报错:找不到SocketIO命名空间
问题:SocketIO-JWT类型依赖缺失导致TS编译错误
我正在开发带聊天功能的NestJS@v9项目,需要在创建WebSocket时通过用户发送的token做授权。项目构建脚本为"build":"npm run remove-build && tsc -p tsconfig.build.json",执行yarn build时出现以下错误:
yarn run build stdout: $ npm run remove-build && tsc -p tsconfig.build.json > remove-build > rm -rf dist ../../node_modules/socketio-jwt/types/index.d.ts(26,14): error TS2503: Cannot find namespace 'SocketIO'. ../../node_modules/socketio-jwt/types/index.d.ts(63,38): error TS2503: Cannot find namespace 'SocketIO'.
移除// import { authorize } from 'socketio-jwt';后错误消失,但我必须使用该authorize方法完成授权逻辑。
相关依赖信息
package.json中的相关依赖:
"socket.io": "^4.5.2", "socket.io-redis": "^6.1.1", "socketio-jwt": "^4.6.2",
客户端连接代码
const socket = io('http://localhost:1080', { transports: ['websocket'], query: { token: TOKEN, }, });
服务端授权代码
import { authorize } from 'socketio-jwt'; public createIOServer(port: number, options?: ServerOptions): any { const server = super.createIOServer(port, options); server.adapter(this.redisAdapter); server.use( authorize({ decodedPropertyName: 'token', handshake: true, secret: secret, }) as any, ); }
解决方案
方案1:安装SocketIO类型声明包
socketio-jwt的类型定义依赖SocketIO的全局类型,但项目未引入该类型。执行以下命令安装缺失的开发依赖:
npm install @types/socket.io --save-dev # 或使用yarn yarn add @types/socket.io --dev
安装完成后重新执行yarn build即可解决类型缺失问题。
方案2:在tsconfig中显式引入类型
如果安装类型包后仍报错,可在tsconfig.json的compilerOptions中添加socket.io类型:
{ "compilerOptions": { // 其他配置项... "types": ["socket.io"] } }
方案3:替换为官方维护的@socket.io/jwt(推荐)
socketio-jwt已停止维护,官方推荐使用@socket.io/jwt替代,步骤如下:
- 卸载旧包:
npm uninstall socketio-jwt # 或 yarn remove socketio-jwt
- 安装新包:
npm install @socket.io/jwt # 或 yarn add @socket.io/jwt
- 修改服务端代码:
import { authenticate } from "@socket.io/jwt"; public createIOServer(port: number, options?: ServerOptions): any { const server = super.createIOServer(port, options); server.adapter(this.redisAdapter); server.use( authenticate({ secret: secret, decodedPropertyName: "token", }) ); }
客户端代码无需修改,新包会自动从query参数中提取token完成验证。
内容的提问来源于stack exchange,提问作者Mohammed Ibrahim
相关产品推荐
相关产品推荐

