Closed gooogirl closed 1 month ago
我阅读了此项目src下每个文件的每一行代码,得出一个简单的结论:
此项目入口文件只有一行代码:
module.exports = require('socket.io-client')
然后通过webpack配置,注入wx-ws.js
plugins: [ new webpack.NormalModuleReplacementPlugin(/^ws$/g, process.cwd() + '/src/wx-ws.js'), new webpack.NormalModuleReplacementPlugin(/^.\/transports\/index$/g, process.cwd() + '/src/transport.js'), ],
也就是说,socket.io-client导进来,又导出去,期间并未做任何东西。
而这个项目真正起作用的地方是wx-ws.js,里面对window.WebSocket(来自socket.io-client,并非原生的WebSocket)进行了拦截.
那么此处是完全可以把socket.io-client剔除,只保留wx-ws.js+transport.js相关代码。
从而让用户自行决定socket.io-client的版本,只需要在执行socket.io-client之前,先执行wx-ws.js即可。
之所以给出以上建议,是因为我测试了2.0/2.0.1/2.1.0/2.2.0 版本,只能链接,无法见听到事件。而2.2.1版本,由于使用了socket.io-client版本大于2.x ,而服务器用的socket.io是2.x所以客户端的版本必须小于3.x, 所以这个项目因为引入socket.io-client的版本变化,从而导致其他不兼容问题。
目前我的做法是,克隆了此项目,然后删除index.js中的
再重新编译打包,生成新的wxapp.socket.io.js 只有1kb。因此我命名为:wxapp.socket.io.pure.js
我在使用时,自行选择安装了socket.io-client@2.3.0 / 2.5.0 源码如下: index.html中加入:
<script src="xxx/xx/wxapp.socket.io.pure.js"></script>
代码中引入:
import io from 'socket.io-client' const socket = io('ws://xx:3000', { path: '/socket', query: { Authorization: token } })
关闭
是否可以提个 PR 呢?
我阅读了此项目src下每个文件的每一行代码,得出一个简单的结论:
此项目入口文件只有一行代码:
然后通过webpack配置,注入wx-ws.js
也就是说,socket.io-client导进来,又导出去,期间并未做任何东西。
而这个项目真正起作用的地方是wx-ws.js,里面对window.WebSocket(来自socket.io-client,并非原生的WebSocket)进行了拦截.
那么此处是完全可以把socket.io-client剔除,只保留wx-ws.js+transport.js相关代码。
从而让用户自行决定socket.io-client的版本,只需要在执行socket.io-client之前,先执行wx-ws.js即可。
之所以给出以上建议,是因为我测试了2.0/2.0.1/2.1.0/2.2.0 版本,只能链接,无法见听到事件。而2.2.1版本,由于使用了socket.io-client版本大于2.x ,而服务器用的socket.io是2.x所以客户端的版本必须小于3.x, 所以这个项目因为引入socket.io-client的版本变化,从而导致其他不兼容问题。
目前我的做法是,克隆了此项目,然后删除index.js中的
再重新编译打包,生成新的wxapp.socket.io.js 只有1kb。因此我命名为:wxapp.socket.io.pure.js
我在使用时,自行选择安装了socket.io-client@2.3.0 / 2.5.0 源码如下: index.html中加入:
代码中引入: