Javascript库应该动态添加依赖项吗?

时间:2013-02-18 16:17:31

标签: javascript jquery libraries

我正在开发一个需要jQuery和Raphael的小型JS库。我在README中记录了这个事实,但我不喜欢用户必须手动包含三个JS库才能使用它的想法。

如果找不到它们,那么让库动态地包含依赖项有什么优缺点?像这样:

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");
}

洁食?

2 个答案:

答案 0 :(得分:1)

我个人不知道任何自动下载“外部”依赖项的js库,我认为在正常情况下这不是一个好主意。

表达明确要求的库和最小版本应该足够了,这就是我所知道的所有js库的工作方式。

像jQuery这样的库可以从CDN,本地等下载,因此强制每个人的源和版本是没有意义的。

答案 1 :(得分:1)

我知道像backbone.js这样非常受欢迎的库不会这样做。

我认为强迫用户执行此操作会更好,因此他们了解库的工作方式。

通常,通常会有某种资源加载器可用,它将处理添加资源。如果你单独执行此操作,它会分散一组希望最终用户正在使用的功能。