修改mqtt.js项目
MQTT.js项目是目前实现的比较好的JavaScript mqtt客户端实现,支持nodejs、浏览器、微信小程序、支付宝小程序,而且还支持mqtt 5,但毕竟是老外在维护,对小程序没那么重视,下面我们来下载项目代码自己修改。
请先确保电脑上安装了nodejs、git。
下载项目源码
可以用
git clone https://github.com/mqttjs/MQTT.js.git
也可以去项目主页 https://github.com/mqttjs/MQTT.js 下载
下载好解压后进入项目目录 MQTT.js,执行 npm install 安装依赖
如果没有任何错误,就说明依赖安装好了。
1)用喜欢的编辑器打开目录,我用sublime text,打开 MQTT.js/lib/connect/index.js
找到
这里 if 语句判断 ((typeof process !== 'undefined' && process.title !== 'browser') || typeof __webpack_require__ !== 'function') 如果为假才引入wx、wxs、ali、alis协议,在小程序里这个else得不到执行。
但是 typeof process !== 'undefined' 是false,(typeof process !== 'undefined' && process.title !== 'browser')就是false,会判断后面的 typeof __webpack_require__ !== 'function',这个是true,因为__webpack_require__是undefined
所以这里要修改为
这样直接判断前缀就行了,wx这个前缀目前只有微信小程序有,my只有支付宝小程序有。
改完之后就支持wxs协议了。
2)还是在这个文件 MQTT.js/lib/connect/index.js
在第4行 var Store = require('../store') 下面添加
var Buffer = require('buffer/').Buffer
在文件末尾添加 module.exports.Buffer = Buffer
这么做的目的是让小程序支持Buffer
3)继续打开 MQTT.js/node_modules/mqtt-packet/writeToStream.js
在大概804行的 writeVarByteInt 方法里,修改:
return stream.write(buffer)
为
return stream.write(Buffer.from(buffer))
因为这里的buffer是个Uint8Array类型,写入stream有问题。
最后我们在项目目录执行
npm run browser-build
打包生成一个库文件供我们在小程序里使用。
执行完成后会在当前目录生成dist目录,里边包含了mqtt.js和mqtt.min.js,mqtt.min.js是压缩过的,在生产环境最好使用这个,毕竟小程序对大小有限制。
最后我们把mqtt.min.js复制到小程序的utils目录