requirejs学习(一)

随着网站功能逐渐丰富,网页中的js也变得越来越复杂和臃肿,各种依赖(插件等)也逐渐增多,原有通过script标签来导入一个个的js文件这种方式已经不能满足现在的需求,我们需要团队协作、模块复用等等一系列复杂的需求。

Requirejs是一个非常小巧并且强大的模块加载器,可以帮助我们实现模块化开发,它是AMD规范非常好的体现,使用模块化开发,使得项目更加便于团队协作,模块复用、后期维护等;

我们为什么要使用requirejs?

首先来看看官方的描述:

RequireJS is a JavaScript file and module loader. It is optimized for in-browser use, but it can be used in other JavaScript environments, like Rhino and Node. Using a modular script loader like RequireJS will improve the speed and quality of your code.

大意为:requirejs是js模块加载器,不仅可以在浏览器中运行使用,还可以在Rhino和Node环境中,使用它可以提升你的开发速度和代码质量。。。

先看看我们平时两种常见情况:

第一个,在页面执行自执行函数:

<script>
(function () {
function fn() {
alert('我来自匿名自执行函数!');
};
fn();
})()
</script>

结果:当页面加载的时候,会弹出alert弹框,在点确定之前,页面都是空白,也就是html元素都还未被渲染出来,点确定之后,就正常了。这说明了js是会阻塞浏览器渲染,当引用的js很多的时候,而js只能并行下载有限的几个,这就会让页面处于短暂假死(空白)状态,如下,这不是我们想要的:

<script type="text/javascript" src="a.js"></script>
<script type="text/javascript" src="b.js"></script>
<script type="text/javascript" src="c.js"></script>
<script type="text/javascript" src="d.js"></script>
<script type="text/javascript" src="e.js"></script>
<script type="text/javascript" src="f.js"></script>
<script type="text/javascript" src="g.js"></script>
<script type="text/javascript" src="h.js"></script>
<script type="text/javascript" src="i.js"></script>
<script type="text/javascript" src="j.js"></script>

第二种情况:使用requirejs

<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="require.js"></script>
<script type="text/javascript">
require(["test"]);
</script>
</head>
<body>
<span>body</span>
</body>
</html>

test.js文件(模块)

define(function(){
function fun1(){
alert("it works");
};
fun1();
})

结果:使用requirejs后,页面加载的时候,弹出alert框,但是页面的内容也同时出来了,没有对比就没有伤害,这就体现了Requirejs的优点了:

  • requirejs使用异步加载,不阻塞浏览器渲染;
  • 可以按需要加载对应的js模块(文件),防止一次性页面加载大量js文件;

requirejs用法:

1、在页面底部上引入require.js文件,然后指定main入口文件:

 <script src="./require.js" data-main="./js/main"></script>

其中,data-main属性指向的main.js文件为入口文件,其他的模块在main中按需加载;

在requirejs中,define(定义模块)、require(引入模块),requirejs,其中require===requirejs,require是简写;

main.js

//配置require
require.config({
  //baseUrl:'../lib',
paths:{
jquery:'lib/jquery',
bootstrap:'lib/bootstrap',
},
//设置依赖关系
shim: {
bootstrap: {
deps: ['jquery'],
        export:'$'
}
}
});
//引入依赖
require(['jquery','bootstrap','addText'],function ($,_,desc) {
desc.func();
console.log(desc.text);
});

require()

require()方法有两个参数,前面是一个数组,也就是引入的依赖模块(如果没有依赖的话,也就没必要用requirejs了),第一个参数有依赖的话,必须是一个数组;第二个参数是一个回调函数,函数可以传参,参数根据引入的依赖,自定义一个变量,比如依赖jQuery,那回调的对应的参数可以定义为$。

在引入的依赖模块中,都是异步加载的,所有模块加载完成后执行回调函数;

require.config()

require.config()是用来配置模块的相关属性的:

baseUrl用来定义根目录,后面的paths定义的模块路径就以baseUrl定位的目录lib为基准,在paths中定义的key为模块的变量,在下面可以直接引用;

这里注意,如果没有配置baseUrl,则默认的将根目录设置为main.js所在的目录;

//敲黑板 ,shim是用来配置不兼容AMD模块的,deps是依赖模块,export是导出的当前模块的变量名;

模块路径

前面讲的,默认是其他模块跟main模块在同一目录下;如果不在一个目录下呢,已默认的根目录问基准再去寻找其他的模块路径,如:

项目目录:

main.js

//main.js
require(['./addText','../modal'],function (add,m) {
console.log(add.text);
console.log(m.text);
});

addText.js(模块)

//addText
define(function () {
var addText = function () {
$('.btn').click(function () {
$('.box').text('我刚刚点击了按钮');
$('#MyModal').modal();
});
};
return {
func:addText,
text:'啊哈哈,我来自addText'
};
});

modal.js(模块)

//modal
define(function () {
return {
text:'啊哈哈,我来自modal'
};
});

发现了吧,路径都是以默认的根目录为基准路径(没有手动设置baseUrl的情况下);

先到这里吧,后面继续学,继续补充。。。

requirejs学习(一)的更多相关文章

  1. RequireJS学习资料

    RequireJS学习资料汇总   入门系列 [1]阮一峰 RequireJS用法 [2]RequireJS入门指南 文档系列 [1]RequireJS中文文档 [2]RequireJS英文文档 代码 ...

  2. RequireJS 学习资料收集

    RequireJS 学习资料收集 RequireJS 模块化管理 Javascript 比较优秀. RequireJS 英文官网 https://requirejs.org/ RequireJS 中文 ...

  3. RequireJS学习笔记

    前言 进入移动前端是很不错的选择,这块也是我希望的道路,但是不熟悉啊... 现在项目用的是require+backbone,整个框架被封装了一次,今天看了代码搞不清楚,觉得应该先从源头抓起,所以再看看 ...

  4. 【原】requirejs学习笔记

    随着JS越来越庞大,已经不仅仅是以前复制粘贴做特效的时代了,JS越来越偏向于业务逻辑与应用.JS在web开发中占有越来越重要的地位. 由于JS代码庞大,文件数目多,传统的使用<script sr ...

  5. requirejs学习之路

    2006年,由于微软的名声比SUN公司的名声要大,选择了asp.net,利用VS开发了很多项目,那个时候觉得自己真是很牛气,什么都能做:现在随着互联网和移动互联的冲击,这些传统技术也受到了冲击,由于A ...

  6. RequireJS学习资料汇总

    入门系列 [1]阮一峰 RequireJS用法 [2]RequireJS入门指南 文档系列 [1]RequireJS中文文档 [2]RequireJS英文文档 代码实践 知识扩展 [1]计算机干了什么

  7. Requirejs学习笔记(一)

    中文api 和 英文api网上都有的我就不翻译了,我的学习方法是先看英文api,然后看不懂的就比对中文api看一遍. requirejs可以帮助js代码模块化开发,模块化意味了解决了代码凌乱的问题,方 ...

  8. requirejs学习博客址分享

    1. http://blog.jobbole.com/30046/ 2. http://www.requirejs.cn/ 3. http://www.ruanyifeng.com/blog/2012 ...

  9. RequireJS学习笔记(转)

    前言 进入移动前端是很不错的选择,这块也是我希望的道路,但是不熟悉啊... 现在项目用的是require+backbone,整个框架被封装了一次,今天看了代码搞不清楚,觉得应该先从源头抓起,所以再看看 ...

随机推荐

  1. jQuery中,实现css格式的改变

    jQuery中,实现属性值的改变 (1)prop属性实现,html中标签的class属性值发生改变: 语法:$(元素标识).prop("class",类属性值); 例子:$(&qu ...

  2. 《暗黑世界V1.4》API说明文档

    <暗黑世界V1.4>API说明文档 阵法位置示意图 上方:                        下方:      账号注册   100 请求信息 { username   str ...

  3. iOS APP 上传

    原地址:http://www.cnblogs.com/uvsjoh/archive/2012/11/14/2769739.html 流程:1 开发好要发布的程序 -- 需要在程序中包含符合要求规格的i ...

  4. 图片转成base64, base64转成图片

    1.我们在看代码时经常在img或css背景图片中看到: src=”data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAB4CAMAAAAOusbgA ...

  5. golang中使用mongodb的操作类以及如何封装

    mgo简介 mongodb官方没有关于go的mongodb的驱动,因此只能使用第三方驱动,mgo就是使用最多的一种. mgo(音mango)是MongoDB的Go语言驱动,它用基于Go语法的简单API ...

  6. photoshop cs4 破解

    第一步:下载完软件,要先解压出来,有1.55G,解压. 第二步:安装时选试用30天的选项,先不要输入注册码,完成安装. 第三步:找到hosts文件,在C:\WINDOWS\system32\drive ...

  7. 用GDB命令PO(print-object)打印UIView的视图层级

    UIView有一个私有方法: recursiveDescription 这个方法可以显示出当前视图的详细层级,可以在代码中直接调用,也可以在GDB中调用,在GDB中调用时需要借助另一个GDB命令:pr ...

  8. PyCharm设置python新建文件指定编码为utf-8

    PyCharm新建文件时可以在模板中添加编码字符集为utf-8,新建文件可自动添加了

  9. MVC3 模板页页预留Section

    一.模板页 Razor出现后我们就可以选择不再使用asp.net master 模板页.取而代之的是cshtml razor的模板文件.用法个人认为还是和master模板页类似.但在mater模板页的 ...

  10. MySQL之mysql客户端工作的批处理一些使用手法

    通常我们会用mysql这个客户端程序来连接mysql库.这个通常是工作在交互式模式下的.如我们连接上mysql并执行如下操作: mysql -uroot -h127. -P3306 Welcome t ...