2015-12-16 2 views
0

Я пытаюсь использовать RequireJS, вот мой конфигурационный файл:RequireJS + Backbone без jQuery?

require.config({ 
    baseUrl: "/scripts", 
    paths: { 
    zepto: "zepto.min", 
    underscore: "underscore.min", 
    backbone: "backbone.min" 
    }, 
    shim: { 
    zepto: { 
     exports: "$" 
    }, 
    underscore: { 
     exports: "_" 
    }, 
    backbone: { 
     deps: ["underscore", "zepto"], 
     exports: "Backbone" 
    } 
    } 
}); 

И это мой app.js:

require(['backbone'], function(Backbone) { 
    console.log('loaded!'); 
}); 

Это прекрасно работает, но я не знаю, почему RequireJS пытается загрузить jQuery.

ответ

3

Поскольку Backbone требует модуль, который называется JQuery (смотрите в верхней части backbone.js) файла.

// Set up Backbone appropriately for the environment. Start with AMD. 
    if (typeof define === 'function' && define.amd) { 
    define(['underscore', 'jquery', 'exports'], function(_, $, exports) { 
     // Export global even in AMD case in case this script is loaded with 
     // others that may still expect a global Backbone. 
     root.Backbone = factory(root, exports, _, $); 
    }); 

и Вы не определили данный модуль.

Чтобы взломать использование zepto в jquery:

require.config({ 
    baseUrl: "/scripts", 
    paths: { 
    jquery: "zepto.min", 
    underscore: "underscore.min", 
    backbone: "backbone.min" 
    }, 
    shim: { 
    jquery: { 
     exports: "$" 
    }, 
    underscore: { 
     exports: "_" 
    } 
    } 
}); 

И второе: shim работает только с без Amd модулей. Backbone - это модуль AMD.

+0

Магистраль больше не требует jquery, см. Https://github.com/jashkenas/backbone/wiki/Using-Backbone-without-jQuery для запуска без него – ivarni

+0

@ivani Посмотрите на файл 'backbone.js' (п. 1.2.3). Backbone нуждается в модуле под названием 'jquery' –

+0

Спасибо @TomaszJakubRup! Я не знал об этом взломе, очень приятно. –