requireJS的使用说明
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
requireJS的使用说明的更多相关文章
- requirejs中Shims使用说明
RequireJS中如果使用AMD规范,在使用的过程中没有太多的问题,如果加载非AMD规范的JS文件,就需要使用Require中的shim. require.config({ paths:{ jque ...
- bootstrap + requireJS+ director+ knockout + web API = 一个时髦的单页程序
也许单页程序(Single Page Application)并不是什么时髦的玩意,像Gmail在很早之前就已经在使用这种模式.通常的说法是它通过避免页面刷新大大提高了网站的响应性,像操作桌面应用程序 ...
- 实现一个类 RequireJS 的模块加载器 (二)
2017 新年好 ! 新年第一天对我来说真是悲伤 ,早上兴冲冲地爬起来背着书包跑去实验室,结果今天大家都休息 .回宿舍的时候发现书包湿了,原来盒子装的牛奶盖子松了,泼了一书包,电脑风扇口和USB口都进 ...
- 使用RequireJS并实现一个自己的模块加载器 (一)
RequireJS & SeaJS 在 模块化开发 开发以前,都是直接在页面上引入 script 标签来引用脚本的,当项目变得比较复杂,就会带来很多问题. JS项目中的依赖只有通过引入JS的顺 ...
- 使用gulp解决RequireJS项目前端缓存问题(二)
1.前言 这一节,我们主要解决在上一节<使用gulp解决RequireJSs项目前端缓存问题(一)>末尾提到的几个问题: 对通过require-config.js引入的js文件修改后,没有 ...
- Atitit.项目修改补丁打包工具 使用说明
Atitit.项目修改补丁打包工具 使用说明 1.1. 打包工具已经在群里面.打包工具.bat1 1.2. 使用方法:放在项目主目录下,执行即可1 1.3. 打包工具的原理以及要打包的项目列表1 1. ...
- AngularJs2与AMD加载器(dojo requirejs)集成
现在是西太平洋时间凌晨,这个问题我鼓捣了一天,都没时间学英语了,英语太差,相信第二天我也看不懂了,直接看结果就行. 核心原理就是require在AngularJs2编译过程中是关键字,而在浏览器里面运 ...
- angularjs集成requirejs
其实说成使用requirejs加载angularjs应用会更贴切一些 <body> <span ng-controller="homeController"> ...
- awk使用说明
原文地址:http://www.cnblogs.com/verrion/p/awk_usage.html Awk使用说明 运维必须掌握的三剑客工具:grep(文件内容过滤器),sed(数据流处理器), ...
随机推荐
- 51nod-1574-排列转换
1574 排列转换 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 收藏 关注 现在有两个长度为n的排列p和s.要求通过交换 ...
- leetcode 720. Longest Word in Dictionary
Given a list of strings words representing an English Dictionary, find the longest word in words tha ...
- Vundle简介安装
body, table{font-family: 微软雅黑} table{border-collapse: collapse; border: solid gray; border-width: 2p ...
- 转载-lvs官方文档04-LVS集群的负载调度
LVS集群的负载调度 章文嵩 (wensong@linux-vs.org) 2002 年 5 月 本文主要讲述了LVS集群的IP负载均衡软件IPVS在内核中实现的各种连接调度算法.针对请求的服务时间变 ...
- 将VIM打造成强大的IDE
转载自:所需即所获:像 IDE 一样使用 vim 如侵犯您的版权,请联系:2378264731@qq.com --------------------------------------------- ...
- mac 使用 pf 做端口转发
Mac os中我发现直接输入localhost是拒绝访问的,原因在于OSX 对于1024内端口需要 root 权限,因此需要做一个80端口的转发. 曾经的 ipfw 已经被 pf 所替换. 首先我们要 ...
- Django项目的ORM操作之--模型类数据查询
1.查询基本格式及理解: 类名.objects.[查询条件] 例如我们要查询数据库中一张表(bookinfo)的所有数据,sql语句为:select * from bookinfo, 对应模型类的操作 ...
- socket函数sendto与send的区别
C:socket相关的sendto()函数简介 http://blog.csdn.net/flytiger_ouc/article/details/19634279 文中提到SOCK_DGRAM, S ...
- (转) MapReduce Design Patterns(chapter 2 (part 1))(二)
CHAPTER 2 .Summarization Patterns 随着每天都有更多的数据加载进系统,数据量变得很庞大.这一章专注于对你的数据顶层的,概括性意见的设计模式,从而使你能扩展思路,但可能 ...
- CentOS常用命令汇总
将新创建的数据分配某个用户访问 grant all privileges on zhouzdb.* to 'zhouz'@'%' identified by '1234'; flush privile ...