├── .gitignore ├── .hbuilderx └── launch.json ├── App.vue ├── README.md ├── index.html ├── lib └── mqttTool.js ├── main.js ├── manifest.json ├── package-lock.json ├── package.json ├── pages.json ├── pages ├── home │ └── Home.vue └── index │ └── index.vue ├── static └── logo.png └── uni.scss /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | unpackage 4 | /dist 5 | 6 | # local env files 7 | .env.local 8 | .env.*.local 9 | 10 | # Log files 11 | npm-debug.log* 12 | yarn-debug.log* 13 | yarn-error.log* 14 | pnpm-debug.log* 15 | 16 | # Editor directories and files 17 | .idea 18 | .vscode 19 | *.suo 20 | *.ntvs* 21 | *.njsproj 22 | *.sln 23 | *.sw? 24 | -------------------------------------------------------------------------------- /.hbuilderx/launch.json: -------------------------------------------------------------------------------- 1 | { // launch.json 配置了启动调试时相关设置,configurations下节点名称可为 app-plus/h5/mp-weixin/mp-baidu/mp-alipay/mp-qq/mp-toutiao/mp-360/ 2 | // launchtype项可配置值为local或remote, local代表前端连本地云函数,remote代表前端连云端云函数 3 | "version": "0.0", 4 | "configurations": [{ 5 | "app-plus" : 6 | { 7 | "launchtype" : "local" 8 | }, 9 | "default" : 10 | { 11 | "launchtype" : "local" 12 | }, 13 | "type" : "uniCloud" 14 | } 15 | ] 16 | } 17 | -------------------------------------------------------------------------------- /App.vue: -------------------------------------------------------------------------------- 1 | 14 | 15 | 18 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # MQTT 演示及调试demo 2 | 3 | 仅作为供MQTT初试者参考范例 4 | 5 | --- 6 | 7 | ## 如何使用 8 | 9 | - 下载项目代码 10 | - npm install 安装mqtt.js包 11 | - HbuilderX运行项目即可(请先替换配置中mqtt的connect地址为你个人地址) 12 | 13 | ### 1. 代码示例[mqttTool.js] 14 | 15 | - mqttTool为个人处理工具 16 | 17 | ```js 18 | var mqtt = require('mqtt/dist/mqtt.js') 19 | 20 | let mqttTool = { 21 | client: null 22 | } 23 | 24 | mqttTool.connect = function(params){ 25 | let options = { 26 | clientId: params.clientId, 27 | username: params.username, 28 | password: params.password, 29 | clean: params.clean, 30 | connectTimeout: 600000, 31 | cleanSession: false 32 | } 33 | let client = mqtt.connect(params.url, options); 34 | mqttTool.client = client 35 | return client; 36 | } 37 | 38 | mqttTool.end = function(){ 39 | return new Promise((resolve, reject) => { 40 | if(mqttTool.client == null){ 41 | resolve('未连接') 42 | console.log('App_text' + ":end 未连接") 43 | return; 44 | } 45 | mqttTool.client.end() 46 | mqttTool.client = null 47 | resolve('连接终止') 48 | }) 49 | } 50 | 51 | mqttTool.reconnect = function(){ 52 | return new Promise((resolve, reject) => { 53 | if(mqttTool.client == null){ 54 | resolve('未连接') 55 | console.log('App_text' + ":reconnect 未连接") 56 | return; 57 | } 58 | mqttTool.client.reconnect() 59 | }) 60 | } 61 | 62 | mqttTool.subscribe = function(params){ 63 | return new Promise((resolve, reject) => { 64 | if(mqttTool.client == null){ 65 | resolve('未连接') 66 | console.log('App_text' + ":unconnect 未连接") 67 | return; 68 | } 69 | mqttTool.client.subscribe(params.topic, {qos:params.qos}, function(err,res) { 70 | console.log(err,res) 71 | if (!err && res.length>0) { 72 | resolve('订阅成功') 73 | console.log('App_text' + ":subscribe success 订阅成功") 74 | }else{ 75 | resolve('订阅失败') 76 | console.log('App_text' + ":subscribe failed 订阅失败") 77 | return; 78 | } 79 | }) 80 | }) 81 | } 82 | 83 | mqttTool.unsubscribe = function(params){ 84 | return new Promise((resolve, reject) => { 85 | if(mqttTool.client == null){ 86 | resolve('未连接') 87 | console.log('App_text' + ":unconnect 未连接") 88 | return; 89 | } 90 | mqttTool.client.unsubscribe(params.topic, function(err) { 91 | if (!err) { 92 | resolve('取消订阅成功') 93 | console.log('App_text' + ":unsubscribe success 取消订阅成功") 94 | }else{ 95 | resolve('取消订阅失败') 96 | console.log('App_text' + ":unsubscribe failed 取消订阅失败") 97 | return; 98 | } 99 | }) 100 | }) 101 | } 102 | 103 | mqttTool.publish = function(params){ 104 | return new Promise((resolve, reject) => { 105 | if(mqttTool.client == null){ 106 | resolve('未连接') 107 | console.log('App_text' + ":unconnect 未连接") 108 | return; 109 | } 110 | mqttTool.client.publish(params.topic, params.message, function(err){ 111 | if (!err) { 112 | resolve(params.topic + '-' + params.message + '-发送成功') 113 | console.log('App_text' + ":publish success 发送成功") 114 | }else{ 115 | resolve(params.topic + '-' + params.message + '-发送失败') 116 | console.log('App_text' + ":publish failed 发送失败") 117 | return; 118 | } 119 | }) 120 | }) 121 | } 122 | 123 | export default mqttTool 124 | ``` 125 | 126 | ### 2. 代码示例[main.js] 127 | 128 | - 使用范例 129 | ```js 130 | import mqttTool from './lib/mqttTool.js' 131 | Vue.prototype.$mqttTool = mqttTool 132 | ``` 133 | 134 | 135 | ### 3. 代码示例[index.vue] 136 | 137 | - 使用范例 138 | ```js 139 | /* 连接 */ 140 | async startConnect(){ 141 | var _this = this 142 | let opts = { 143 | url: 'wx://192.168.1.131:8083/mqtt', 144 | clientId: this.connectInfo.clientId, 145 | username: this.connectInfo.username, 146 | password: this.connectInfo.password, 147 | clean: this.connectInfo.clean 148 | } 149 | var client = await this.$mqttTool.connect(opts); 150 | client.on('connect', function(res) { 151 | _this.logs.unshift({option:'mqtt:', log:'连接成功'}) 152 | }) 153 | client.on('reconnect', function(res) { 154 | _this.logs.unshift({option:'mqtt:', log:'重新连接'}) 155 | }) 156 | client.on('error', function(res) { 157 | _this.logs.unshift({option:'mqtt:', log:'连接错误'}) 158 | }) 159 | client.on('close', function(res) { 160 | _this.logs.unshift({option:'mqtt:', log:'关闭成功'}) 161 | }) 162 | client.on('message', function(topic, message, buffer) { 163 | if(_this.isBuffer){ 164 | _this.logs.unshift({option:topic+' buffer:', log: JSON.stringify(buffer)}) 165 | } 166 | _this.logs.unshift({option:topic+' message:' + buffer.messageId, log: message.toString()}) 167 | }) 168 | }, 169 | ``` 170 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /lib/mqttTool.js: -------------------------------------------------------------------------------- 1 | /* main.js 项目主入口注入实例 */ 2 | // import mqttTool from './lib/mqttTool.js' 3 | // Vue.prototype.$mqttTool = mqttTool 4 | 5 | /* 使用范例见 /pages/index/index.vue */ 6 | // mqtt协议:H5使用ws/wss APP-PLUS使用wx/wxs 7 | 8 | var mqtt = require('mqtt/dist/mqtt.js') 9 | 10 | let mqttTool = { 11 | client: null 12 | } 13 | 14 | mqttTool.connect = function(params){ 15 | let options = { 16 | clientId: params.clientId, 17 | username: params.username, 18 | password: params.password, 19 | clean: params.clean, 20 | connectTimeout: 600000, 21 | cleanSession: false 22 | } 23 | let client = mqtt.connect(params.url, options); 24 | mqttTool.client = client 25 | return client; 26 | } 27 | 28 | mqttTool.end = function(){ 29 | return new Promise((resolve, reject) => { 30 | if(mqttTool.client == null){ 31 | resolve('未连接') 32 | console.log('App_text' + ":end 未连接") 33 | return; 34 | } 35 | mqttTool.client.end() 36 | mqttTool.client = null 37 | resolve('连接终止') 38 | }) 39 | } 40 | 41 | mqttTool.reconnect = function(){ 42 | return new Promise((resolve, reject) => { 43 | if(mqttTool.client == null){ 44 | resolve('未连接') 45 | console.log('App_text' + ":reconnect 未连接") 46 | return; 47 | } 48 | mqttTool.client.reconnect() 49 | }) 50 | } 51 | 52 | mqttTool.subscribe = function(params){ 53 | return new Promise((resolve, reject) => { 54 | if(mqttTool.client == null){ 55 | resolve('未连接') 56 | console.log('App_text' + ":unconnect 未连接") 57 | return; 58 | } 59 | mqttTool.client.subscribe(params.topic, {qos:params.qos}, function(err,res) { 60 | console.log(err,res) 61 | if (!err && res.length>0) { 62 | resolve('订阅成功') 63 | console.log('App_text' + ":subscribe success 订阅成功") 64 | }else{ 65 | resolve('订阅失败') 66 | console.log('App_text' + ":subscribe failed 订阅失败") 67 | return; 68 | } 69 | }) 70 | }) 71 | } 72 | 73 | mqttTool.unsubscribe = function(params){ 74 | return new Promise((resolve, reject) => { 75 | if(mqttTool.client == null){ 76 | resolve('未连接') 77 | console.log('App_text' + ":unconnect 未连接") 78 | return; 79 | } 80 | mqttTool.client.unsubscribe(params.topic, function(err) { 81 | if (!err) { 82 | resolve('取消订阅成功') 83 | console.log('App_text' + ":unsubscribe success 取消订阅成功") 84 | }else{ 85 | resolve('取消订阅失败') 86 | console.log('App_text' + ":unsubscribe failed 取消订阅失败") 87 | return; 88 | } 89 | }) 90 | }) 91 | } 92 | 93 | mqttTool.publish = function(params){ 94 | return new Promise((resolve, reject) => { 95 | if(mqttTool.client == null){ 96 | resolve('未连接') 97 | console.log('App_text' + ":unconnect 未连接") 98 | return; 99 | } 100 | mqttTool.client.publish(params.topic, params.message, function(err){ 101 | if (!err) { 102 | resolve(params.topic + '-' + params.message + '-发送成功') 103 | console.log('App_text' + ":publish success 发送成功") 104 | }else{ 105 | resolve(params.topic + '-' + params.message + '-发送失败') 106 | console.log('App_text' + ":publish failed 发送失败") 107 | return; 108 | } 109 | }) 110 | }) 111 | } 112 | 113 | export default mqttTool 114 | -------------------------------------------------------------------------------- /main.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import App from './App' 3 | 4 | import mqttTool from './lib/mqttTool.js' 5 | Vue.prototype.$mqttTool = mqttTool 6 | 7 | Vue.config.productionTip = false 8 | App.mpType = 'app' 9 | const app = new Vue({ 10 | ...App 11 | }) 12 | app.$mount() -------------------------------------------------------------------------------- /manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name" : "MQTT", 3 | "appid" : "__UNI__EB874D4", 4 | "description" : "", 5 | "versionName" : "1.0.0", 6 | "versionCode" : "100", 7 | "transformPx" : false, 8 | /* 5+App特有相关 */ 9 | "app-plus" : { 10 | "usingComponents" : true, 11 | "nvueStyleCompiler" : "uni-app", 12 | "compilerVersion" : 3, 13 | "splashscreen" : { 14 | "alwaysShowBeforeRender" : true, 15 | "waiting" : true, 16 | "autoclose" : true, 17 | "delay" : 0 18 | }, 19 | /* 模块配置 */ 20 | "modules" : {}, 21 | /* 应用发布信息 */ 22 | "distribute" : { 23 | /* android打包配置 */ 24 | "android" : { 25 | "permissions" : [ 26 | "", 27 | "", 28 | "", 29 | "", 30 | "", 31 | "", 32 | "", 33 | "", 34 | "", 35 | "", 36 | "", 37 | "", 38 | "", 39 | "", 40 | "" 41 | ] 42 | }, 43 | /* ios打包配置 */ 44 | "ios" : {}, 45 | /* SDK配置 */ 46 | "sdkConfigs" : {} 47 | } 48 | }, 49 | /* 快应用特有相关 */ 50 | "quickapp" : {}, 51 | /* 小程序特有相关 */ 52 | "mp-weixin" : { 53 | "appid" : "", 54 | "setting" : { 55 | "urlCheck" : false 56 | }, 57 | "usingComponents" : true 58 | }, 59 | "mp-alipay" : { 60 | "usingComponents" : true 61 | }, 62 | "mp-baidu" : { 63 | "usingComponents" : true 64 | }, 65 | "mp-toutiao" : { 66 | "usingComponents" : true 67 | }, 68 | "uniStatistics" : { 69 | "enable" : false 70 | }, 71 | "vueVersion" : "2" 72 | } 73 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "demo", 3 | "version": "1.0.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "async-limiter": { 8 | "version": "1.0.1", 9 | "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", 10 | "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" 11 | }, 12 | "balanced-match": { 13 | "version": "1.0.2", 14 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 15 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" 16 | }, 17 | "base64-js": { 18 | "version": "1.5.1", 19 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", 20 | "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" 21 | }, 22 | "bl": { 23 | "version": "4.1.0", 24 | "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", 25 | "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", 26 | "requires": { 27 | "buffer": "^5.5.0", 28 | "inherits": "^2.0.4", 29 | "readable-stream": "^3.4.0" 30 | }, 31 | "dependencies": { 32 | "readable-stream": { 33 | "version": "3.6.0", 34 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", 35 | "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", 36 | "requires": { 37 | "inherits": "^2.0.3", 38 | "string_decoder": "^1.1.1", 39 | "util-deprecate": "^1.0.1" 40 | } 41 | } 42 | } 43 | }, 44 | "brace-expansion": { 45 | "version": "1.1.11", 46 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 47 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 48 | "requires": { 49 | "balanced-match": "^1.0.0", 50 | "concat-map": "0.0.1" 51 | } 52 | }, 53 | "buffer": { 54 | "version": "5.7.1", 55 | "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", 56 | "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", 57 | "requires": { 58 | "base64-js": "^1.3.1", 59 | "ieee754": "^1.1.13" 60 | } 61 | }, 62 | "buffer-from": { 63 | "version": "1.1.2", 64 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", 65 | "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" 66 | }, 67 | "callback-stream": { 68 | "version": "1.1.0", 69 | "resolved": "https://registry.npmjs.org/callback-stream/-/callback-stream-1.1.0.tgz", 70 | "integrity": "sha512-sAZ9kODla+mGACBZ1IpTCAisKoGnv6PykW7fPk1LrM+mMepE18Yz0515yoVcrZy7dQsTUp3uZLQ/9Sx1RnLoHw==", 71 | "requires": { 72 | "inherits": "^2.0.1", 73 | "readable-stream": "> 1.0.0 < 3.0.0" 74 | } 75 | }, 76 | "commist": { 77 | "version": "1.1.0", 78 | "resolved": "https://registry.npmjs.org/commist/-/commist-1.1.0.tgz", 79 | "integrity": "sha512-rraC8NXWOEjhADbZe9QBNzLAN5Q3fsTPQtBV+fEVj6xKIgDgNiEVE6ZNfHpZOqfQ21YUzfVNUXLOEZquYvQPPg==", 80 | "requires": { 81 | "leven": "^2.1.0", 82 | "minimist": "^1.1.0" 83 | } 84 | }, 85 | "concat-map": { 86 | "version": "0.0.1", 87 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 88 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" 89 | }, 90 | "concat-stream": { 91 | "version": "1.6.2", 92 | "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", 93 | "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", 94 | "requires": { 95 | "buffer-from": "^1.0.0", 96 | "inherits": "^2.0.3", 97 | "readable-stream": "^2.2.2", 98 | "typedarray": "^0.0.6" 99 | } 100 | }, 101 | "core-util-is": { 102 | "version": "1.0.3", 103 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", 104 | "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" 105 | }, 106 | "d": { 107 | "version": "1.0.1", 108 | "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", 109 | "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", 110 | "requires": { 111 | "es5-ext": "^0.10.50", 112 | "type": "^1.0.1" 113 | } 114 | }, 115 | "debug": { 116 | "version": "4.3.4", 117 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", 118 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", 119 | "requires": { 120 | "ms": "2.1.2" 121 | } 122 | }, 123 | "duplexify": { 124 | "version": "3.7.1", 125 | "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", 126 | "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", 127 | "requires": { 128 | "end-of-stream": "^1.0.0", 129 | "inherits": "^2.0.1", 130 | "readable-stream": "^2.0.0", 131 | "stream-shift": "^1.0.0" 132 | } 133 | }, 134 | "end-of-stream": { 135 | "version": "1.4.4", 136 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", 137 | "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", 138 | "requires": { 139 | "once": "^1.4.0" 140 | } 141 | }, 142 | "es5-ext": { 143 | "version": "0.10.61", 144 | "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.61.tgz", 145 | "integrity": "sha512-yFhIqQAzu2Ca2I4SE2Au3rxVfmohU9Y7wqGR+s7+H7krk26NXhIRAZDgqd6xqjCEFUomDEA3/Bo/7fKmIkW1kA==", 146 | "requires": { 147 | "es6-iterator": "^2.0.3", 148 | "es6-symbol": "^3.1.3", 149 | "next-tick": "^1.1.0" 150 | } 151 | }, 152 | "es6-iterator": { 153 | "version": "2.0.3", 154 | "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", 155 | "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", 156 | "requires": { 157 | "d": "1", 158 | "es5-ext": "^0.10.35", 159 | "es6-symbol": "^3.1.1" 160 | } 161 | }, 162 | "es6-map": { 163 | "version": "0.1.5", 164 | "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", 165 | "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", 166 | "requires": { 167 | "d": "1", 168 | "es5-ext": "~0.10.14", 169 | "es6-iterator": "~2.0.1", 170 | "es6-set": "~0.1.5", 171 | "es6-symbol": "~3.1.1", 172 | "event-emitter": "~0.3.5" 173 | } 174 | }, 175 | "es6-set": { 176 | "version": "0.1.5", 177 | "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", 178 | "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", 179 | "requires": { 180 | "d": "1", 181 | "es5-ext": "~0.10.14", 182 | "es6-iterator": "~2.0.1", 183 | "es6-symbol": "3.1.1", 184 | "event-emitter": "~0.3.5" 185 | }, 186 | "dependencies": { 187 | "es6-symbol": { 188 | "version": "3.1.1", 189 | "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", 190 | "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", 191 | "requires": { 192 | "d": "1", 193 | "es5-ext": "~0.10.14" 194 | } 195 | } 196 | } 197 | }, 198 | "es6-symbol": { 199 | "version": "3.1.3", 200 | "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", 201 | "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", 202 | "requires": { 203 | "d": "^1.0.1", 204 | "ext": "^1.1.2" 205 | } 206 | }, 207 | "event-emitter": { 208 | "version": "0.3.5", 209 | "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", 210 | "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", 211 | "requires": { 212 | "d": "1", 213 | "es5-ext": "~0.10.14" 214 | } 215 | }, 216 | "ext": { 217 | "version": "1.6.0", 218 | "resolved": "https://registry.npmjs.org/ext/-/ext-1.6.0.tgz", 219 | "integrity": "sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg==", 220 | "requires": { 221 | "type": "^2.5.0" 222 | }, 223 | "dependencies": { 224 | "type": { 225 | "version": "2.6.0", 226 | "resolved": "https://registry.npmjs.org/type/-/type-2.6.0.tgz", 227 | "integrity": "sha512-eiDBDOmkih5pMbo9OqsqPRGMljLodLcwd5XD5JbtNB0o89xZAwynY9EdCDsJU7LtcVCClu9DvM7/0Ep1hYX3EQ==" 228 | } 229 | } 230 | }, 231 | "extend": { 232 | "version": "3.0.2", 233 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", 234 | "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" 235 | }, 236 | "fs.realpath": { 237 | "version": "1.0.0", 238 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 239 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" 240 | }, 241 | "glob": { 242 | "version": "7.2.3", 243 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", 244 | "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", 245 | "requires": { 246 | "fs.realpath": "^1.0.0", 247 | "inflight": "^1.0.4", 248 | "inherits": "2", 249 | "minimatch": "^3.1.1", 250 | "once": "^1.3.0", 251 | "path-is-absolute": "^1.0.0" 252 | } 253 | }, 254 | "glob-parent": { 255 | "version": "3.1.0", 256 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", 257 | "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", 258 | "requires": { 259 | "is-glob": "^3.1.0", 260 | "path-dirname": "^1.0.0" 261 | } 262 | }, 263 | "glob-stream": { 264 | "version": "6.1.0", 265 | "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz", 266 | "integrity": "sha1-cEXJlBOz65SIjYOrRtC0BMx73eQ=", 267 | "requires": { 268 | "extend": "^3.0.0", 269 | "glob": "^7.1.1", 270 | "glob-parent": "^3.1.0", 271 | "is-negated-glob": "^1.0.0", 272 | "ordered-read-streams": "^1.0.0", 273 | "pumpify": "^1.3.5", 274 | "readable-stream": "^2.1.5", 275 | "remove-trailing-separator": "^1.0.1", 276 | "to-absolute-glob": "^2.0.0", 277 | "unique-stream": "^2.0.2" 278 | } 279 | }, 280 | "help-me": { 281 | "version": "1.1.0", 282 | "resolved": "https://registry.npmjs.org/help-me/-/help-me-1.1.0.tgz", 283 | "integrity": "sha1-jy1QjQYAtKRW2i8IZVbn5cBWo8Y=", 284 | "requires": { 285 | "callback-stream": "^1.0.2", 286 | "glob-stream": "^6.1.0", 287 | "through2": "^2.0.1", 288 | "xtend": "^4.0.0" 289 | } 290 | }, 291 | "ieee754": { 292 | "version": "1.2.1", 293 | "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", 294 | "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" 295 | }, 296 | "inflight": { 297 | "version": "1.0.6", 298 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 299 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 300 | "requires": { 301 | "once": "^1.3.0", 302 | "wrappy": "1" 303 | } 304 | }, 305 | "inherits": { 306 | "version": "2.0.4", 307 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 308 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 309 | }, 310 | "is-absolute": { 311 | "version": "1.0.0", 312 | "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", 313 | "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", 314 | "requires": { 315 | "is-relative": "^1.0.0", 316 | "is-windows": "^1.0.1" 317 | } 318 | }, 319 | "is-extglob": { 320 | "version": "2.1.1", 321 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 322 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" 323 | }, 324 | "is-glob": { 325 | "version": "3.1.0", 326 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", 327 | "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", 328 | "requires": { 329 | "is-extglob": "^2.1.0" 330 | } 331 | }, 332 | "is-negated-glob": { 333 | "version": "1.0.0", 334 | "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz", 335 | "integrity": "sha1-aRC8pdqMleeEtXUbl2z1oQ/uNtI=" 336 | }, 337 | "is-relative": { 338 | "version": "1.0.0", 339 | "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", 340 | "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", 341 | "requires": { 342 | "is-unc-path": "^1.0.0" 343 | } 344 | }, 345 | "is-unc-path": { 346 | "version": "1.0.0", 347 | "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", 348 | "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", 349 | "requires": { 350 | "unc-path-regex": "^0.1.2" 351 | } 352 | }, 353 | "is-windows": { 354 | "version": "1.0.2", 355 | "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", 356 | "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" 357 | }, 358 | "isarray": { 359 | "version": "1.0.0", 360 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 361 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" 362 | }, 363 | "json-stable-stringify-without-jsonify": { 364 | "version": "1.0.1", 365 | "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", 366 | "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=" 367 | }, 368 | "leven": { 369 | "version": "2.1.0", 370 | "resolved": "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz", 371 | "integrity": "sha1-wuep93IJTe6dNCAq6KzORoeHVYA=" 372 | }, 373 | "minimatch": { 374 | "version": "3.1.2", 375 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 376 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 377 | "requires": { 378 | "brace-expansion": "^1.1.7" 379 | } 380 | }, 381 | "minimist": { 382 | "version": "1.2.6", 383 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", 384 | "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" 385 | }, 386 | "mqtt": { 387 | "version": "3.0.0", 388 | "resolved": "https://registry.npmjs.org/mqtt/-/mqtt-3.0.0.tgz", 389 | "integrity": "sha512-0nKV6MAc1ibKZwaZQUTb3iIdT4NVpj541BsYrqrGBcQdQ7Jd0MnZD1/6/nj1UFdGTboK9ZEUXvkCu2nPCugHFA==", 390 | "requires": { 391 | "base64-js": "^1.3.0", 392 | "commist": "^1.0.0", 393 | "concat-stream": "^1.6.2", 394 | "end-of-stream": "^1.4.1", 395 | "es6-map": "^0.1.5", 396 | "help-me": "^1.0.1", 397 | "inherits": "^2.0.3", 398 | "minimist": "^1.2.0", 399 | "mqtt-packet": "^6.0.0", 400 | "pump": "^3.0.0", 401 | "readable-stream": "^2.3.6", 402 | "reinterval": "^1.1.0", 403 | "split2": "^3.1.0", 404 | "websocket-stream": "^5.1.2", 405 | "xtend": "^4.0.1" 406 | } 407 | }, 408 | "mqtt-packet": { 409 | "version": "6.10.0", 410 | "resolved": "https://registry.npmjs.org/mqtt-packet/-/mqtt-packet-6.10.0.tgz", 411 | "integrity": "sha512-ja8+mFKIHdB1Tpl6vac+sktqy3gA8t9Mduom1BA75cI+R9AHnZOiaBQwpGiWnaVJLDGRdNhQmFaAqd7tkKSMGA==", 412 | "requires": { 413 | "bl": "^4.0.2", 414 | "debug": "^4.1.1", 415 | "process-nextick-args": "^2.0.1" 416 | } 417 | }, 418 | "ms": { 419 | "version": "2.1.2", 420 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 421 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 422 | }, 423 | "next-tick": { 424 | "version": "1.1.0", 425 | "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", 426 | "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" 427 | }, 428 | "once": { 429 | "version": "1.4.0", 430 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 431 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 432 | "requires": { 433 | "wrappy": "1" 434 | } 435 | }, 436 | "ordered-read-streams": { 437 | "version": "1.0.1", 438 | "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz", 439 | "integrity": "sha1-d8DLN8QVJdZBZtmQ/61+xqDhNj4=", 440 | "requires": { 441 | "readable-stream": "^2.0.1" 442 | } 443 | }, 444 | "path-dirname": { 445 | "version": "1.0.2", 446 | "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", 447 | "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=" 448 | }, 449 | "path-is-absolute": { 450 | "version": "1.0.1", 451 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 452 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" 453 | }, 454 | "process-nextick-args": { 455 | "version": "2.0.1", 456 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", 457 | "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" 458 | }, 459 | "pump": { 460 | "version": "3.0.0", 461 | "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", 462 | "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", 463 | "requires": { 464 | "end-of-stream": "^1.1.0", 465 | "once": "^1.3.1" 466 | } 467 | }, 468 | "pumpify": { 469 | "version": "1.5.1", 470 | "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", 471 | "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", 472 | "requires": { 473 | "duplexify": "^3.6.0", 474 | "inherits": "^2.0.3", 475 | "pump": "^2.0.0" 476 | }, 477 | "dependencies": { 478 | "pump": { 479 | "version": "2.0.1", 480 | "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", 481 | "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", 482 | "requires": { 483 | "end-of-stream": "^1.1.0", 484 | "once": "^1.3.1" 485 | } 486 | } 487 | } 488 | }, 489 | "readable-stream": { 490 | "version": "2.3.7", 491 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", 492 | "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", 493 | "requires": { 494 | "core-util-is": "~1.0.0", 495 | "inherits": "~2.0.3", 496 | "isarray": "~1.0.0", 497 | "process-nextick-args": "~2.0.0", 498 | "safe-buffer": "~5.1.1", 499 | "string_decoder": "~1.1.1", 500 | "util-deprecate": "~1.0.1" 501 | } 502 | }, 503 | "reinterval": { 504 | "version": "1.1.0", 505 | "resolved": "https://registry.npmjs.org/reinterval/-/reinterval-1.1.0.tgz", 506 | "integrity": "sha1-M2Hs+jymwYKDOA3Qu5VG85D17Oc=" 507 | }, 508 | "remove-trailing-separator": { 509 | "version": "1.1.0", 510 | "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", 511 | "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" 512 | }, 513 | "safe-buffer": { 514 | "version": "5.1.2", 515 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 516 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 517 | }, 518 | "split2": { 519 | "version": "3.2.2", 520 | "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", 521 | "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", 522 | "requires": { 523 | "readable-stream": "^3.0.0" 524 | }, 525 | "dependencies": { 526 | "readable-stream": { 527 | "version": "3.6.0", 528 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", 529 | "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", 530 | "requires": { 531 | "inherits": "^2.0.3", 532 | "string_decoder": "^1.1.1", 533 | "util-deprecate": "^1.0.1" 534 | } 535 | } 536 | } 537 | }, 538 | "stream-shift": { 539 | "version": "1.0.1", 540 | "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", 541 | "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==" 542 | }, 543 | "string_decoder": { 544 | "version": "1.1.1", 545 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 546 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 547 | "requires": { 548 | "safe-buffer": "~5.1.0" 549 | } 550 | }, 551 | "through2": { 552 | "version": "2.0.5", 553 | "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", 554 | "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", 555 | "requires": { 556 | "readable-stream": "~2.3.6", 557 | "xtend": "~4.0.1" 558 | } 559 | }, 560 | "through2-filter": { 561 | "version": "3.0.0", 562 | "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-3.0.0.tgz", 563 | "integrity": "sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==", 564 | "requires": { 565 | "through2": "~2.0.0", 566 | "xtend": "~4.0.0" 567 | } 568 | }, 569 | "to-absolute-glob": { 570 | "version": "2.0.2", 571 | "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz", 572 | "integrity": "sha1-GGX0PZ50sIItufFFt4z/fQ98hJs=", 573 | "requires": { 574 | "is-absolute": "^1.0.0", 575 | "is-negated-glob": "^1.0.0" 576 | } 577 | }, 578 | "type": { 579 | "version": "1.2.0", 580 | "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", 581 | "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" 582 | }, 583 | "typedarray": { 584 | "version": "0.0.6", 585 | "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", 586 | "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" 587 | }, 588 | "ultron": { 589 | "version": "1.1.1", 590 | "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", 591 | "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==" 592 | }, 593 | "unc-path-regex": { 594 | "version": "0.1.2", 595 | "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", 596 | "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=" 597 | }, 598 | "unique-stream": { 599 | "version": "2.3.1", 600 | "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.3.1.tgz", 601 | "integrity": "sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A==", 602 | "requires": { 603 | "json-stable-stringify-without-jsonify": "^1.0.1", 604 | "through2-filter": "^3.0.0" 605 | } 606 | }, 607 | "util-deprecate": { 608 | "version": "1.0.2", 609 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 610 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" 611 | }, 612 | "websocket-stream": { 613 | "version": "5.5.2", 614 | "resolved": "https://registry.npmjs.org/websocket-stream/-/websocket-stream-5.5.2.tgz", 615 | "integrity": "sha512-8z49MKIHbGk3C4HtuHWDtYX8mYej1wWabjthC/RupM9ngeukU4IWoM46dgth1UOS/T4/IqgEdCDJuMe2039OQQ==", 616 | "requires": { 617 | "duplexify": "^3.5.1", 618 | "inherits": "^2.0.1", 619 | "readable-stream": "^2.3.3", 620 | "safe-buffer": "^5.1.2", 621 | "ws": "^3.2.0", 622 | "xtend": "^4.0.0" 623 | } 624 | }, 625 | "wrappy": { 626 | "version": "1.0.2", 627 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 628 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" 629 | }, 630 | "ws": { 631 | "version": "3.3.3", 632 | "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", 633 | "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", 634 | "requires": { 635 | "async-limiter": "~1.0.0", 636 | "safe-buffer": "~5.1.0", 637 | "ultron": "~1.1.0" 638 | } 639 | }, 640 | "xtend": { 641 | "version": "4.0.2", 642 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", 643 | "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" 644 | } 645 | } 646 | } 647 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "demo", 3 | "version": "1.0.0", 4 | "main": "main.js", 5 | "scripts": { 6 | "test": "echo \"Error: no test specified\" && exit 1" 7 | }, 8 | "author": "", 9 | "license": "ISC", 10 | "description": "", 11 | "dependencies": { 12 | "mqtt": "^3.0.0" 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /pages.json: -------------------------------------------------------------------------------- 1 | { 2 | "pages": [ 3 | { 4 | "path": "pages/home/Home", 5 | "style": { 6 | "navigationBarTitleText": "MQTT", 7 | "app-plus":{ 8 | "titleNView": false, 9 | "bounce":"none" 10 | } 11 | } 12 | }, 13 | { 14 | "path": "pages/index/index", 15 | "style": { 16 | "navigationBarTitleText": "MQTT", 17 | "app-plus":{ 18 | "bounce":"none" 19 | } 20 | } 21 | } 22 | ], 23 | "globalStyle": { 24 | "navigationBarTextStyle": "black", 25 | "navigationBarTitleText": "uni-app", 26 | "navigationBarBackgroundColor": "#FFFFFF", 27 | "backgroundColor": "#FFFFFF" 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /pages/home/Home.vue: -------------------------------------------------------------------------------- 1 | 68 | 69 | 244 | 245 | -------------------------------------------------------------------------------- /pages/index/index.vue: -------------------------------------------------------------------------------- 1 | 40 | 41 | 190 | 191 | 287 | -------------------------------------------------------------------------------- /static/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nameHulk/MQTT-uniapp/63159e5007cc1abfc86fc21782db3654a9579ab6/static/logo.png -------------------------------------------------------------------------------- /uni.scss: -------------------------------------------------------------------------------- 1 | /** 2 | * 这里是uni-app内置的常用样式变量 3 | * 4 | * uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量 5 | * 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App 6 | * 7 | */ 8 | 9 | /** 10 | * 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能 11 | * 12 | * 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件 13 | */ 14 | 15 | /* 颜色变量 */ 16 | 17 | /* 行为相关颜色 */ 18 | $uni-color-primary: #007aff; 19 | $uni-color-success: #4cd964; 20 | $uni-color-warning: #f0ad4e; 21 | $uni-color-error: #dd524d; 22 | 23 | /* 文字基本颜色 */ 24 | $uni-text-color:#333;//基本色 25 | $uni-text-color-inverse:#fff;//反色 26 | $uni-text-color-grey:#999;//辅助灰色,如加载更多的提示信息 27 | $uni-text-color-placeholder: #808080; 28 | $uni-text-color-disable:#c0c0c0; 29 | 30 | /* 背景颜色 */ 31 | $uni-bg-color:#ffffff; 32 | $uni-bg-color-grey:#f8f8f8; 33 | $uni-bg-color-hover:#f1f1f1;//点击状态颜色 34 | $uni-bg-color-mask:rgba(0, 0, 0, 0.4);//遮罩颜色 35 | 36 | /* 边框颜色 */ 37 | $uni-border-color:#c8c7cc; 38 | 39 | /* 尺寸变量 */ 40 | 41 | /* 文字尺寸 */ 42 | $uni-font-size-sm:12px; 43 | $uni-font-size-base:14px; 44 | $uni-font-size-lg:16; 45 | 46 | /* 图片尺寸 */ 47 | $uni-img-size-sm:20px; 48 | $uni-img-size-base:26px; 49 | $uni-img-size-lg:40px; 50 | 51 | /* Border Radius */ 52 | $uni-border-radius-sm: 2px; 53 | $uni-border-radius-base: 3px; 54 | $uni-border-radius-lg: 6px; 55 | $uni-border-radius-circle: 50%; 56 | 57 | /* 水平间距 */ 58 | $uni-spacing-row-sm: 5px; 59 | $uni-spacing-row-base: 10px; 60 | $uni-spacing-row-lg: 15px; 61 | 62 | /* 垂直间距 */ 63 | $uni-spacing-col-sm: 4px; 64 | $uni-spacing-col-base: 8px; 65 | $uni-spacing-col-lg: 12px; 66 | 67 | /* 透明度 */ 68 | $uni-opacity-disabled: 0.3; // 组件禁用态的透明度 69 | 70 | /* 文章场景相关 */ 71 | $uni-color-title: #2C405A; // 文章标题颜色 72 | $uni-font-size-title:20px; 73 | $uni-color-subtitle: #555555; // 二级标题颜色 74 | $uni-font-size-subtitle:26px; 75 | $uni-color-paragraph: #3F536E; // 文章段落颜色 76 | $uni-font-size-paragraph:15px; 77 | --------------------------------------------------------------------------------