Как можно «определить» не определить при загрузке с помощью RequireJS?
-
20-12-2019 - |
Вопрос
Я изо всех сил пытаюсь понять, почему модуль, загруженный RequireJS, не имеет доступа к define
функция.
В моем HTML:
<script data-main="/assets/js/app/main.js" src="/assets/libs/require.js/2.1.9/require.js" type="text/javascript"></script>
В main.js
:
// Initialize Require.js
require.config({
baseUrl: 'http://test.dev/cart/assets',
paths: {
jquery: 'https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min'
}
});
// Main app logic
require( ['jquery',
'js/app/cart',
'js/app/wizard',
'js/lib/colorbox',
'js/lib/jvfloat'], function ($, Cart, Wizard, ColorBox, jvfloat) {
// Initialize Cart
Cart.init();
// Initialize Wizard
Wizard.init();
}
);
В этом, colorbox.js
загружается нормально и заворачивается так:
define(['jquery'], function ( jQuery ) {
// ...Colorbox code here
});
Когда он пытается загрузить jvfloat.js, он выдает:
Неперехваченная ошибка ссылки:определить не определено
Несмотря на то, что он обернут точный та же оболочка, что и colorbox.
я даже пытался добавление прокладки (хотя это не имеет смысла), чтобы посмотреть, смогу ли я усилить нагрузку... но это тоже не сработало:
shim: {
'jvfloat': {
deps: ['require','jquery'],
exports: 'jvfloat'
}
}
Я также попробовал удалить define
обертку и установил мою прокладку вот так, вот как документация предлагает это сделать:
shim: {
'jvfloat': {
deps: ['jquery'],
exports: 'jQuery.fn.jvfloat'
}
}
ТЛ;ДР; Что может привести к тому, что библиотека, загружаемая RequireJS, не будет иметь доступа к define
функция?
Решение
Хорошо, я нашел обходной путь, используя прокладка часть конфигурации RequireJS.То, что я пробовал раньше, использовал jvfloat
в качестве ключа массива, когда я должен был использовать его целиком.Итак, это работает:
require.config({
baseUrl: 'http://test.dev/cart/assets',
paths: {
jquery: 'https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min'
},
shim: {
'js/lib/jvfloat': {
deps: ['jquery'],
exports: 'jQuery.fn.jvfloat'
}
}
});
До сих пор понятия не имею, как использовать define
для чего-то подобного, но, да ладно, это считается решением и может помочь кому-то еще в будущем.