requirejs的使用和快速理解
样例来自https://www.jianshu.com/p/b8a6824c8e07
requirejs有以下功能
- 声明不同js文件之间的依赖
- 可以按需、并行、延时载入js库
- 可以让我们的代码以模块化的方式组织
- 初看起来并不复杂。
创建以下目录

在HTML中,添加<script>标签:<script data-main="js/script/main" src="js/lib/require.js" type="text/javascript"></script>
<!DOCTYPE html>
<html>
<head>
<title>Require Demo 1</title>
</head>
<body>
<div>
<h1>Require Demo 1 -- usage of Require()</h1>
<button id="contentBtn">Click me</button>
<p id="messagebox"></p>
</div>
<script data-main="js/script/main" src="js/lib/require.js" type="text/javascript"></script>
</body>
</html>
requirejs对外暴露的变量其实就三个,requirejs,require,define。这其中requirejs 只是require的一个别名,目的是如果页面中有require其它实现了,你还是能通过使用requirejs来使用requireJS API的(本文中没有相关冲突,所以还是使用require)。
我们可以看到在script标签中我们加载了require.js,其中有一个data-main,他是在require.js加载完成后通过回调的方法去加载data-main里的js
这是我们的main.js
// js/script/main.js
require.config(
{
paths: {//一个模块ID和路径的映射,这样在后续的所有函数中就可以直接通过模块ID来引入依赖,而不用再多次引入依赖多次输入路径带来的麻烦。
jquery: '../lib/jquery-1.11.1',
chw_desc:'desc',
chw_alertdesc:'alertdesc',
chw_alert:'alert'
},
// shim:{
// 'alert': {exports: 'f'}
// }
}
);
require(['jquery'],function ($) {
$(document).on('click','#contentBtn',function(){
$('#messagebox').html('You have access Jquery by using require()');
require(['desc'],function(chw){
alert('desc: '+JSON.stringify(chw));
});
// require(['chw_alertdesc'],function(t){
// alert('alertdest: '+JSON.stringify(t));
// });
// require(['alert'],function(chw){
// chw();
// });
});
});
1.首先看最基础的decs.js(没有任何依赖)
他的require函数接受的第一个参数是所依赖模块的一个数组,即要想执行我的回调函数,你必须加载完desc.js这个文件,如果你有如本例子中设置了模块ID和路径的映射,那你在传入依赖的时候就可以使用模块ID来代替路径(我可以换成require(['chw_desc'],function(chw){})),如果没有配置模块ID你当然也可以通过路径来引进对应的模块。接着是传入回调函数,当引入的依赖加载完毕后,这个回调函数就会被触发。如果你传入的依赖有注入变量(函数),然后在回调函数中需要用到,你就需要按照顺序在回调函数的参数中添加别名,在本例子中可以通过别名$来使用jQuery的相关API(你也可以换成其他的符号比如‘G’,'F'等等)。
看看desc.js代码,没有任何依赖,desc.js他定义了一个模块,define(name, deps, callback)第一个参数是定义模块名,第二个参数是传入定义模块所需要的依赖,第三个函数则是定义模块的主函数,主函数和require的回调函数一样,同样是在依赖加载完以后再调用执行。第一参数不是很必要,因为如果哪一天我将这个文件转移到其他目录下,那我就得在这这里再修改一次模块名。
define(function(){
return{
desc:'this js will be request only if it is needed',
};
})
2.在看看alertdesc,js(依赖于desc.js)
define(['desc'],function(){
return{
desc:'this js will be request only if it is needed',
};
})
同样在require函数里面可以写成 require(['alertdesc'],function(t){})
3. alert.js. (加载非规范的模块没使用define定义模块)
function f() {
alert("hahah");
}
require.config()接受一个配置对象,这个对象除了有前面说过的paths属性之外,还有一个shim属性,专门用来配置不兼容的模块。具体来说,每个模块要定义(1)exports值(输出的变量名),表明这个模块外部调用时的名称;(2)deps数组,表明该模块的依赖性,他就是将某个依赖中的某个全局变量暴露给requirejs,当作这个模块本身的引用。
shim:{
'alert': {exports: 'f'}
}
由于我这个模块没有依赖,所以没必要写deps,上面的代码表示的是在'alert'(在相对路径下的alert.js文件中),把f函数暴露出来成为全局可用,那当我们的代码依赖于 alert 模块的时候,就可以拿到这个 f 函数的引用了。注意的是require(['alert'],function(chw){}});不能换成require(['chw_alert'],function(chw){}});因为在你暴露变量的时候你是暴露给模块名为'alert',所以对于其他的模块并不是全局可用,如果要换成chw_alert,那么shim中应该这样写shim:{'chw_alert':{exports:'f'}}
requirejs的使用和快速理解的更多相关文章
- 【转】快速理解Kafka分布式消息队列框架
from:http://blog.csdn.net/colorant/article/details/12081909 快速理解Kafka分布式消息队列框架 标签: kafkamessage que ...
- Spark机器学习 Day2 快速理解机器学习
Spark机器学习 Day2 快速理解机器学习 有两个问题: 机器学习到底是什么. 大数据机器学习到底是什么. 机器学习到底是什么 人正常思维的过程是根据历史经验得出一定的规律,然后在当前情况下根据这 ...
- 快速理解web语义化
什么是Web语义化 Web语义化是指使用恰当语义的html标签.class类名等内容,让页面具有良好的结构与含义,从而让人和机器都能快速理解网页内容.语义化的web页面一方面可以让机器在更少的人类干预 ...
- 快速理解高性能HTTP服务端的负载均衡技术原理(转)
1.前言 在一个典型的高并发.大用户量的Web互联网系统的架构设计中,对HTTP集群的负载均衡设计是作为高性能系统优化环节中必不可少的方案.HTTP负载均衡的本质上是将Web用户流量进行均衡减压,因此 ...
- 脑残式网络编程入门(四):快速理解HTTP/2的服务器推送(Server Push)
本文原作者阮一峰,作者博客:ruanyifeng.com. 1.前言 新一代HTTP/2 协议的主要目的是为了提高网页性能(有关HTTP/2的介绍,请见<从HTTP/0.9到HTTP/2:一文读 ...
- 字符编码那点事:快速理解ASCII、Unicode、GBK和UTF-8
原作者:阮一峰(ruanyifeng.com),现重新整理发布,感谢原作者的无私分享. 1.引言 今天中午,我突然想搞清楚 Unicode 和 UTF-8 之间的关系,就开始查资料. 这个问题比我想象 ...
- [转帖]十分钟快速理解DPI和PPI,不再傻傻分不清!
十分钟快速理解DPI和PPI,不再傻傻分不清! https://baijiahao.baidu.com/s?id=1605834796518990333&wfr=spider&for= ...
- 快速理解VirtualBox的四种网络连接方式
VirtualBox中有4中网络连接方式: NAT Bridged Adapter Internal Host-only Adapter VMWare中有三种,其实他跟VMWare 的网络连接方式都是 ...
- 深入浅出 1 - AI量化策略快速理解
我们在用AI来编写量化策略过程中,主要用到了机器学习,先来从一张图直观理解什么是机器学习:人类对新问题做出有效决策依靠的是过去积累的许多经验,并对经验进行利用,而对机器来说,“经验”以“数据”方式 ...
随机推荐
- IIS版本号可以被识别 解决方案
1.在IIS配置文件中进行修改. 借助IIS URL Rewrite Module,添加如下的重写规则: <rewrite> <allowedServerVariables> ...
- IIS--互联网信息服务
IIS--互联网信息服务 1.IIS是微软出品的一个服务器插件 2.IIS的功能:1)发布web网站 2)发布ftp站点 WEB服务器:1.监听TCP80端口 --- http://www.baidu ...
- HttpUtility.UrlEncode编码重写
1. 某些系统方法,例如.NET系统方法HttpUtility.UrlEncode会将‘=’编码成‘%3d’,而不是%3D,导致加密签名通不过验证,请开发者注意检查. 2.Java 1.3和早期版本中 ...
- ZH奶酪:Ubuntu 14.04安装LAMP(Linux,Apache,MySQL,PHP)
(Linux Operating System,Apache Web Server,MySQL database,PHP) 首先,一个三行命令搞定的方法: sudo apt-get update su ...
- pc端,移动端css重置样式
pc: html{font-family:"Microsoft YaHei UI","Microsoft YaHei",sans-serif;-ms-text- ...
- I. Max answer(RMQ预处理前缀和)
题目链接: https://nanti.jisuanke.com/t/38228 题目大意:给你n个数,让你找出一个区间中f的最大值,具体的f计算方法,这段区间的和乘以这段区间的最小值. 具体思路:我 ...
- Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC
解决Invalid character found in the request target. The valid characters are defined in RFC 7230 and RF ...
- php in_array() 循环大量数组时效率特别慢问题
in_array() 会循环数组内部元素逐个匹配,特别耗时,换成以下方式,效率大大提升
- k64 datasheet学习笔记25--Multipurpose Clock Generator (MCG)
0.前言 MCG模块为MCU提供了几种可选时钟源.模块包含一个FLL和一个PLL.FLL使用内部或外部参考时钟是可控的,PLL受外部参考时钟控制 模块可以选择FLL或PLL输出时钟,或内/外部参考时钟 ...
- Java正则表达式应用
查找html中的图片 import java.util.regex.Matcher; import java.util.regex.Pattern; public class PicDownload ...