最近学习了一下requirejs,对照官方文档和阮一峰大神的博客Javascript模块化编程(三):require.js的用法,学到了基本的用法,如下是个人一些总结和补充javascript
基本用法看官方文档和阮一峰大神的博客就能够了,我这里写一下感受要注意的地方。html
(1)require.config({...})中的shim,官方文档中的解释是:为那些没有使用define()来声明依赖关系、设置模块的"浏览器全局变量注入"型脚本作依赖和导出配置。java
其实就是帮助咱们以AMD模块的方式,使用那些不符合AMD规范的模块。有以下代码:jquery
require.config({ shim:{ 'underscore':{ //'underscore'须要和paths中定义的别名一致,若underscore.js在BaseUrl目录下,则不用设置paths。后面的backbone也同样 exports:'_' }, 'backbone':{ deps:['underscore','jquery'], exports:'Backbone' } } });
使用的时候:编程
requirejs(['underscore','backbone'],function(_,Backbone){ // 'underscore'和'backbone'和paths中设置的别名一致 ...... })
有两个属性,deps和exports,exports是模块的返回值,exports的值,必定要与JS库中暴露出的全局变量名称一致。显然,浏览器
'underscore'与'backbone'这两个模块的返回值,就是这两个框架(underscore.js和backbone.js)暴露出的全局变量'_'和'Backbone'。框架
(2)map的用法模块化
官方文档解释map:对于给定的模块前缀,使用一个不一样的模块ID来加载该模块。requirejs
该手段对于某些大型项目很重要:若有两类模块须要使用不一样版本的"foo",但它们之间仍须要必定的协同。学习
在那些基于上下文的多版本实现中很难作到这一点。并且,paths配置仅用于为模块ID设置root paths,而不是为了将一个模块ID映射到另外一个。
map示例:
若是各模块在磁盘上分布以下:
代码:
requirejs.config({ map: { 'some/newmodule': { 'foo': 'foo1.2' }, 'some/oldmodule': { 'foo': 'foo1.0' } } });
当“some/newmodule”调用了“require('foo')”,它将获取到foo1.2.js文件;而当“some/oldmodule”调用“`require('foo')”时它将获取到foo1.0.js。
该特性仅适用于那些调用了define()并将其注册为匿名模块的真正AMD模块脚本。而且,请在map配置中仅使用绝对模块ID,“../some/thing”之类的相对ID不能工做。
另外在map中支持“*”,意思是“对于全部的模块加载,使用本map配置”。若是还有更细化的map配置,会优先于“*”配置。示例:
requirejs.config({ map: { '*': { 'foo': 'foo1.2' }, 'some/oldmodule': { 'foo': 'foo1.0' } } });
意思是除了“some/oldmodule”外的全部模块,当要用“foo”时,使用“foo1.2”来替代。对于“some/oldmodule”本身,则使用“foo1.0”。