【原】requirejs学习笔记
随着JS越来越庞大,已经不仅仅是以前复制粘贴做特效的时代了,JS越来越偏向于业务逻辑与应用。JS在web开发中占有越来越重要的地位。
由于JS代码庞大,文件数目多,传统的使用<script src=""></script>会带来很多性能的问题,因此requirejs可以为我们提供解决思路,它有以下的功能:
1、声明不同js文件之间的依赖
2、可以按需、并行、延时载入js库
3、可以让我们的代码以模块化的方式组织
下面进行实战:
文档结构是这样的
.js/app/config.js
.js/require.js
.js/app/hello1.js
.js/app/hello2.js
.js/app/hello3.js
index.html
在index.html中引入requirejs
<script src="js/require.js" data-main="js/app/config.js"></script>
其中,data-main指定主要的配置文件. config.js如下:
require.config({
//默认情况下模块所在目录为js/app
baseUrl: 'js/app',
//这里设置的路径是相对与baseUrl的,不要包含.js,否则会报错
paths: {
h1: 'hello1',
h2:'hello2',
h3:'hello3'
}
});
// 开始逻辑.
requirejs(['h1', 'h2', 'h3'],
function (h1, h2, h3) {
//这里是引入那三个js之后的回调函数
h1.hello(); //I am hello1
h2.hello(); //I am hello2
h3.hello(); //I am hello3
});
hello1.js
define([], function() {
return {
hello: function() {
console.log("I am hello1");
}
}
});
hello2.js
define([], function() {
return {
hello: function() {
console.log("I am hello2");
}
}
});
hello3.js
define([], function() {
return {
hello: function() {
console.log("I am hello3");
}
}
});
require加载文件时,会自动加上.js后缀。当某些模块依赖其他模块时,可以通过define([xxx],function(xxx){yyy});的方式添加依赖关系,
require会在异步加载后,自动调整次序。
shim
当有些js不是AMD规范的时候,或者我有一个public.js需要依赖于jquery时,config.js可以这样写
代码如下:
requirejs.config({
baseUrl: 'js/app',
paths:{
"jquery":"jquery-1.11.2.min",
"public":"public",
},
// 这个配置是你在引入依赖的时候的包名,比如一些不是AMD规范的插件
shim: {
'public': {
deps: ['jquery'],
//exporets 就是被外界访问的接口,比如jquery的$
exports: 'public'
},
}
});
require(['public'], function (p) {
// somecode
});
使用中遇到的问题以及解决方法:
当我require.js没有用在单页面的时候,我遇到了这样一个问题:
比如我1.html需要有另外的一些单独函数,而其他页面是不需要的,并且我希望在加载完config.js之后再执行我那个单独的函数,那要怎么做呢。
如果直接写在config.js里面的require后的回调函数那里,那么要单独分开每一个config.js,这样就没意思了。一位博友给出的答案是
index.html
<script src="js/require.js" data-main="js/app/config.js" require-module="js/app/other.js"></script> //加个require-module属性,后面加上你需要单独引入的js
config.js 里面这样
require.config({
baseUrl: 'js/app',
paths:{
"jquery":"jquery-1.11.2.min",
"public":"public",
},
shim: {
'public': {deps: ['jquery'],exports:'public'}
}
});
require(['jquery','public'], function($,p){
//改变的是这里
var scripts = document.getElementsByTagName("script");
for (var i = 0; i < scripts.length; i++) {
// 获取页面所需加载模块入口名称,需要单独引入的js写在 script里面 require-module这个属性这里
var module = scripts[i].getAttribute("require-module");
if (module != undefined && module != "") {
require([module ]);
break;
}
}
});
这样的话,你就可以在确保config里面的js加载完毕后,再加载你自己的js
暂时先写到这里先,有错误的话欢迎指出
【原】requirejs学习笔记的更多相关文章
- RequireJS学习笔记
前言 进入移动前端是很不错的选择,这块也是我希望的道路,但是不熟悉啊... 现在项目用的是require+backbone,整个框架被封装了一次,今天看了代码搞不清楚,觉得应该先从源头抓起,所以再看看 ...
- Requirejs学习笔记(一)
中文api 和 英文api网上都有的我就不翻译了,我的学习方法是先看英文api,然后看不懂的就比对中文api看一遍. requirejs可以帮助js代码模块化开发,模块化意味了解决了代码凌乱的问题,方 ...
- RequireJS学习笔记(转)
前言 进入移动前端是很不错的选择,这块也是我希望的道路,但是不熟悉啊... 现在项目用的是require+backbone,整个框架被封装了一次,今天看了代码搞不清楚,觉得应该先从源头抓起,所以再看看 ...
- RequireJs学习笔记之data-main Entry Point
You will typically use a data-main script to set configuration options and then load the first appli ...
- RequireJs学习笔记之Define a Module
简单的键值对定义define({ color: "black", size: "unisize"}); 如果一个模块没有任何依赖,又需要做用一个函数 ...
- Matplotlib学习笔记(二)
原 Matplotlib学习笔记 参考:Python数据科学入门教程 Python3.6.1 jupyter notebook .caret, .dropup > .btn > .car ...
- Matplotlib学习笔记(一)
原 matplotlib学习笔记 参考:Python数据科学入门教程 Python3.6.1 jupyter notebook .caret, .dropup > .btn > .ca ...
- 【原】Learning Spark (Python版) 学习笔记(三)----工作原理、调优与Spark SQL
周末的任务是更新Learning Spark系列第三篇,以为自己写不完了,但为了改正拖延症,还是得完成给自己定的任务啊 = =.这三章主要讲Spark的运行过程(本地+集群),性能调优以及Spark ...
- 并发编程学习笔记(4)----jdk5中提供的原子类及Lock使用及原理
(1)jdk中原子类的使用: jdk5中提供了很多原子类,它会使变量的操作变成原子性的. 原子性:原子性指的是一个操作是不可中断的,即使是在多个线程一起操作的情况下,一个操作一旦开始,就不会被其他线程 ...
随机推荐
- [HDU5902]GCD is Funny(xjb搞)
题意:n个数每次选三个数删除,取其中两个数将gcd放回去两次,问最后剩的数可能是多少 分析:考虑最优情况: 先拿出三个数,留下两个x,x 再来一个y,(x,x,y)我们可以删去一个x,留下两个gcd ...
- [Codevs 1421]秋静叶&秋穣子(最大-最小博弈)
题目:http://codevs.cn/problem/1421/ 分析:有向树上的最大-最小博弈 先手与后手的策略不同: 先手A:让对方取得尽量少的前提下,自己取得尽量大 后手B:让自己取得尽量多的 ...
- Ubuntu下安装支付宝安全控件
在淘宝购物时,安装支付宝安全控件.下载了一个文件.tar.gz(非常小的一个文件). tar -zxvf 解压之,只有一个aliedit.sh文件,运行这个文件就安装成功了,重启firefox就可以用 ...
- Change Eclipse Tooltip's Color in Ubuntu
这个问题十分高级,随着Ubuntu版本的变迁这个问题的解决方案也在不断变化 最开始,SystemSettings里面可以设置工具条背景色,后来这个选项在新版本Ubuntu中消失了 我用过Ubuntu1 ...
- 【BZOJ 2818】gcd 欧拉筛
枚举小于n的质数,然后再枚举小于n/这个质数的Φ的和,乘2再加1即可.乘2是因为xy互换是另一组解,加1是x==y==1时的一组解.至于求和我们只需处理前缀和就可以啦,注意Φ(1)的值不能包含在前缀和 ...
- bootstrap fileinput-上传回调
通过第三分jquery重新绑定一个重新加载事件 $("#file-4").on("fileuploaded", function(event, data, pr ...
- 【HDU 4940】Destroy Transportation system(无源无汇带上下界可行流)
Description Tom is a commander, his task is destroying his enemy’s transportation system. Let’s repr ...
- DIRECTORY_SEPARATOR:PHP 系统分隔符常量
今天在nginx部署项目,在浏览器输入http://127.0.0.2/index.php/system/category/?action=list 老是提示error nginx配置没有问题,下了其 ...
- Python中remove,del和pop的区别
以a=[1,2,3] 为例,似乎使用del, remove, pop一个元素2 之后 a都是为 [1,3], 如下:http://Novell.Me >>> a=[1,2,3] &g ...
- filter,map,reduce,lambda(python3)
1.filter filter(function,sequence) 对sequence中的item依次执行function(item),将执行的结果为True(符合函数判断)的item组成一个lis ...