Внешняя библиотека не работает после сборки приложения Sencha - PullRequest
0 голосов
/ 29 июня 2018

Я добавляю свою внешнюю библиотеку в app.json:

"js": [
    {
        "path": "app.js",
        "bundle": true
    },
    {
        "path": "https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js",
        "remote": true

    },
    {
        "path": "https://rawgit.com/darron1217/enjoyhint.js/master/dist/enjoyhint.js",
        "remote": true
    }
],

Когда я использую sencha app watch, все работает хорошо, но когда я строю свой проект в производстве, в браузере появляется ошибка: Uncaught ReferenceError: EnjoyHint is not defined.

1 Ответ

0 голосов
/ 30 июня 2018

Вам необходимо потребовать дополнительные ресурсы до app.js.

"js": [
    {
        "path": "https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js",
        "remote": true

    },
    {
        "path": "https://rawgit.com/darron1217/enjoyhint.js/master/dist/enjoyhint.js",
        "remote": true
    },
    {
        "path": "app.js",
        "bundle": true
    }
]

В режиме разработки дополнительные ресурсы каким-то образом загружаются перед классами, которые на них полагаются. В рабочем режиме файл app.js становится the container for all the concateted classes, и если вы загрузите его до дополнительных ресурсов, вы получите ошибки ссылки.

РЕДАКТИРОВАТЬ Mashup Mixin подход

Еще один подход, который мне действительно нравится в отношении загрузки дополнительных ресурсов, - это использование миксина Ext.mixin.Mashup .

Этот миксин позволяет пользователям легко запрашивать внешние скрипты в своих классы. Этот процесс загрузки задерживает запуск приложения (Ext.onReady) пока все такие скрипты не будут загружены, гарантируя, что ваш класс будет иметь доступ к необходимым сценариям с самого начала.

Основное использование:

Ext.define('EnjoyHint', {
    mixins: ['Ext.mixin.Mashup'],

    requiredScripts: [
        'https://rawgit.com/darron1217/enjoyhint.js/master/dist/enjoyhint.js'
    ],
    ...
});

Еще одна вещь, которую обеспечивает этот подход, как вы могли заметить, это то, что он позволяет вам определять внешнюю зависимость непосредственно внутри класса, который ее использует. Таким образом, если вам больше не нужен определенный класс и вы его удалите, вам не нужно беспокоиться о двойной проверке файла app.json, чтобы убедиться, что вы оставили все неиспользуемые зависимости.

...