如何彻底移除项目中sockjs-node并定位相关socket依赖来源
依赖来源说明
你在node_modules里看到的sockjs-node、faye-websocket、websocket-driver、websocket-extensions等socket相关包,全部是webpack-dev-server@3.11.0的间接依赖。
webpack-dev-server v3版本默认使用sockjs实现开发环境下的热更新(HMR)、编译状态实时推送功能,sockjs本身的依赖链会引入上述所有websocket相关包。哪怕你业务代码里完全没有写socket相关逻辑,只要安装了这个版本的webpack-dev-server,包管理器就会自动把这些依赖拉到本地,只删除lock文件重装不会有任何变化。
运行时出现的http://localhost:8080/sockjs-node/info?t=xxx请求,也是webpack-dev-server默认注入到页面的sockjs客户端发起的,用来和本地开发服务建立通信连接,和你之前写的业务socket代码无关。
彻底移除sockjs相关内容的操作步骤
- 第一步:修改webpack配置中的devServer字段,把开发服务的通信模式切换为你正在使用的SSE模式,不再加载sockjs相关逻辑,配置参考如下:
// webpack.config.js 中的devServer配置段 module.exports = { // ...其他配置 devServer: { // 将通信模式设置为SSE,替代默认的sockjs transportMode: 'sse', // 如果你完全不需要热更新、编译状态实时推送功能,可以打开下面两行配置,彻底关闭客户端脚本注入 // inline: false, // hot: false, // ...其他原有devServer配置 } }
- 第二步:清理残留依赖文件
- 手动删除整个
node_modules目录 - 删除项目下的包管理器lock文件(用npm就删
package-lock.json,用yarn就删yarn.lock,用pnpm就删pnpm-lock.yaml) - 全局搜索项目业务代码、webpack配置文件,把之前接入socket服务时手动写的
sockjs、websocket相关的import/require语句、配置项全部删除 - 重新执行依赖安装命令(
npm install/yarn install/pnpm install)
- 手动删除整个
- 可选方案:如果后续有升级webpack5的计划,可以把webpack-dev-server升级到v4+版本,该版本不再强制内置sockjs作为默认通信依赖,可更灵活地裁剪不需要的依赖包,不过该方案需要同步调整webpack及配套loader、plugin的版本适配,改造成本较高。
操作完成后重新启动开发服务,就不会再出现sockjs相关的请求,node_modules里也不会再残留sockjs-node相关的依赖包。
内容的提问来源于stack exchange,提问作者Newbie_developer
相关产品推荐
相关产品推荐

