2013-02-18 3 views
1

Я работаю над небольшой библиотекой JS, которая требует jQuery и Raphael. Я документировал этот факт в README, но мне не нравится идея, что пользователи должны вручную включать три JS-библиотеки для использования этого.Должна ли библиотека Javascript динамически добавлять зависимости?

Каковы плюсы и минусы наличия библиотеки, динамически включающей зависимости, если она их не находит? Например:

if (!window.jQuery) { 
    var _my_script=document.createElement('SCRIPT'); 
    _my_script.type='text/javascript'; 
    _my_script.src='//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js?'; 
    document.getElementsByTagName('head')[0].appendChild(_my_script); 
    console.log("Loaded jQuery");   
} else { 
    console.log("jQuery already loaded"); 
} 

// get Raphael if not found 
if (typeof(Raphael) === "undefined") { 
    var _my_script=document.createElement('SCRIPT'); 
    _my_script.type='text/javascript'; 
    _my_script.src='//cdnjs.cloudflare.com/ajax/libs/raphael/2.1.0/raphael-min.js?'; 
    document.getElementsByTagName('head')[0].appendChild(_my_script); 
    console.log("Loaded Raphael");   
} else { 
    console.log("Raphael already loaded"); 
} 

Kosher?

ответ

1

Я лично не знаю никакой библиотеки js, которая автоматически загружает «внешние» зависимости, и я не думаю, что это хорошая идея в нормальном случае.

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

Библиотеки, такие как jQuery, могут быть загружены с CDN, локально и т. Д., Поэтому форсирование источника и версии для всех не имеет смысла.

+0

Спасибо! Смелые твердые ответы. –

1

Я знаю, что очень популярные библиотеки, такие как backbone.js, не делают этого.

Я думаю, что лучше заставить пользователя сделать это, чтобы они понимали, как работает библиотека.

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

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