RequireJS的目标是鼓励代码的模块化,它使用了不同于传统<script>标签的脚本加载步骤。可以用它来加速、优化代码,但其主要目的还是为了代码的模块化

requireJS 加载代码的时候,其相对路径为baseUrl,baseUrl通常被设置为data-main指定文件的目录

em:

<script src="js/libs/require.js"  defer async="true"  data-main="js/main.js"></script>

data-main:起始的js

src:依赖的require库js

举一个简单的例子:

Index.html:

<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<script type="text/javascript" data-main="js/main.js" src="js/require.js"></script>
</head>
<body> </body>
</html>

mian.js

require.config({
baseUrl:"js/lib",//设置基本路径
paths:{
"user":'user', //----- js/lib/user
"jquery":"jquery-1.11.3" //-----js/lib/jquery-1.11.3
} /*方式二:
paths:{
"user":'lib/user',
"jquery":"lib/jquery-1.11.3"
}
*/
});
require(["jquery","user"],function($,user){//依赖的模块
$(function(){
alert("juery加载完毕");
});

对于每一个分开的js: 采用AMD模式来编写模块,模块必须采用特定的define()函数来定义

User.js(此时user.js是没有依赖模块的)

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

注:若是模块有依赖,第一个参数是一个数组,第二个参数是匿名函数

前面的依赖项将以参数的形式传递给函数,顺序与之前一致

Demo:

define([“../cart”,”../inventory”],function(cart,inventory){
return {
color:”blue”,
addToCart:function(){
inventory.decrement(this);
cart.add(this);
}
}
});

模块也可以不返回对象,任何有效的返回都是可以的。

对于没有采用AMD规范编写。如果要加载它们的话,必须先定义它们的特征。

 注:require.config()接受一个配置对象,这个对象除了有前面说过的paths属性之外,还有一个shim属性,专门用来配置不兼容的模块。具体来说,每个模块要定义

(1)exports值(输出的变量名),表明这个模块外部调用时的名称;

(2)deps数组,表明该模块的依赖性。

em:

require.config({
baseUrl:"",
paths:{
"angular":"../ipi_view/eaf/common/lib/angualr"
}
shim:{
'angular':{
exports:'angular',
deps:['angular']
     },
‘jquery-slide’:{
deps: [‘jquery’]
},
    'jquery.scroll': {
      deps: ['jquery'],// 该模块的依赖性。
      exports: 'jQuery.fn.scroll'//这个模块外部调用时的名称
   }
}
}); require([‘jquery-slide’],function(jQ){ ......../...... });//保证了先加载jquery,在加载其插件

进一步解释一下:

1)require.config的作用(主要用于解决有些第三法方非AMD库文件的问题),如果你的文件都是AMD,那么你就可以完全删除require.config这个东西了.

2)require.config的另一个作用就是解决过度臃肿的文件路径问题(直接说我们一般在require.config里面可以简化,将长的路径问题一次性解决).

require.config({
    paths:{
      “mycheck“:'../ipi_view/common/mycheck',//自定义的一个公共指令
    }
})
require(['mycheck'],function(){..................})

例如:

在paths中配置的文件可以直接在require(['mycheck'],function(){......})中引用,这样你的项目中所有的js文件中都会引入mycheck,这样意味着你可以直接在页面上使用。

当然也可以

require([''../ipi_view/common/mycheck',‘’],function(){..................})

参考:http://www.ruanyifeng.com/blog/2012/11/require_js.html

最新文章

  1. Operation not allowed after ResultSet closed--操作mysql数据库
  2. 读取excel数据,并进行统计输出
  3. Linux进程的前后台切换
  4. IOS UIScrollView + UIButton 实现segemet页面和顶部标签页水平滚动效果
  5. 怎样绘制ZBrush中的纹理
  6. 《编写高质量代码-Web前端开发修改之道》笔记--第三章 高质量的HTML
  7. Java学习笔记——动态代理
  8. 阻止浏览器冒泡事件,兼容firefox和ie
  9. 用es6类封装的图片预加载技术!
  10. Solidity的三种合约间的调用方式 call、delegatecall 和 callcode
  11. openstack IPV6
  12. JSP_tomcat_mysql_注冊验证用户;
  13. unity中鼠标按下加速漫游,鼠标抬起减速漫游。
  14. 如何删除PeopleSoft Process Definition
  15. TCP是如何实现三次握手的?
  16. PC端页面同比例缩放
  17. ConcurrentModificationException
  18. shell脚本分析nginx日志
  19. jvm之gc日志
  20. STM32利用CUBEMX建立自定义HID工程,并且完成64字节的IN,OUT传输功能。

热门文章

  1. nmcli 使用记录---fatt
  2. IOS-Storyboard全解析-第二部分
  3. 发送垃圾邮件的僵尸网络——药物(多)、赌博、股票债券等广告+钓鱼邮件、恶意下载链接、勒索软件+推广加密货币、垃圾股票、色情网站(带宏的office文件、pdf等附件)
  4. NPOI自定义单元格背景颜色
  5. jqeury 基础
  6. 【Html 学习笔记】第八节——表单实践
  7. HTML5音视频播放(Video,Audio)和常见的坑处理
  8. Hibernate主键生成策略详解
  9. windows下类似Linux下的grep命令
  10. three.js入门系列之导入拓展类