WebSocket 错误: "TypeError: t.mask is not a function" 解决方案
在本地运行 npm run dev
时一切正常,但将项目打包成 Docker 镜像运行时,调用 WebSocket 却始终报错 TypeError: t.mask is not a function
。起初,我怀疑是 Docker 运行环境的问题,于是尝试在 Docker 中使用 npm run dev
运行,结果依然正常。这表明问题出在构建(build)阶段。经过排查,发现是构建时对 ws
(WebSocket 库)的打包处理导致的。解决方法是在 next.config.ts
中添加配置,将 ws
标记为外部依赖,避免其被打包工具错误处理。配置如下:
const config = {
experimental: {
serverComponentsExternalPackages: ['ws'],
turbo: {},
},
};
我使用的是 Next.js 自带的 Turbopack 打包工具。如果你是用其他打包工具(如 Webpack ),解决思路相同,只需根据具体工具调整配置方式。如果你遇到类似问题,且确认代码本身无误,不妨尝试这种方法,或许能快速解决问题。