REQUIREJSAPI使用§1加载JavaScript文件§1.1RequireJS的目标是鼓励代码的模块化,它使用了不同于传统baseUrl亦可通过RequireJSconfig手动设置。如果没有显式指定config及data-main,则默认的baseUrl为包含RequireJS的那个HTML页面的所属目录。RequireJS默认假定所有的依赖资源都是js脚本,因此无需在moduleID上再加".js"后缀,RequireJS在进行moduleID到path的解析时会自动补上后缀。你可以通过pathsconfig设置一组脚本,这些有助于我们在使用脚本时码更少的字。有时候你想避开"baseUrl+paths"的解析过程,而是直接指定加载某一个目录下的脚本。此时可以这样做:如果一个moduleID符合下述规则之一,其ID解析会避开常规的"baseUrl+paths"配置,而是直接将其加载为一个相对于当前HTML文档的脚本:以".js"结束.以"/"开始.包含URL协议,如"http:"or"https:".一般来说,最好还是使用baseUrl及"paths"config去设置moduleID。它会给你带来额外的灵活性,如便于脚本的重命名、重定位等。同时,为了避免凌乱的配置,最好不要使用多级嵌套的目录层次来组织代码,而是要么将所有的脚本都放置到baseUrl中,要么分置为项目库/第三方库的一个扁平结构,如下:www/index.htmljs/app/sub.jslib/jquery.jscanvas.jsapp.jsindex.html:app.js:requirejs.config({//BydefaultloadanymoduleIDsfromjs/libbaseUrl:'js/lib',//except,ifthemoduleIDstartswith"app",//loaditfromthejs/appdirectory.paths//configisrelativetothebaseUrl,and//neverincludesa".js"extensionsince//thepathsconfigcouldbeforadirectory.paths:{app:'../app'}});//Startthemainapplogic.requirejs(['jquery','canvas','app/sub'],function($,canvas,sub){//jQuery,canvasandtheapp/submoduleareall//loadedandcanbeusedherenow.});注意在示例中,三方库如jQuery没有将版本号包含在他们的文件名中。我们建议将版本信息放置在单独的文件中来进行跟踪。使用诸如volo这类的工具,可以将package.json打上版本信息,并在磁盘上保持文件名为"jquery.js"。这有助于你保持配置的最小化,避免为每个库版本设置一条path。例如,将"jquery"配置为"jquery-1.7.2"。理想状况下,每个加载的脚本都是通过define()来定义的一个模块;但有些"浏览器全局变量注入"型的传统/遗留库并没有使用define()来定义它们的依赖关系,你必须为此使用shimconfig来指明它们的依赖关系。如果你没有指明依赖关系,加载可能报错。这是因为基于速度的原因,RequireJS会异步地以无序的形式加载这些库。data-main入口点§1.2require.js在加载的时候会检察data-main属性:你可以在data-main指向的脚本中设置模板加载选项,然后加载第一个应用模块。.注意:你在main.js中所设置的脚本是异步加载的。所以如果你在页面中配置了其它JS加载,则不能保证它们所依赖的JS已经加载成功。例如://contentsofmain.js:require.config({paths:{foo:'libs/foo-1.1.3'}});//contentsofother.js://Thiscodemightbecalledbeforetherequire.config()inmain.js//hasexecuted.Whenthath...