首页 > requirejs 如何实现seajs的require.async

requirejs 如何实现seajs的require.async

if (!'webkitFilter' in document.createElement('div').style ) {
    require.async('test',function(test){
      console.log(test.fuck);
    })
  }

如上面这样,判断成立后才下载js再回调


昨天犹豫了很久还是想等大大们更规范严谨的阐述,结果居然今天还没人来回答……
那么我试着解释下看。(申明我没用过RequireJS!关于RequireJS的一切都是脑补!)

RequireJS 执行的是AMD规范,而seajs则执行CMD规范。这两者的区别主要在于对依赖模块的理解和处理方法。

AMD 和 CMD 的区别有哪些?(知乎)

与本题相关的一些差异主要在于:对于依赖的模块,AMD 是提前执行,CMD 是延迟执行
具体地说,AMD规范建议的是将依赖前置,即在代码执行前完成所有依赖,待依赖全部完成后再去执行代码。

以上不是题主问题的答案,算是背景知识。


我想表达的是,既然使用了RequireJS,就不能用类似seajs的CMD方式去思考代码的组织。require.async属于seajs“延迟加载”概念的一种具体实现,本身和RequireJS的设计理念就是背离的。
实际上,RequireJS在代码里实现了部分CMD的兼容,但其处理方式还是有一定的问题的,属于“强行把CMD模块转换为AMD模块”的行为,导致即使载入的是CMD模块,也是按照AMD的提前执行方式去运行。
所以个人并不“看好”用RequireJS实现require.async功能的可能性。

不过,据说,RequireJS 从 2.0 开始,也改成可以延迟执行。但查了半天我只看到这么一句话,没有任何样例,官网翻了好久也发现啥有用的东西。
于是一定要实现的话,其实我也不知道该怎么弄,也许直接试试这个?虽然我感觉RequireJS可能还是用AMD理念去套。

if (!'webkitFilter' in document.createElement('div').style ) {
    require(['test'],function(test){
        console.log(test.fuck);
    })
}

最后,因为很重要所以要说两次:申明我没用过RequireJS!关于RequireJS的一切都是脑补!

【热门文章】
【热门文章】