Я столкнулся с той же проблемой, что и вы описали. Я написал плагин, который заботится о совместном использовании общих зависимостей между вложенными контекстами.
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/
У меня такая же проблема ... Я вроде решил ее, вводя ссылки на общие модули, когда я инициализации каждого приложения, но было бы здорово, если бы мы могли иметь доступ к другим контекстам из другого контекста – chchrist
, проблема могла быть решена путем написания плагина require.js для управления контекстами, плагин мог бы определить, можно ли вывести зависимость из глобального контекста, чтобы избежать множественного запросы для той же зависимости. На данный момент нет ответа, потому что нет открытых источников решений. См. Http://requirejs.org/docs/plugins.html –
Используйте браузеру: https://github.com/substack/node-browserify/ – avetisk