[JS] JS模块化开发之RequireJS
本节将简述RequireJS常用的功能
RequireJS 实现了 Asynchronous Module API.
目录:
Nuget:Install-Package RequireJS(会包含2个文件.r.js是用来通过nodejs压缩js的)
为什么使用RequireJS
- 加载script标签会停止响应
- js文件存在依赖性
- 模块化开发
加载RequireJS
- 异步加载script
<script src="scripts/require.js" defer async="true"></script>
- 加载自定义js
<script src="scripts/require.js" data-main="scripts/main"></script>
RequireJS函数
- require.config({}):配置Require信息
包括baseUrl,paths,shim,map,enforceDefine
- require([],funcLoad,funcErro):加载模块后,执行方法
- define([],func):加载模块,定义模块
Hello World
- 加载requirejs
<script data-main="main" src="Scripts/require.js"></script>
- 编写main.js
require.config({
baseUrl: 'Scripts',
paths: {
jquery: ['//cdn.bootcss.com/jquery/2.2.3/jquery', 'jquery-2.2.4']
}
}); require(['jquery'], function (a) {
alert(a.fn.jquery);
});
- baseUrl默认与mainjs同一目录
- paths支持多个js源
- paths默认为地址加上.js
- require第一个参数为依赖的模块
- require第二个参数方法中的变量名依次与依赖模块一一对应
自定义模块
定义1个Cache模块,缓存页面中的js对象.
define(['jquery'], function ($) {
var cache = {};
return {
set: function (key, val) {
cache[key] = val;
},
get: function (key) {
return cache[key];
}
}
});
main.js
require(['cache'], function (cache) {
alert(jQuery.fn.jquery);
cache.set('a', 'hello');
}); require(['cache'], function (cache) {
alert(cache.get('a'));
});
引入第三方插件
很多js库 并没有支持AMD方式的模块化开发.
本例子实现上面的cache功能
定义cached.js
var cache = {
data: {},
set: function (key, val) {
this.data[key] = val;
},
get: function (key) {
return this.data[key];
}
};
main.js
require.config({
baseUrl: 'Scripts',
paths: {
jquery: ['//cdn.bootcss.com/jquery/2.2.3/jquery', 'jquery-2.2.4']
},
shim: {
cached: {
exports: 'cache',
deps: ['jquery']
}
}
}); require(['cached'], function (cache) {
cache.set('a', 'hello');
}); require(['cached'], function (cache) {
alert(cache.get('a'));
});
- shim解决依赖与非AMD载入方式.
- exports指定js中提供的对象或方法名.
- deps指定依赖的js库
多版本js库处理
我们的项目如果使用新版本js功能,但又不能直接替换老版本的js.多个版本共存的时候.
使用map函数
requirejs.config({
map: {
'*': {
'jquery': 'scripts/jquery-2.2.4'
},
'scripts/cache': {
'jquery': '//cdn.bootcss.com/jquery/2.2.3/jquery.js'
}
}
}); require(['scripts/cache'], function (a) {
alert($.fn.jquery);
});
map定义了2种jquery版本
*表示默认情况下的jquery模块使用本地2.2.4
scripts/cache表示模块名为此的时候,jquery使用远程库.远程库需添加js扩展名.
RequireJS插件
https://github.com/requirejs/requirejs/wiki/Plugins
AMD(中文版):
https://github.com/amdjs/amdjs-api/wiki/AMD-(%E4%B8%AD%E6%96%87%E7%89%88)
[JS] JS模块化开发之RequireJS的更多相关文章
- Asp.net Mvc模块化开发之“开启模块开发、调试的简单愉快之旅”
整个世界林林种种,把所有的事情都划分为对立的两个面. 每个人都渴望的财富划分为富有和贫穷,身高被划分为高和矮,身材被划分为胖和瘦,等等. 我们总是感叹,有钱人的生活我不懂;有钱人又何尝能懂我们每天起早 ...
- Asp.net Mvc模块化开发之“部分版本部分模块更新(上线)”
项目开发从来就不是一个简单的问题.更难的问题是维护其他人开发的项目,并且要修改bug.如果原系统有重大问题还需要重构. 怎么重构系统不是本文探讨的问题,但是重构后如何上线部署和本文关系密切.这个大家可 ...
- 模块化开发之sea.js
随着时间的推移,原生js越来越强大,es6中的improt,export已经可以实现模块化开发,但可惜的是现在的浏览器还不支持,需要进行编译,相信在不久的将来,一定会大行其道,今天我们来聊聊模块化开发 ...
- 模块化开发之sea.js实现原理总结
seajs官网说:seajs是一个模块加载器,所以学习它并不难. 在我的理解就是:本来我们是需要手动创建 script标签 引入 js文件的,但用seajs后,它就自动帮我们完成这些工作. 这里只说实 ...
- 项目伪模块化开发之:requirejs(AMD)开发
附:伪模块开发,终将会被es6的模块开发取代.其只为过渡阶段使用 一.为什么要用require.js? 最早的时候,所有Javascript代码都写在一个文件里面,只要加载这一个文件就够了.后来,代码 ...
- HTML5+JS手机web开发之jQuery Mobile初涉
一.起始之语 我一直都是在PC上折腾网页的,这会儿怎么风向周边捣鼓起手机网页开发呢?原因是公司原先使用Java开发的产品,耗了不少人力财力,但是最后的效果却不怎么好.因为,Android系统一套东西, ...
- 前端模块化开发之seaJs
了解后端语言的童鞋一定听过模块化开发的概念,比如java.python等后端语言都有自己的模块化特性,然而和后端语言相比,javascript还尚未实现模块化的功能,虽然之后的更高版本可能引入模块化开 ...
- 模块化开发之Amd规范和Cmd规范
CMD规范:是SeaJS 在推广过程中对模块定义的规范化产出的. AMD规范:是 RequireJS 在推广过程中对模块定义的规范化产出的 // CMD define(function(require ...
- 模块化开发之butterknife 在 library中使用
在Android开发中butterknife是一个很好的对资源初始化的工具,它可以使你的代码简洁通俗易懂,同时配合Android ButterKnife Zelezny插件可以让你写代码的速度提升至少 ...
随机推荐
- MapReduce实例浅析
在文章<MapReduce原理与设计思想>中,详细剖析了MapReduce的原理,这篇文章则通过实例重点剖析MapReduce 本文地址:http://www.cnblogs.com/ar ...
- C#可扩展编程之MEF学习笔记(五):MEF高级进阶
好久没有写博客了,今天抽空继续写MEF系列的文章.有园友提出这种系列的文章要做个目录,看起来方便,所以就抽空做了一个,放到每篇文章的最后. 前面四篇讲了MEF的基础知识,学完了前四篇,MEF中比较常用 ...
- Java提高篇(三四)-----fail-fast机制
在JDK的Collection中我们时常会看到类似于这样的话: 例如,ArrayList: 注意,迭代器的快速失败行为无法得到保证,因为一般来说,不可能对是否出现不同步并发修改做出任何硬性保证.快速失 ...
- 用批处理文件进行TCP/IP设置,方便在家与办公IP切换
在公司用公司分配的固定IP上网,回家后又要将本本设置为家里的固定IP上网,每次都要手动重复一个过程: 打开网络中心,选择本地连接,进入属性然后选择IPV4进行TCP/IP的设置,填入IP,子网掩码DN ...
- 12小时包你学会基于ReactMix框架的ReactNativeApp开发(一)Hello World!
ReactMixhttps://github.com/xueduany/react-mix自从昨天发布起来,得到了不少小伙伴的热捧,很高兴帮助大家解决了憋在心中很久的问题“如果我只会HTML,Css, ...
- java代码效率优化
[转载于http://blog.163.com/user_zhaopeng/blog/static/16602270820122105731329/] 1. 尽量指定类的final修饰符 带有fina ...
- Struts2常量的具体用法实例
<!-- 指定Web应用的默认编码集,相当于调用HttpServletRequest的setCharacterEncoding方法 --> <constant name=" ...
- 快速入门系列--WCF--01基础概念
转眼微软的WCF已走过十个年头,它是微软通信框架的集大成者,将之前微软所有的通信框架进行了整合,提供了统一的应用方式.记得从自己最开始做MFC时,就使用过Named Pipe命名管道,之后做Winfo ...
- 线程池ThreadPoolExecutor、Executors参数详解与源代码分析
欢迎探讨,如有错误敬请指正 如需转载,请注明出处 http://www.cnblogs.com/nullzx/ 1. ThreadPoolExecutor数据成员 Private final Atom ...
- 选择排序java代码
/** * 选择排序 * * 原理:将最小值与数组第1个即array[0]交换,第二次则忽略array[0],直接从array[1]至array[array.length-1]中 * 选择出最小值与a ...