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表单提交的代码
Sep 13 Javascript
Javascript学习笔记8 用JSON做原型
Jan 11 Javascript
js 静态动态成员 and 信息的封装和隐藏
May 29 Javascript
20个非常棒的 jQuery 幻灯片插件和教程分享
Aug 23 Javascript
js中一维数组和二位数组中的几个问题示例说明
Jul 17 Javascript
AngularJS教程 ng-style 指令简单示例
Aug 03 Javascript
JS仿QQ好友列表展开、收缩功能(第一篇)
Jul 07 Javascript
vue 实现 ios 原生picker 效果及实现思路解析
Dec 06 Javascript
webpack4 升级迁移的实现
Sep 12 Javascript
对angularJs中自定义指令replace的属性详解
Oct 09 Javascript
微信二次分享报错invalid signature问题及解决方法
Apr 01 Javascript
微信小程序登录时如何获取input框中的内容
Dec 04 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
php 生成自动创建文件夹并上传文件的示例代码
2014/03/07 PHP
PHP中调用C/C++制作的动态链接库的教程
2016/03/10 PHP
PHP中Static(静态)关键字功能与用法实例分析
2019/04/05 PHP
简明json介绍
2008/09/28 Javascript
jQuery实现级联菜单效果(仿淘宝首页菜单动画)
2014/04/10 Javascript
js浏览器本地存储store.js介绍及应用
2014/05/13 Javascript
nodejs命令行参数处理模块commander使用实例
2014/09/17 NodeJs
DOM基础教程之使用DOM
2015/01/19 Javascript
解决node-webkit 不支持html5播放mp4视频的方法
2015/03/11 Javascript
浅谈JavaScript中的作用域和闭包问题
2015/07/07 Javascript
JavaScript深度复制(deep clone)的实现方法
2016/02/19 Javascript
JS实现鼠标滑过显示边框的菜单效果
2016/09/21 Javascript
简单理解vue中track-by属性
2016/10/26 Javascript
jQuery实现新闻播报滚动及淡入淡出效果示例
2018/03/23 jQuery
vue.js中实现登录控制的方法示例
2018/04/23 Javascript
vue 做移动端微信公众号采坑经验记录
2018/04/26 Javascript
vue组件中的数据传递方法
2018/05/14 Javascript
JS通过位运算实现权限加解密
2018/08/14 Javascript
深入探索VueJS Scoped CSS 实现原理
2019/09/23 Javascript
Vue.js页面中有多个input搜索框如何实现防抖操作
2019/11/04 Javascript
JavaScript实现密码强度实时验证
2020/03/18 Javascript
原生JS实现pc端轮播图效果
2020/12/21 Javascript
[50:04]DOTA2上海特级锦标赛D组小组赛#2 Liquid VS VP第二局
2016/02/28 DOTA
python PyTorch参数初始化和Finetune
2018/02/11 Python
python实现自动登录
2018/09/17 Python
python 图像平移和旋转的实例
2019/01/10 Python
使用python的pexpect模块,实现远程免密登录的示例
2019/02/14 Python
Python通过TensorFLow进行线性模型训练原理与实现方法详解
2020/01/15 Python
pandas 强制类型转换 df.astype实例
2020/04/09 Python
2014学年自我鉴定
2014/02/23 职场文书
中学优秀班主任事迹材料
2014/05/01 职场文书
质量标语大全
2014/06/12 职场文书
法制宣传标语集锦
2014/06/25 职场文书
会计学毕业生求职信
2014/06/25 职场文书
公安交警中队队长个人对照检查材料思想汇报
2014/10/05 职场文书
javascript中Set、Map、WeakSet、WeakMap区别
2022/12/24 Javascript