Requirejs---菜鸟入门
2016-07-30 00:06
537 查看
Requirejs知道这个东西,但是没有去用过“,其实很久就想去用这个东西来模块化开发,奈何把时间放到其他地方去了。这两天也去看了一下文档。所以今天在这里写下自己的想法。
首先我来个demo代码:
是不是有点恶心,如果脚本文件还多的话,真是不忍直视。于是我们伟大的Requirejs派上用场了。下面来个Requirejs的demo
是不是赏心悦目好多,你会问其他的文件去哪了?别急,慢慢听我道来;其实原来关系都写到main.js中了,我们来看看main.js的代码。
下面我们开始进入正题:
RequireJS的目标是鼓励代码的模块化,它使用了不同于传统标签的脚本加载步骤。可以用它来加速、优化代码,但其主要目的还是为了代码的模块化。它鼓励在使用脚本时以module ID替代URL地址。
首先我们去加载requirejs文件,然后定义脚本文件的入口,相当于java中main函数。如果设置了data-main属性;baseUrl默认为data-main文件的路径。我们也可以通过require.config去修改。这里有一点需要注意的是:所设置的脚本是异步加载的。所以如果你在页面中配置了其它JS加载,则不能保证它们所依赖的JS已经加载成功。
require.config用来配置一些参数,它将影响到requirejs库的一些行为。参数是一个JS对象,常用的配置有baseUrl——用于加载模块的根路径。
1.paths——用于映射不存在根路径下面的模块路径。
2.shims——配置在脚本/模块外面并没有使用RequireJS的函数依赖并且初始化函数。假设underscore并没有使用 RequireJS定义,但是你还是想通过RequireJS来使用它,那么你就需要在配置中把它定义为一个shim。
4.deps——加载依赖关系数组
定义模块
模块不同于传统的脚本文件,它良好地定义了一个作用域来避免全局名称空间污染。它可以显式地列出其依赖关系,并以函数(定义此模块的那个函数)参数的形式将这些依赖进行注入,而无需引用全局变量。RequireJS的模块是模块模式的一个扩展,其好处是无需全局地引用其他模块。
RequireJS的模块语法允许它尽快地加载多个模块,虽然加载的顺序不定,但依赖的顺序最终是正确的。同时因为无需创建全局变量,甚至可以做到在同一个页面上同时加载同一模块的不同版本。
下面是一个小demo:
可以用demo试试,容易理解一些
详细内容请看Requirejs中文网。也可以去原文
http://www.requirejs.cn/docs/api.html#cjsmodule
http://requirejs.org/docs/api.html
首先我来个demo代码:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <script src="../a.js"></script> <script src="../b.js"></script> <script src="../c.js"></script> <script src="../d.js"></script> <script src="../e.js"></script> <script src="../f.js"></script> <script src="../g.js"></script> <script src="../h.js"></script> <script src="../i.js"></script> </body> </html>
是不是有点恶心,如果脚本文件还多的话,真是不忍直视。于是我们伟大的Requirejs派上用场了。下面来个Requirejs的demo
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <script src="../require.js" data-main="../main.js"></script> </body> </html>
是不是赏心悦目好多,你会问其他的文件去哪了?别急,慢慢听我道来;其实原来关系都写到main.js中了,我们来看看main.js的代码。
require.config({ baseUrl:"../", paths:{ a:"a", b:"b", c:"c", d:"d", e:"e", f:"f", g:"g", h:"h", i:"i" } }); require(["a","b","c","e","f","g","h","i"],function(a,b,c,d,e,f,g,h,i){ })
下面我们开始进入正题:
RequireJS的目标是鼓励代码的模块化,它使用了不同于传统标签的脚本加载步骤。可以用它来加速、优化代码,但其主要目的还是为了代码的模块化。它鼓励在使用脚本时以module ID替代URL地址。
<script data-main="../main.js" src="../require.js"></script>
首先我们去加载requirejs文件,然后定义脚本文件的入口,相当于java中main函数。如果设置了data-main属性;baseUrl默认为data-main文件的路径。我们也可以通过require.config去修改。这里有一点需要注意的是:所设置的脚本是异步加载的。所以如果你在页面中配置了其它JS加载,则不能保证它们所依赖的JS已经加载成功。
require.config用来配置一些参数,它将影响到requirejs库的一些行为。参数是一个JS对象,常用的配置有baseUrl——用于加载模块的根路径。
1.paths——用于映射不存在根路径下面的模块路径。
2.shims——配置在脚本/模块外面并没有使用RequireJS的函数依赖并且初始化函数。假设underscore并没有使用 RequireJS定义,但是你还是想通过RequireJS来使用它,那么你就需要在配置中把它定义为一个shim。
4.deps——加载依赖关系数组
require.config({ baseUrl:"../",//配置跟路径 paths:{ /*各个文件的映射*/ a:"a", b:"b", c:"c", d:"d", e:"e", f:"f", g:"g", h:"h", i:"i" } }); //注入依赖,并加载文件 require(["a","b","c","e","f","g","h","i"],function(a,b,c,d,e,f,g,h,i){ })
定义模块
模块不同于传统的脚本文件,它良好地定义了一个作用域来避免全局名称空间污染。它可以显式地列出其依赖关系,并以函数(定义此模块的那个函数)参数的形式将这些依赖进行注入,而无需引用全局变量。RequireJS的模块是模块模式的一个扩展,其好处是无需全局地引用其他模块。
RequireJS的模块语法允许它尽快地加载多个模块,虽然加载的顺序不定,但依赖的顺序最终是正确的。同时因为无需创建全局变量,甚至可以做到在同一个页面上同时加载同一模块的不同版本。
//模块没有依赖的的时候 define(function(){ var add=function(x,y){ return x+y; } return{ add:add } }) //有依赖也可以注入,类似angularjs define(["a","b"]function(a,b){ //在这里可以调用a,b模块的中的开放的接口 var add=function(x,y){ return x+y; } return{ add:add } })
下面是一个小demo:
文件路径: script|--->require.js |--->main.js |___>part|--->a.js |___>b.js demo|----demo.html
//b.js define(["a"],function(a){ var tt=function(){ alert(a.add(1,2)); a.t(); }; return{ rr:tt } });
//a.js define(function(){ var add=function(x,y){ return x+y; } ; var test=function(){ console.log("sss"); }; return { add:add, t:test } });
//main.js require.config({ baseUrl:"../script",//配置基础url paths:{//相对baseUrl定位 a:"part/a", b:"part/b" } }); //所设置的脚本是异步加载的 require(["a","b"],function(a,b){ b.rr(); });
//demo.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h1>test</h1> <script src="../script/require.js" data-main="../script/main.js"></script> </body> </html>
可以用demo试试,容易理解一些
详细内容请看Requirejs中文网。也可以去原文
http://www.requirejs.cn/docs/api.html#cjsmodule
http://requirejs.org/docs/api.html
相关文章推荐
- postgresql从入门到菜鸟(一)
- Hadoop学习笔记(1) ——菜鸟入门
- 菜鸟***入门
- maven入门教程(菜鸟级入门)
- mysql 菜鸟入门
- JAVA从菜鸟【入门】到新手【实习】一一JDK的安装调试
- swift菜鸟入门视频教程-12-21讲
- web开发--入门级学习经验(菜鸟级)
- 第六节 VMware View 6.0 菜鸟入门 vCenter 5.5 的安装和部署
- 菜鸟学习Jmock测试-入门(一)
- Ubuntu菜鸟入门(十一)—— windows 和 ubuntu时间冲突解决
- HTML菜鸟入门7
- Photoshop菜鸟实用入门 --- 工具箱简介
- GitHub与Git菜鸟入门
- JAVA从菜鸟【入门】到新手【实习】一一 学习过程的经验和策略【面向对象核心】
- 菜鸟学PHP之Smarty入门(组图)
- 菜鸟入门:Unity animation三角播放按钮灰色,无法点击播放怎么办?
- jsp入门(一个菜鸟的搬砖历程
- ReactiveCocoa框架菜鸟入门(三)——信号(Signal)与订阅者(Subscriber)
- linux菜鸟入门练习题