jQuery не определен в Magento 2 - PullRequest
       8

jQuery не определен в Magento 2

0 голосов
/ 09 октября 2019

Я создаю require.js файл в своей пользовательской теме, когда пытаюсь загрузить пользовательский js library.

CODE JS: (requirejs-config.js)

var config = {
    map: {
        '*': {
            'demo': 'js/vendor/demo/demo'
        }
    },

    deps: [
        'demo'
    ]
};

Я загружаю require.js и require-config.js в <head>

КОД XML: (default.xml)

<?xml version="1.0"?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
    <update handle="default_head_blocks"/>
    <body>
        <block name="require.js" class="Magento\Framework\View\Element\Template" template="Magento_Theme::page/js/require_js.phtml" />
    </body>
</page>

default_head_blocks.xml

<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
    <head>
        <meta name="format-detection" content="telephone=no"/>
        <link src="requirejs/require.js"/>
        <css src="css/styles-m.css"/>
        <css src="css/styles-l.css" media="screen and (min-width: 768px)"/>
        <css src="css/print.css" media="print"/>
    </head>

    <body>
        <referenceContainer name="after.body.start">
            <block class="Magento\RequireJs\Block\Html\Head\Config" name="requirejs-config"/>
        </referenceContainer>
    </body>
</page>

КОД PHTML: (require_js.phtml)

<script>
    var BASE_URL = '<?= $block->escapeUrl($block->getBaseUrl()) ?>';
    var require = {
        "baseUrl": "<?= $block->escapeUrl($block->getViewFileUrl('/')) ?>"
    };
</script>

Все в порядке, js файлызагружены, но проблема заключается в следующей ошибке, я получаю

ReferenceError: jQuery is not defined

порядок, в котором элементы загружены, я публикую на изображении ниже enter image description here.

Я не понимаю, почему возникает ошибка, jQuery объявлено раньше demo.js

Есть ли у вас какие-либо предложения по этой проблеме и как ее можно решить?

Спасибо!

1 Ответ

0 голосов
/ 14 октября 2019

В идеале загружаемые вами скрипты должны быть модулями, которые определяются вызовом define (). Тем не менее, вам может понадобиться использовать некоторые традиционные / устаревшие сценарии "globals для браузера", которые не выражают свои зависимости через define (). Для них вы можете использовать конфигурацию shim. Чтобы правильно выразить свои зависимости. Вам необходимо добавить зависимость jQuery в конфигурацию shim в файле require.js следующим образом:

 var config = {
    map: {
        '*': {
            'demo': 'js/vendor/demo/demo'
        }
    },
   shim: {
        demo: {
            deps: ['jquery']
        }
    }
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...