requireJs 初探
来源:互联网 发布:淘宝网页版回收站 编辑:程序博客网 时间:2024/06/14 22:00
requireJs 初探
由于新开发的项目中需要使用到Javascript的模块化编程,自然而然我选择了目前比较流行的一个库require.js,我把require.js基本使用方法写下来方便与大家交流和以后回顾查阅。
1.为什么选择require.js
大家在开发一个较为复杂,js代码较多的页面的时候,需要把js代码拆分为多个文件,然后在页面中依次加载,就像这样:
<script src="1.js"></script> <script src="2.js"></script> <script src="3.js"></script> <script src="4.js"></script> <script src="5.js"></script>
这样写在加载的文件较多的时候有很大的弊端,加载的文件越多,网页失去响应的时间就越长。而且,必须的保证各个文件间的依赖关系,依赖性最大的模块一定要放在最后加载。这样在引入文件较多的时候局部便于项目的升级和维护。
而require.js解决了这些问题,它实现js文件的异步加载,避免网页失去响应把,并且管理模块之间的依赖性,便于代码的编写和维护。
2.加载require.js
<script src="js/require.js" data-main="js/main"></script>
data-main表示主模块,第一个被加载。main.js可以省略后缀,直接写成main,require.js会自动识别。
也可以写成下面这样,保证不会失去响应:
<script src="js/require.js" defer async="true" ></script>
async表示支持异步加载,而defer的作用是保证对于IE的支持(IE并不持支async属性)。
3.模块的写法
require(['module1', 'module2', 'module3'], function (module1, module2, module3){ // do something... });
require()方法有两个参数,一个是需要加载的模块,一个事回调方法。加载的模块会以参数形式传入该函数,从而在回调函数内部就可以使用这些模块(上面的代码假定三个模块文件都与main.js处于相同目录下)。
4.模块的加载
使用require.config()方法,我们可以对模块的加载行为进行自定义。require.config()就写在主模块(main.js)的头部。
require.config({ baseUrl: "js/lib", paths: { "jquery": "jquery.min", "underscore": "underscore.min", "backbone": "backbone.min" } });
baseurl指定当前三个模块所在的包路径。
require.config({ paths: { "jquery": "https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min" "underscore": "lib/underscore.min", "backbone": "lib/backbone.min" } });
也可以不写baseurl,直接指定模块路径。
5.自定义模块
自定义模块必须按照AMD的规范来写,模块必须采用特定的define()函数来定义。
新建一个count.js文件:
// count.js define(function (){ var add = function (x,y){ return x+y; }; return { add: add }; });
在其他模块中可以如下加载:
// count.js require(['count'],function(count){ count.add(1,1); })
如果这个模块还依赖其他模块,那么define()函数的第一个参数,必须是一个数组,指明该模块的依赖性。
define(['count'],function(){ function fu(){ count.add(1,1); } return{ fu : fu; } })
count模块会优先于本模块加载。
6.非规范的模块加载
require.config({ shim: { 'underscore':{ exports: '_' }, 'backbone': { deps: ['underscore', 'jquery'], exports: 'Backbone' } } });
deps表示本模块所依赖的模块,exports表示暴露出来的模块名,在其他模块中调用时的名称。
以下示例一个完整的require.config配置
require.config({ baseUrl: 'lib', paths: { "options": "charts/options", "echarts": "charts/echarts.min", "formatData": "charts/formatData", "jquery": "bootstrap/js/jquery-2.1.4.min", "bootstrap": "bootstrap/js/bootstrap.min", "jquery-ui": "jquery-ui.min", "lodash": "gridstack/js/lodash.min", "gridstack": "gridstack/dist/gridstack" }, shim : { "bootstrap" : { "deps" :['jquery'] }, "gridstack" : { "deps" :['bootstrap', 'jquery-ui', 'lodash'] } }});
本实例shim中并未为模块指定exports属性,则调用时直接使用原先的模块名称。
7.插件
domready插件:
require(['domready!'], function (doc){ // called once the DOM is ready });
text和image插件,则是允许require.js加载文本和图片文件
define([ 'text!review.txt', 'image!cat.jpg' ], function(review,cat){ console.log(review); document.body.appendChild(cat); } );
类似的还有json和markdown插件。
- 初探 RequireJS
- requireJs 初探
- RequireJS
- RequireJS
- RequireJS
- requireJs
- requireJS
- requirejs
- requireJS
- requireJS
- RequireJS
- requirejs
- RequireJS
- RequireJS
- RequireJS
- requireJs
- RequireJs
- requireJS
- 前端构建实践01:用 Bower 管理前端依赖
- SPRING SECURITY 3.X 完整入门教程(转)
- U盘安装 Ubuntu 16.04 Beta2(与Win10 双启动)听语音
- 权限系统设计思考
- 221. Maximal Square
- requireJs 初探
- gdb调试时打印寄存器的不同类型值
- JDK和两个JRE
- PropertiesFactoryBean PropertyPlaceholderConfigurer 区别
- 最快最简单的排序算法:桶排序
- propertiesfactorybean vs propertyplaceholderconfigurer spring?
- 冒泡排序
- Spring中配置和读取多个Properties文件
- 快速排序