Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

提一个非常实用的小建议:剔除socket.io-client依赖。 #111

Open
gooogirl opened this issue Dec 7, 2023 · 2 comments
Open

Comments

@gooogirl
Copy link

gooogirl commented Dec 7, 2023

我阅读了此项目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中的

module.exports = require('socket.io-client')

再重新编译打包,生成新的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
  }
})
@gooogirl
Copy link
Author

gooogirl commented Dec 7, 2023

关闭

@gongzili456
Copy link
Member

是否可以提个 PR 呢?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants