2013-02-15 3 views
6

Я начал использовать контексты requirejs как способ разделить большое одностраничное приложение, состоящее из отдельных автономных SPA, которые имеют свой собственный набор зависимостей.Практика обработки общих зависимостей между несколькими контекстами requirejs?

Джеймс Берк описывает проблему, которую я сейчас встречая в этом комментарии на GitHub о различных контекстах и ​​их общих зависимостей не разделяемых, https://github.com/aurajs/aura/pull/170#issuecomment-10973485

Как я разделяю общие зависимости между различными requirejs контекстов, не вызывая повторяющиеся запросы для того же файла?

+0

У меня такая же проблема ... Я вроде решил ее, вводя ссылки на общие модули, когда я инициализации каждого приложения, но было бы здорово, если бы мы могли иметь доступ к другим контекстам из другого контекста – chchrist

+1

, проблема могла быть решена путем написания плагина require.js для управления контекстами, плагин мог бы определить, можно ли вывести зависимость из глобального контекста, чтобы избежать множественного запросы для той же зависимости. На данный момент нет ответа, потому что нет открытых источников решений. См. Http://requirejs.org/docs/plugins.html –

+1

Используйте браузеру: https://github.com/substack/node-browserify/ – avetisk

ответ

0

Возможно, вы захотите заглянуть в browserify для упаковки больших приложений с несколькими модулями js.

1

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

Requirejs имеет карту, которая содержит все контексты, и это определяется зависимостями:

requirejs.s.contexts

{ 
    _: { 
    defined: { 
     commondep: {}, 
     main: undefined 
    } 
    } 
    plugin: { 
    defined: { 
     commondep: {}, 
     plugin: {} 
    } 
    } 
} 

_ контекст основной контекст. Мы можем использовать этот контекст для определения всех глобальных определений модулей. Общие зависимости могут быть определены путем предварительной загрузки сценариев плагина и сравнения зависимостей с глобальными зависимостями. Общие модули могут быть введены в контекст песочнице:

function injectDependency(dependencyName, contextName) { 
    var ctx = getContext(contextName); 
    var dependencyInstance = require(dependencyName); 

    ctx.defQueue.push([ dependencyName, [], function() { return dependencyInstance; }]); 
} 

function getContext(contextName) { 
    return requirejs.s.contexts[contextName]; 
} 

В этом фрагменте мы называем требуется в не асинхронным образом, чтобы получить глобальный экземпляр модуля. Модуль вводится в песочницу, нажимая его в очередь определения.

Реализация этого решения плагина-загрузчика может быть загружена с https://github.com/igsp/requireplug.

Я отправил более подробное описание механики этого решения на моем блоге: https://intergalacticspacepocket.wordpress.com/2014/08/07/nesting-requirejs-contexts-with-shared-dependencies/

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

  • Нет связанных вопросов^_^