javascript - 如何使用 RequireJS 所需的库
问题描述
我尝试使用REQUIREJS导入MQTT ,但出现错误:
未捕获的 ReferenceError:未定义 mqtt
我尝试运行的代码位于 HTML 文件中:
HTML
<script>
require(["https://unpkg.com/mqtt@3.0.0/dist/mqtt.min.js"], function (mqtt) {
console.log("Libraries loaded");
})
</script>
<script src="../text-to-speech/sub_mqtt.js"></script>
sub_mqtt
//MQTT Connection
function mqtt_connect() {
//var mqtt = require('mqtt'); // Should I use it?
var client = mqtt.connect({ host: 'test', port: port })
var topic = 'mytopic'
client.on('message', (topic, message) => {
});
client.on('connect', () => {
client.subscribe(topic);
console.log("Connected!")
});
};
mqtt_connect();
我知道如果我将此代码复制到第一个script
回调中,我会解决错误,但我想在不同的文件中执行它以避免过度拥挤 HTML。
解决方案
RequireJS 是异步模块加载器,所以你的加载方法是错误的,因为你不能保证 mqtt 会在你的脚本之前被加载。
为确保您的代码在 mqtt 加载后执行,您必须将其作为回调传递给 RequireJS。首先,将您的 HTML 代码修改为:
<script src="../text-to-speech/sub_mqtt.js"></script>
然后编辑您的sub_mqtt
脚本并确保您的代码是对 RequireJS 的回调:
require(['https://unpkg.com/mqtt@3.0.0/dist/mqtt.min.js'], function (mqtt) {
var client = mqtt.connect({ host: 'test', port: port })
var topic = 'mytopic'
client.on('message', (topic, message) => {
});
client.on('connect', () => {
client.subscribe(topic);
console.log("Connected!")
});
});
推荐阅读
- php - 在 mySQL 数据库中使用引导程序发送图像的地址
- java - Elasticsearch High Level Rest Client Java 排序无法正常工作
- html - 当我在框外或Angular 4框内单击时隐藏覆盖面板
- c++ - VS2008 SP1:将一对推入向量时没有适当的默认构造函数可用
- c# - 如果在 Web 应用程序中创建,我们可以在不同的端口上托管 WCF 服务吗?
- php - 如何在会话 laravel 5.6 中简单地存储多数组
- c - 在linux中将.a文件与.so共享库文件绑定
- linux - 使用 sed 在特定行之后附加 HTML 代码块
- python - 名称“simStatus”未定义
- hyperledger-fabric - 错误:2 未知:访问被拒绝:频道 [contentbackchainchannel] 创建者组织