Используйте JQuery из Webjars, используя RequireJS

Я пытаюсь включить JQuery в веб-приложение, созданное с помощью maven, используя RequireJS для определения Javascript модулей.

Я следовал RequireJS документации здесь, в которой объясняется, как использовать JQuery с RequireJS. У меня вдобавок maven билд.

Вот что я сделал:

Мой main.js, вызванный data-main RequireJS в моем HTML

define(function() {
// Configuration of RequireJS
    requirejs.config({
        // No module can start with require. This can potentially allow easier definition of some elements
        enforceDefine : true,

        map : {
            '*': { 
                'jquery': 'libs/jquery',
            },

            // To make jquery work with requireJS: see http://requirejs.org/docs/jquery.html
            // 'jquery' wants the real jQuery module
            // though. If this line was not here, there would
            // be an unresolvable cyclic dependency.
            'libs/jquery': { 'jquery': 'jquery' },
        },

        // The base URL is just the top-level directory where the files are stored
        baseUrl : './',

        // Kick-start the application by loading these files
        deps : [ 'MyMainPanel' ],
    });
});

Я определил «пользовательский» JQuery (как в документации RequireJS), лежащий в /libs/jquery.js

define(['jquery'], function (jq) {
    return jq.noConflict( true );
});

А в моем maven pom.xml:

...
<dependency>
    <groupId>org.webjars</groupId>
    <artifactId>jquery</artifactId>
    <version>${jquery.version}</version>
</dependency>
...

При создании модуля с использованием jquery я получаю следующую ошибку:

GET http://localhost:8080/jquery.js 404 (Not Found)
require.js:166 Uncaught Error: Script error for: jquery
http://requirejs.org/docs/errors.html#scripterror

Модуль, использующий JQuery, следующий:

define(['ractive',
        'jquery',
        function(Ractive,
                $,
){
    var Panel  = Ractive.extend({
        el:"mainPanel",

        oninit: function(){
            $.ajax({url: "/myURL"}).done(function(types){
                // Work
            })
        }
    })

    return Panel
})

person Rémi Doolaeghe    schedule 05.03.2015    source источник
comment
Какую веб-инфраструктуру вы используете и как вы предоставляете WebJars через URL-адрес?   -  person James Ward    schedule 06.03.2015
comment
Я использую Spring-boot и несколько других веб-файлов (например, RactiveJS). RactiveJS отлично работает с RequireJS, а не с JQuery   -  person Rémi Doolaeghe    schedule 06.03.2015
comment
Попробуйте такую ​​конфигурацию: github.com/webjars/jquery/blob /мастер/pom.xml#L49-L54   -  person James Ward    schedule 06.03.2015
comment
Результат: Uncaught TypeError: Cannot read property 'noConflict' of undefined в моих пользовательских requireJs   -  person Rémi Doolaeghe    schedule 06.03.2015
comment
Не знаю, что с этим делать. Извиняюсь.   -  person James Ward    schedule 06.03.2015
comment
Похоже, что установка для forceDefine значения false устранила проблему. Не знаю почему, но это работает. Я постараюсь исследовать, чтобы понять.   -  person Rémi Doolaeghe    schedule 11.03.2015


Ответы (1)


Единственное решение, которое я нашел (которое является обходным путем), - это воспроизведение значения "enforceDefine":

requirejs.config({
    enforceDefine : false,

    map : {
        'libs/jquery' : {
            'jquery' : "webjars/jquery/${jquery.version}/jquery"
        },

        '*': { 
            'jquery' : 'libs/jquery', 
        },
    },

    baseUrl : './',

    deps : [ 'MyMainPanel' ],
});

Я не знаю, почему это работает, но это работает. Я оставлю это так, пока не найду лучшее решение.

person Rémi Doolaeghe    schedule 12.03.2015