У меня есть библиотека - назовем это SomeLib - который определен для поддержки различных модулей погрузчиков:Использование AMD определяется модуль в третьей партии, не-AMD библиотеки
(function(global, factory) {
if (typeof define === 'function' && define.amd) {
define([], factory);
} else if (typeof module !== 'undefined' && module.exports) {
module.exports = factory();
} else {
global.UriTemplate = factory();
}
})(this, function() {
...
// returns constructor function
});
я могу легко загрузить его с RequireJS как
require.config({
paths: {
'theLibrary: '../path/to/the/lib'
}
});
Тогда у меня есть другая библиотека третьей стороной - назовем это AnotherLib - который внутренне использует SomeLib как
var the Lib = new SomeLib(...);
Это означает, что SomeLib
должен быть доступен по всему миру.
AnotherLib это обычный JavaScript функционального модуля
(function(){
// the code
})();
Это не соответствует конкретному модулю погрузчики.
Когда я включаю AnotherLib с RequireJS, я что-то вроде
require.config({
paths: {
'theLibrary: '../path/to/the/lib',
'anotherLib: '../path/to/anotherLib'
},
shim: {
'anotherLib: [
'theLibrary'
]
}
});
проблемы в том, что я получаю неопределенное исключение на линии в AnotherLib, где он создает экземпляр SomeLib (new SomeLib(...)
). Это потому, что SomeLib не определен на глобальном объекте, а скорее опубликован как модуль AMD, который AnotherLib не требует.
Могу ли я решить это так или иначе, чтобы AnotherLib был совместим с AMD и требовал SomeLib.
Вот что я подумал ... В настоящее время обсуждается (1) с автором библиотеки JS.(2) было бы возможным обходным путем, хотя и не очень приятным. Большое спасибо – Juri