2015-03-21 10 views
4

Я читаю через Backbone Fundamentals и в настоящее время нахожусь на section, где описано, как создать приложение с RequireJS.Для чего нужен экспорт подрезки RequireJS?

Из того, что я понимаю, идея shimming заключается в том, что обычно, когда вам требуются модули, RequireJS также определяет, как загрузить их зависимости. Но когда вы пытаетесь загрузить модуль без AMD, это не работает (я не знаю почему, но это отдельный вопрос). Чтобы обойти это, вы можете настроить прокладку, чтобы сказать: «Загрузите X до Y».

require.config({ 
    shim: { 
    'Y': ['X'] 
    } 
}); 

Я вижу, что вы могли бы использовать exports сказать, «поставить этот не-AMD вещь в глобальную переменную вместо модуля».

require.config({ 
    shim: { 
    'Y': { 
     exports: 'globalY' 
    } 
    } 
}); 

Ум, в чем проблема? Разве проблема с не-AMD-библиотеками заключается в том, что RequireJS не может определить зависимости?

ответ

10

Часть «Я не знаю почему» на самом деле должна быть адресована для ответа на вопрос. Шифрование только, необходимое для модулей без AMD, и загрузка модуля без AMD через RequireJS не работает точно, потому что RequireJS требует модули AMD. То есть ему нужен модуль, который должен быть обернут вызовом define, который содержит список зависимостей и заводской метод (more details here). «Стандартные», библиотеки старого стиля записывают свои материалы в глобальную область, в произвольно названное пространство имен (в случае Backbone: window.Backbone). Исторически сложились так, что разработчики должны написать крохотный модуль-обертку, преобразующий «старую» библиотеку в драмы, например:

магистральных-wrapper.js

define([], function() { 
    return window.Backbone; 
}); 

Добавление конфигурации прокладок (added in RequireJS 2.0) позволил справиться с этим декларативно в конфигурации.

Шиммирование не говоря «поставить этот не-AMD вещь в глобальную переменную вместо модуля». Shimming говорит: «Загрузите эту библиотеку без AMD и выведите глобальное пространство имен, указанное в переменной exports, как если бы это был модуль AMD».


Это на самом деле хорошо объяснено в RequireJS's documentation и некоторые другие вопросы SO: 1, 2.

+0

Хороший ответ. Черт. – Kieveli

Смежные вопросы