Как использовать библиотеки, которые требовались RequireJS - PullRequest
0 голосов
/ 24 апреля 2020

Я попытался импортировать MQTT , используя REQUIRE JS, но получаю ошибку:

Uncaught 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.

1 Ответ

1 голос
/ 28 апреля 2020

Require JS isyn c загрузчик модулей, поэтому ваш метод загрузки неверен, потому что вы не можете гарантировать, что mqtt будет загружен перед вашим скриптом.

Чтобы убедиться, что ваш код будет выполняется после загрузки mqtt, вы должны передать его как обратный вызов Require JS. Сначала измените код HTML на:

<script src="../text-to-speech/sub_mqtt.js"></script>

Затем отредактируйте сценарий sub_mqtt и убедитесь, что ваш код является обратным вызовом Require JS:

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!")
    });
});
...