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. python __set__ __get__ __delete__

    class Attr(object): def __init__(self,attrname,attrtype): self.attrname=attrname self.attrtype=attrt ...

  2. taro + taro-ui + dva

    taro的安装及使用 安装 Taro 开发工具 @tarojs/cli 使用 npm 或者 yarn 全局安装,或者直接使用npx $ npm install -g @tarojs/cli $ yar ...

  3. angular 禁止事件冒泡 和 默认行为

    事件冒泡和事件捕捉一直以来都是被讨论的话题,也许大家平时在工作中没有遇到过需要解决事件冒泡的情况举个例子: <body ng-click="fun1()"> <d ...

  4. .gnet标准

    1  预祝 .gnet进军w3c!!!成为html5的标准 2  .gnet在进行压缩的时候.图片信息不会丢失 3 .gnet须要csdn.百度搜索.360.腾讯.新浪微博.各种视频软件的支持..! ...

  5. Random.org -- 真正的随机数生成器

    接触过程序设计的人一定对随机数不陌生.随机数的用途非常广,比方在測试.分布和统计程序.游戏中. 大多数编程语言也提供了随机数库.能够方便的使用. 只是从严格意义上来讲,这些程序生成的随机数并非真正的随 ...

  6. 系统流畅/性能受限 谷歌Nexus4详细评测

    http://mobile.it168.com/a2012/1220/1437/000001437938_8.shtml

  7. Asp.Net MVC项目通过Git同步到新开发设备上后无法作为网站启动

    右键项目名->属性->启动项目->单启动项目,在下拉框中选择你的网站主项目就可以了.(由于用的英文版,所以翻译的内容可能略有差异)

  8. Inno Setup 打包的文件以管理员权限执行

    最近发现一个问题,就是Inno Setup打包的程序安装完毕后执行需求管理员权限的程序的时候会失败( inno createprocess   须要提升),解决问题的最简单办法就是打包的后的程序也以管 ...

  9. Newton&#39;s method Drawback and advantage

     Newton Raphson Method: Advantages and Drawbacks:   v=QwyjgmqbR9s" target="_blank"& ...

  10. Android在非UI线程中更新UI的方法

    1.使用Thread+Handler实现非UI线程更新UI界面 在UI Thread中创建Handler.用sendMessage(message)或者obtainMessage(result, ob ...