
requireJS&AMD
文章平均质量分 80
aitangyong
成长最快、最好的方式就是交流和总结!
展开
-
使用requireJS的shim参数,完成jquery插件的加载
没有requireJS框架之前,如果我们想使用jquery框架,会在HTML页面中通过标签加载,这个时候jquery框架生成全局变量$和jQuery等全局变量。如果项目中引用了requireJS框架,采用模块化的方式加载jquery,那么jquery不会再添加全局变量$和jQuery。现在问题来了,虽然jquery框架已经开始支持AMD规范,但是jquery的众多插件还是不支持AMD,仍然像以前一原创 2014-10-31 13:59:10 · 18442 阅读 · 3 评论 -
理解和解决requireJS的报错:MODULE NAME HAS NOT BEEN LOADED YET FOR CONTEXT
使用requireJS加载模块的时候,有时候会碰到如下的错误:Uncaught Error: Module name "module1" has not been loaded yet for context: _. Use require([])。可以看到使用define()定义模块的时候,如果依赖的模块比较少,那么可以使用标准方式;如果依赖的模块很多,那么可以使用方式1或者方式2来解决。很显然,使用require()加载模块的时候,也存在和define()一样的问题。经过我的试验:使用方式2也是可以的原创 2014-11-02 17:49:10 · 36971 阅读 · 2 评论 -
requireJS在同一个HTML/JSP页面,加载不同版本的jquery
requireJS支持JS模块化,也能够实现在同一个HTML/JSP页面加载不同版本的模块。这个特性太棒了,下面我们看下如何加载多个版本的jquery。1、如果不同context加载的模块相同,版本相同(同一个js文件),会怎么样呢?这个js文件会下载多次吗?结论:通过httpwatch观察,如果不同的context加载同1个js文件,那么这个js文件会下载多次。显然这很浪费。2、如果2个context都是需要jquery-1.10.1版本,那么怎么保证只js只下载一次呢?结论:我们可以定义一个类似父类的c原创 2014-11-19 21:53:55 · 4154 阅读 · 0 评论 -
requireJS的匿名模块和命名模块的差别和最佳实践
requirejs是一个简单的javascript框架,支持模块化编码和模块的异步加载。在requireJS中模块可以分为:匿名模块和命名模块这2种。jquery从1.7版本开始支持AMD(Asynchronous Module Definition),并且是一个命名模块,模块名就是jquery。如果是命名模块,那么使用require加载该模块的时候,模块名一定要正确,不能随意修改。匿名模块具有更大的灵活性,加载匿名模块的时候,名称可以随意指定。原创 2014-10-18 17:47:16 · 4075 阅读 · 0 评论 -
requirejs定义的模块返回的永远是单例对象,可以借助javascript中的类解决模块间的相互干扰问题
RequireJS中定义一个模块,总的来说有2种方式:简单键值对和函数依赖式。1.简单键值对:一个模块仅含有值对,没有任何依赖define({ color: "black", size: 1, method1: function() {}, method2: function() {}});这种写法虽然简单,但是有很大的局限性,仅仅是定义了该模块的原创 2014-12-10 21:35:16 · 3598 阅读 · 0 评论 -
requirejs.config配置paths的时候,配置目录和配置文件的区别
通过在paths中配置每个一个模块的模块id和文件路径的映射关系,requirejs能够正确的加载我们需要的模块。当js文件非常多的时候,这种配置方式显然非常繁琐,配置的工作量会非常大。可以看到通过这种配置目录的方式,能够大大减少paths中配置的数量。可以看到配置目录的好处在于:不需要在main.js中配置每一个模块id和模块js文件的映射关系,能够减少main.js中配置的数量。配置文件的好处在于:模块id更加简单,"core1"显然比"cores/core1"更加简短。再看下面这段代码,如果将"cor原创 2015-03-09 07:53:26 · 15241 阅读 · 0 评论 -
使用requireJS加载不符合AMD规范的js文件:shim的使用方式和实现原理
在javascript中定义全局变量有2种方式,本质上是等价的,都是向window对象注入属性或者方法。也就是说,requireJS加载不符合AMD规范的js文件,跟我们直接在html通过<script>标签加载,没有太大的差别。js文件中引入的全局变量,依然会存在,依然能够正常使用。shim参数能够帮助我们以AMD模块的方式,使用那些不符合AMD规范的模块。很显然dateUtil.js和stringUtil.js这2个模块的返回值,就是暴露出的全局变量window.DateUtils和window.Str原创 2015-03-12 22:33:20 · 8165 阅读 · 2 评论 -
requireJS&seaJS模块加载器原理:<script>标签加载外部js文件用到的onload、onerror和onreadystatechange事件
之前学习了requireJS框架,最近在学习seaJS框架,两者都是js模块文件的加载器,做的事情大致是相同的。这篇文章学习下标签的一些特性,了解框架是如何加载js文件的。requireJS和seaJS其实都是通过动态创建标签,设置好标签的相关属性,然后再将标签插入到节点下。onload:当js文件下载完成,并且执行结束(脚本初始化)后,会触发。onerror:当加载js文件报错的时候会被调用,比如文件路径错误、网络不可用等情况。onreadystatechange:则是IE特有的,不同的版本支持情况还不原创 2015-10-26 18:09:43 · 4585 阅读 · 0 评论