RequireJS多页面应用实例分析


Posted in Javascript onJune 29, 2016

本文是requireJS的一些知识点的总结,配上多页面应用中的实例分析。

本案例的目录结构如下:

requireJS API的三个主要函数:define(创建模块),require(加载模块),config(配置)

1、 HTML文件中加载JS文件

page1.html内容如下:

<!DOCTYPE html>
<html>
<head>
<title>Page 1</title>
<script data-main="scripts/page1" src="scripts/lib/require.js"></script>
</head>
<body>
<a href="page2.html">Go to Page 2</a>
</body>
</html>

page2.html内容如下:

<!DOCTYPE html>
<html>
<head>
<title>Page 2</title>
<script data-main="scripts/page2" src="scripts/lib/require.js"></script>
</head>
<body>
<a href="page1.html">Go to Page 1</a>
</body>
</html>

知识扩展:

data-main属性指定网页程序的主模块,这个文件被requireJS首先加载。由于requireJS默认的文件后缀名是js,所以可以把page1.js简写成page1

加载脚本文件的根路径优先规则

用require()加载模块时,省略.js后缀,会从baseUrl下查找;如果带有.js后缀、或以”/"开始、或包含URL协议(http/https)则将根

据你的具体路径设置去查找

config > data-main > 默认baseUrl

不对data-main和config进行设置,则默认baseUrl为引用require.js的那个HTML页面所在目录

设置data-main,则baseUrl为主模块所在目录(如第一段HTML中的主模块为page1.js,因此以其所在目录/scripts为根目录)

配置config,显式设置baseUrl,也可为每一个模块单独设置路径

2、对模块的路径等进行配置

使用require.config()方法,可以对模块的加载行为进行自定义。在多页面应用中,可以将配置写在共用的文件中,如本例中的common.js文件,然后各个页面加载当前配置后,在回调函数中再加载各自需要的模块。

common.js代码如下:

require.config({
baseUrl: 'scripts/app',
paths: {
jquery: [
'http://lib.sinaapp.com/js/jquery/1.9.1/jquery-1.9.1.min',
'../lib/jquery'
]
}
});

知识扩展:

支持的配置项:

baseUrl :

所有模块的查找根路径。注意:当加载的js文件(以.js结尾、以”/”开头、含有协议),不会使用baseUrl;

paths :

path映射那些不直接放置于baseUrl下的模块名。设置path时起始位置是相对于baseUrl的,除非该path设置以"/"开头或含有URL协议;

注意:在paths中定义的路径不能含有.js后缀,因为路径解析机制会自动添加上.js后缀;而且加载路径可以设置多个,如从CDN加载失败,则加载本地js文件;

shim:

为那些没有使用define()来声明依赖关系的模块进行配置;

其中需要注意两个参数:

(1)exports值(输出的变量名),暴露方法接口

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

如:

require.config({
baseUrl: '/scripts/lib',
shim:{
zepto: {
exports: '$'
},
backbone: {
deps: ['underscore', 'zepto'],
exports: 'Backbone'
},
'zepto.animate': ['zepto']
}
});

3、模块的加载

page1.js代码如下:

require(['./common'], function (common) {
require(['sayPage1'], function (sayPage1) {
sayPage1.hello();
});
});

page2.js代码如下:

require(['./common'], function (common) {
require(['sayPage2'], function (sayPage2) {
sayPage2.hello();
});
});

知识拓展: 

 require()函数接受两个参数。第一个参数是一个数组,表示所依赖的模块;第二个参数是一个回调函数,当前面指定的模块都加载成功后,它才会被调用。加载的模块可以作为回调函数的参数进行调用。

这里为了保证配置完成后才加载需要的模块,主要是为了路径的正确解析,在回调函数中再进行require。

4、模块的定义

sayPage1.js中的代码:

define(['jquery'], function($) {
function sayHi(){
$('body').append('<h1>Hello page1!</h1>');
}
return {
hello: sayHi
}
});

知识扩展:

define函数也接受两个参数。第一个参数为所依赖模块组成的数组,第二个参数是一个回调函数。

当然最后上线的时候还要进行JS文件的合并与压缩,可以利用r.js,方便快捷~

以上所述是小编给大家介绍的RequireJS多页面应用实例分析,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
js 操作select与option(示例讲解)
Dec 20 Javascript
jQuery点击自身以外地方关闭弹出层的简单实例
Dec 24 Javascript
JavaScript中的this关键字使用详解
Aug 14 Javascript
谈谈JavaScript类型系统之Math
Jan 06 Javascript
JavaScript常用字符串与数组扩展函数小结
Apr 24 Javascript
JS字符串长度判断,超出进行自动截取的实例(支持中文)
Mar 06 Javascript
vuex 项目结构目录及一些简单配置介绍
Apr 08 Javascript
vue-cli项目中使用公用的提示弹层tips或加载loading组件实例详解
May 28 Javascript
一份超级详细的Vue-cli3.0使用教程【推荐】
Nov 15 Javascript
详解小程序不同页面之间通讯的解决方案
Nov 23 Javascript
微信小程序实现订单倒计时
Nov 01 Javascript
浅谈webpack和webpack-cli模块源码分析
Jan 19 Javascript
全面了解JS中的匿名函数
Jun 29 #Javascript
大型JavaScript应用程序架构设计模式
Jun 29 #Javascript
基于JS模仿windows文件按名称排序效果
Jun 29 #Javascript
JavaScript中闭包的写法和作用详解
Jun 29 #Javascript
浅谈window.onbeforeunload() 事件调用ajax
Jun 29 #Javascript
json对象转为字符串,当做参数传递时加密解密的实现方法
Jun 29 #Javascript
jQuery ajax调用后台aspx后台文件的两种常见方法(不是ashx)
Jun 28 #Javascript
You might like
分享下php5类中三种数据类型的区别
2015/01/26 PHP
PHP 正则表达式小结
2015/02/12 PHP
JSON PHP中,Json字符串反序列化成对象/数组的方法
2018/05/31 PHP
php进程(线程)通信基础之System V共享内存简单实例分析
2019/11/09 PHP
javascript中的__defineGetter__和__defineSetter__介绍
2014/08/15 Javascript
js实现的四级左侧网站分类菜单实例
2015/05/06 Javascript
jQuery获取上传文件的名称的正则表达式
2015/05/21 Javascript
仅9张思维导图帮你轻松学习Javascript 就这么简单
2016/06/01 Javascript
轻松掌握JavaScript策略模式
2016/08/25 Javascript
vue.js利用Object.defineProperty实现双向绑定
2017/03/09 Javascript
浅谈jQuery框架Ajax常用选项
2017/07/08 jQuery
JS组件系列之Gojs组件 前端图形化插件之利器
2017/11/29 Javascript
Layui数据表格之获取表格中所有的数据方法
2018/08/20 Javascript
vue.js实现带日期星期的数字时钟功能示例
2018/08/28 Javascript
vue-cli 使用axios的操作方法及整合axios的多种方法
2018/09/12 Javascript
详解多页应用 Webpack4 配置优化与踩坑记录
2018/10/16 Javascript
js实现下拉框二级联动
2018/12/04 Javascript
layui实现二维码弹窗、并下载到本地的方法
2019/09/25 Javascript
VUE前端从后台请求过来的数据进行转换数据结构操作
2020/11/11 Javascript
用TensorFlow实现戴明回归算法的示例
2018/05/02 Python
Python 实现将numpy中的nan和inf,nan替换成对应的均值
2020/06/08 Python
Python基于callable函数检测对象是否可被调用
2020/10/16 Python
python通过cython加密代码
2020/12/11 Python
今天学到的CSS最新技术(与图片背景相关)
2012/12/24 HTML / CSS
美国畅销的跑步机品牌:ProForm
2017/02/06 全球购物
企业总经理任命书
2014/06/05 职场文书
施工安全标语
2014/06/07 职场文书
先进员工获奖感言
2014/08/14 职场文书
廉洁自律承诺书2015
2015/01/22 职场文书
成品仓库管理员岗位职责
2015/04/09 职场文书
篮球比赛通讯稿
2015/07/18 职场文书
关于golang高并发的实现与注意事项说明
2021/05/08 Golang
SqlServer数据库远程连接案例教程
2021/07/15 SQL Server
vue打包时去掉所有的console.log
2022/04/10 Vue.js
Android在Sqlite3中的应用及多线程使用数据库的建议
2022/04/24 Java/Android
java中如何截取字符串最后一位
2022/07/07 Java/Android