requirejs是一个简单的javascript框架,支持模块化编码和模块的异步加载。
在requireJS中模块可以分为:匿名模块和命名模块这2种。
requireJS定义一个匿名模块
define(function(){ return {id:"noName"}; });
define("constantModule",[],function(){ return {id:"hasName"}; });
jquery从1.7版本开始支持AMD(Asynchronous Module Definition),并且是一个命名模块,模块名就是jquery,我使用的是jquery-1.11.1.js,源码如下:
if ( typeof define === "function" && define.amd ) { define( "jquery", [], function() { return jQuery; }); }
require.config({ baseUrl:"./../", paths: { jquery: 'jquery-1.11.1' } }); //jquery框架的模块名是jquery,这里不能修改,不然加载不成功 require(["jquery"], function(jq) { //如果加载成功,应该显示1.11.1 alert(jq().jquery); });
require.config({ baseUrl:"./../", paths: { jquery_name: 'jquery-1.11.1' } }); //jquery框架的模块名是jquery,这里不能修改,不然加载不成功 require(["jquery_name"], function(jq) { //如果加载成功,应该显示1.11.1 alert(jq().jquery); });可以发现,这次jquery框架不能正常加载。我们仅仅是改变了模块名而已。这里可以得出一个结论:
如果是命名模块,那么使用require加载该模块的时候,模块名一定要正确,不能随意修改。
接下来我们加载自己定义的匿名模块和命名模块,验证下我们的结论。
require.config({ baseUrl:"./../", paths: { jquery: 'jquery-1.11.1', hehe: 'require_demo/module_noName', constantModule: 'require_demo/module_hasName', } }); //jquery框架的模块名是jquery,这里不能修改,不然加载不成功 require(["jquery","hehe","constantModule"], function(jq,noName,hasName) { alert(jq().jquery); alert(noName.id); alert(hasName.id); });调整文件路径,保证上面的代码能够正常加载。接下来我们可以修改上面的代码
require.config({ baseUrl:"./../", paths: { jquery: 'jquery-1.11.1', xx: 'require_demo/module_noName', constantModule_hehe: 'require_demo/module_hasName', } }); //jquery框架的模块名是jquery,这里不能修改,不然加载不成功 require(["jquery","xx","constantModule_hehe"], function(jq,noName,hasName) { alert(jq().jquery); alert(noName.id); alert(hasName.id); });可以发现:xx模块能够正常加载,constantModule_hehe不能正常加载。我们可以看到:匿名模块具有更大的灵活性,加载匿名模块的时候,名称可以随意指定。
原文地址:http://blog.csdn.net/aitangyong/article/details/40213043