2014-02-08 2 views
0

Я хочу загрузить некоторые модули без AMD (и CSS с помощью require-css), которые зависят друг от друга (мой случай - CodeMirror и некоторые его аддоны, но вопрос является общим); но мне это нужно только в некоторых сценариях, а не в других. Вот почему я не хочу загрязнять основной вызов require.config со всеми известными комбинациями зависимостей прокладки.Как скопировать зависимости RequireJS в зависимости от времени?

Когда я хочу, чтобы включить набор, я включил в список зависимостей codemirror_set, а сама codemirror_set.js содержит только простые

define([ 
    'lib/codemirror/js/codemirror', 
    '...', // some addons and css's 
]); 

Проблема заключается в том, эти зависимости в define зависят друг от друга, но когда я добавляю require.config({shim:{...}}); до этого define, это не честью, если я включаю его в основной require.config, где я нахожу карты путей и т. д., он работает, но он используется повторно, и, как я писал, я не хочу загрязнять его всеми возможностями.

Как я могу включить зашифрованные зависимости точно в срок, до define, который содержит взаимозависимые зависимости?

P.S .: Он работает, даже если я включаю конфигурацию прокладки в файл, который требует codemirror_set, но их больше, поэтому его нужно будет тиражировать для каждого из них. Я бы хотел, чтобы он определился только один раз.

ответ

0

Этот код делает то, что я понимаю, вы хотите сделать: добавьте прокладку во время выполнения. Это модуль modA. К моменту его загрузки нет доступа к modB. require.config вызов добавляет конфигурацию, необходимую для доступа к нему, а затем загружает его:

define(function() { 

require.config({ 
    paths: { 
     'modB': "../others/modB" 
    }, 
    shim: { 
     'modB': {exports: "value"} 
    } 
}); 

require(['modB'], function (modB) { 
    console.log('loaded modB'); 
    console.log("modB's value", modB); 
}); 

}); 
+0

Но этот 'modA' не может использоваться как зависимость, которая обеспечивает загрузку' modB'. Мне не нужно «просто загружать его через некоторое время», но чтобы определить «modA», чтобы зависеть от «modB» и других, одновременно изменяя их взаимозависимости. –

0

Я нашел одно решение: если я хочу, чтобы определить modA так что это зависит от modB и modC и мне нужно установить прокладку зависимость между modB и modC только по времени, мне нужно разбить определение в двух файлах:

modA.js:

require.config({shim:{ 
    modB: { deps: [ 'modC' ] } 
}); 

define(['./modA-inner'], function (x) { return x; }); 

modA-inner.js:

define(['modB', 'modC'], 
    ... 
); 

Набор конфигурации в modA.js почитается внутри modA-inner.js, поэтому зависимости разрешаются, как они должны. Хотя ему нужна еще одна загрузка.

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