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. HDU 1253 胜利大逃亡 NYOJ 523【BFS】

    胜利大逃亡 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Subm ...

  2. Android蓝牙音乐获取歌曲信息

    由于我在蓝牙开发方面没有多少经验,如果只是获取一下蓝牙设备名称和连接状态那么前面的那篇文章就已经足够了,接下来的内容是转自一个在蓝牙音乐方面颇有经验的开发者的博客,他的这篇文章对我帮助很大. 今天,先 ...

  3. 一次vm 虚拟机时间倒流而导致的oracle 数据库启动故障

    一次vm 虚拟机时间倒流而导致的oracle 数据库启动故障 本文是原创文章.若转载请注明出处: http://blog.csdn.net/msdnchina/article/details/3878 ...

  4. (三)Solr——Solr的基本使用

    1. Schema.xml 在schema.xml文件中,主要配置了solrcore的一些数据信息,包括Field和FieldType的定义等信息,在solr中,Field和FieldType都需要先 ...

  5. jenkins构建执行shell 所有命令出现command not found

    出现的问题: + rsync -avzP /mnt/workspace/df-admin/ root@192.168.0.153:/home/deploy/deep_fashion_targets/w ...

  6. 使用Nexus创建私服

    原文链接:http://www.cnblogs.com/helong/articles/2254446.html 注意:nexus2.6.0版本以后不支持jdk6了,必须jdk1.7或以上. 参考:h ...

  7. 总结文件操作函数(一)-C语言

    在进程一開始执行,就自己主动打开了三个相应设备的文件.它们是标准输入.输出.错误流.分别用全局文件指针stdin.stdout.stderr表示,相应的文件描写叙述符为0.1.2:stdin具有可读属 ...

  8. setTime

    var getTime = function() { var _ = ['00', '01', '02', '03', '04', '05', '06', '07', '08', '09'], //补 ...

  9. iOS多线程与网络开发之NSURLCache

    郝萌主倾心贡献,尊重作者的劳动成果.请勿转载. // 2 // ViewController.m 3 // NSURLCacheDemo 4 // 5 // Created by haomengzhu ...

  10. migrate的使用

    安装完yii2后,需要创建一张user表,这里用migrate创建 1.在dos窗口下,先cd到项目的目录,比如E:\>cd E:\Visual-AMP-x64\www\blog\blog 2. ...