最近忙于学校的一个新网站建设,对于以前的前端程序编写方式的不正规特意上网学习了require.js 的用法,使此次的工程更加有条理同时符合当前前端的开发模式——前端模块化。

网上有不少很好的学习文章这里推荐阮一峰老师的:http://www.ruanyifeng.com/blog/2012/11/require_js.html

下面是本人归纳的一些要点:

1、使用require.js 必须从官网下载 require.js 文件 http://www.requirejs.cn/ 打开官网便可以下载,下载完之后就好像导入jquery 文件一样用script 标签导入

<script type="text/javascript" src="js/require.js" defer async="true" data-main="js/loginMain"></script>

这里的script 标签不再像以前导入js 文件那样简单,这里有几个重要属性:

①:defer 和 async="true":这两个属性是规定浏览器异步加载requier.js 这个文件的,防止在网络环境较差的时候 网页处于假死状态

②:data-main: 这个属性是指定此页面js 脚本的main 文件,就像java 以及 c 语言中的main 函数一样,所有通过require.js 整理的模块都将在这个文件里面执行

而src 自然就是导入我们的 require.js 文件了

2、main 函数的实现:

导入完 require.js 文件,指定好了页面的main 文件了我们就要编写我们的main 文件了

require(["jquery.min","math"],function($,math){
var body = $("body");
console.log(body);
var result = math.add(1,2);
console.log(result);
})

main 文件里面的不是main 函数而是由 require.js 提供的require 函数,这个函数接收两个参数:

第一个参数:数组,保存着需要加载的模块文件名字,例如jquery.min.js 这个模块文件它的名字当然就是 “jquery.min” 啦,而那个math 就是我自己定义的js 文件 math.js

第二个参数:回调函数。这个函数同样接收参数,第一个参数保存着多少个模块的名字,这个函数可写的参数就有多少个而函数的参数只是这一个模块的一个代名词,主要使用参数的名字去调用模块的某一个方法或值,例如,jquery的参数可以写成这样:

require(["jquery.min","math"],function(q,math){
var body = q("body");
console.log(body);
var result = math.add(1,2);
console.log(result);
})

那么,调用jquery 模块的的方法时就只能通过 “q” 这个参数名去引用了

*注意每一个模块都必须有一个出口(返回值)

在回调函数之内我们就可以使用加载了的模块中的方法了!

3、require.js 接受模块的形式是 AMD 形式

当我们使用 require.js 加载我们的模块时我们不可以用以前编写javascript 的方式写了 必须按照AMD 规范,即像如下这样写:

define(function(){
function add(num1,num2){
return num1 + num2;
} return {
add: add
};
})

如果某一模块需要依赖其他一些模块,则define 方法中的第一个参数可以传进一个数组,数组里面保存的是要调用的模块名字,函数的参数依然是调用前面依赖模块的代名词而已

例:

define(["M1"],function(m1){
function add(num1,num2){
return num1 + num2;
} return {
add: add
m1.foo();
};
})

所有模块的代码都要写在 define 这个方法的回调函数中

但是这种形式在我们编写自己的模块的时候显然是没什么大问题的,反正都是要自己写。但是在导入一些流行的前端库例如:jquery这些的时候就有问题了,jquery的某些旧版本(这里我没有详细研究反正我用的 1.9.1 版本是不符合 AMD 规范的)就不符合AMD 规范了

那怎么办?没关系 require.js 又提供了一些方法可以兼容这些不符合 AMD形式的模块

只要我们在页面的main 文件中 require方法的前面加上这个方法就好:

require.config({
shim:{
'jquery.min':{
exports: '$'
}
} })

这个方法是require.config 方法,它接收一个对象作为参数,对象的内部有一个 shim属性,用来规定加载文件的依赖性以及输出的对象

上面的例子我将jquery 自定义规范,语法是首先在 shim属性里面 定义一个不符合AMD 规范模块的属性名(这里就是jquery啦),然后这个属性的值是一个对象,对象里面又有两个属性:

第一个是:exports 属性:值为此模块的输出值 也就是return的值,jquery的主函数就是 “$” 所以这里填 $

第二个是:deps 属性:值为此模块依赖的其他模块名字以数组的形式保存,例如:

require.config({
shim:{
'math':{
deps: ['m1','m2'],
exports: 'math'
}
} })

这里的 math 模块依赖 m1,m2 模块,输出为 math这个对象

本篇文章纯是个人觉得的要点归纳,不足的地方敬请原谅

【笔记】关于require.js 的用法的更多相关文章

  1. Javascript模块化编程(三):require.js的用法

    Javascript模块化编程(三):require.js的用法 原文地址:http://www.ruanyifeng.com/blog/2012/11/require_js.html 作者: 阮一峰 ...

  2. Javascript模块化编程require.js的用法

    JS模块化工具requirejs教程(一):初识requirejs http://www.runoob.com/w3cnote/requirejs-tutorial-1.html JS模块化工具req ...

  3. (转)Javascript模块化编程(三):Require.js的用法

    转自 ruanyifeng 系列目录: Javascript模块化编程(一):模块的写法 Javascript模块化编程(二):AMD规范 Javascript模块化编程(三):Require.js的 ...

  4. javascript模块化编程库require.js的用法

    随着javascript的兴起,越来越多的公司开始将JS模块化,以增加开发的效率和减少重复编写代码的.更是为了能更加容易的维护日后的代码,因为现在的随着人们对交互效果的越来越强烈的需求,我们的JS代码 ...

  5. Javascript模块化编程(三):require.js的用法(转)

    这个系列的第一部分和第二部分,介绍了Javascript模块原型和理论概念,今天介绍如何将它们用于实战. 我采用的是一个非常流行的库require.js. 一.为什么要用require.js? 最早的 ...

  6. Javascript模块化编程(三):require.js的用法 作者: 阮一峰

    声明:转载自阮一峰的网络日志 这个系列的第一部分和第二部分,介绍了Javascript模块原型和理论概念,今天介绍如何将它们用于实战. 我采用的是一个非常流行的库require.js. 一.为什么要用 ...

  7. Javascript模块化编程(三):require.js的用法【转】

    作者: 阮一峰 日期: 2012年11月 7日 这个系列的第一部分和第二部分,介绍了Javascript模块原型和理论概念,今天介绍如何将它们用于实战. 我采用的是一个非常流行的库require.js ...

  8. require.js的用法

    我采用的是一个非常流行的库require.js. 一.为什么要用require.js? 最早的时候,所有Javascript代码都写在一个文件里面,只要加载这一个文件就够了.后来,代码越来越多,一个文 ...

  9. Javascript模块化编程(三):require.js的用法 (转)

    转自:http://my.oschina.net/u/1390066/blog/213769 一.为什么要用require.js? 最早的时候,所有Javascript代码都写在一个文件里面,只要加载 ...

随机推荐

  1. ELK系列--实时日志分析系统ELK 部署与运行中的问题汇总

    前记: 去年测试了ELK,今年测试了Storm,最终因为Storm需要过多开发介入而放弃,选择了ELK.感谢互联网上各路大神,目前总算是正常运行了. logstash+elasticsearch+ki ...

  2. maven 打包可运行jar包(转)

    目录 1.前提 2.方法一:使用maven-jar-plugin和maven-dependency-plugin插件打包 3.方法二:使用maven-assembly-plugin插件打包 4.方法三 ...

  3. 洛谷——P1292 倒酒

    P1292 倒酒 题目描述 Winy是一家酒吧的老板,他的酒吧提供两种体积的啤酒,a ml和b ml,分别使用容积为a ml和b ml的酒杯来装载. 酒吧的生意并不好.Winy发现酒鬼们都非常穷.有时 ...

  4. Sqli-labs less 14

    Less-14 本关我们直接进行测试,输入username:admin" Pasword:(随意) 可以看到报错了,那么我们知道了id进行了 " 的操作. 这里和less13一样, ...

  5. 查看所有shell类型

    [xf@xuexi ~]$ cat /etc/shells /bin/sh /bin/bash /sbin/nologin /usr/bin/sh /usr/bin/bash /usr/sbin/no ...

  6. http://download.eclipse.org/technology/m2e/releases install error

    Can you try running Eclipse as Admin and try this again?. Let me know how that goes. what is the upd ...

  7. 50 years, 50 colors HDU - 1498(最小点覆盖或者说最小顶点匹配)

    On Octorber 21st, HDU 50-year-celebration, 50-color balloons floating around the campus, it's so nic ...

  8. 【20181020T1】蛋糕

    题面 [正解] 显然先按a排个序,然后用b乱搞 第一问用D开头的定理求最长下降子序列 第二问乱搞 for (int i=1;i<=n;i++) { int* t=upper_bound(f+1, ...

  9. 【高斯消元解xor方程组】BZOJ2466-[中山市选2009]树

    [题目大意] 给出一棵树,初始状态均为0,每反转一个节点的状态,相邻的节点(父亲或儿子)也会反转,问要使状态均为1,至少操作几次? [思路] 一场大暴雨即将来临,白昼恍如黑夜!happy! 和POJ1 ...

  10. 【优先队列】POJ1442-Black Box

    [思路] 建立一个小堆和一个大堆.大堆用来存放第1..index-1大的数,其余数存放在大堆,小堆的堆顶元素便是我们要求出的第index大的数.每次插入一个A(n),必须保证大堆中数字数目不变,故先插 ...