标签:
作为命名空间; 作为命名空间使用;
异步加载js,避免阻塞,提高性能;
js通过require加载,不必写很多script
require.js下载 下载后,放在指定目录就可以加载了
1
|
<script src= "js/require.js" ></script> |
有人可能会想到,加载这个文件,也可能造成网页失去响应。解决办法有两个,一个是把它放在网页底部加载,另一个是写成下面这样:
1
|
<script src= "js/require.js" defer async= "true" ></script> |
async属性表明这个文件需要异步加载,避免网页失去响应。IE不支持这个属性,只支持defer,所以把defer也写上。
这种写法虽然简单,但其实并不推荐,一般的写法还要再加个属性:
1
|
<script data-main= "js/main" src= "js/require-jquery.js" ></script> |
就像一个c程序总有一个 main 方法作为入口一样,上面这种写法,做了几件事情:
1、加载了 require-jquery.js 文件。注意,官方提供了 require.js和 jquery 的打包版本,推荐。
2、在加载之后,加载入口文件 js/main.js ,注意,main.js 写进去的时候,不需要后缀名。
你的所有其他 js 模块文件,都可以写在 main.js 里面,通过 main.js 加载。
在data-main指定的主文件中,通过require.config来配置,并加载其他js模块
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
require.config({ baseUrl: ‘js/‘ , paths: { "backbone" : "backbone" , "underscore" : "underscore" }, shim: { "backbone" : { deps: [ "underscore" ], exports: "Backbone" }, "underscore" : { exports: "_" } } }); |
baseUrl:指定基路径 paths:模块加载路径 shim:加载非AMD规范模块
1
2
3
|
require([ ‘jquery‘ , ‘underscore‘ , ‘backbone‘ ], function ($, _, Backbone){ // some code here }); |
1
2
3
4
5
6
7
8
9
|
// math.js define(function (){ var add = function (x,y){ return x+y; }; return { add: add }; }); |
1
2
3
4
|
// main.js require([ ‘math‘ ], function (math){ alert(math.add( 1 , 1 )); }); |
1
2
3
4
5
6
7
8
|
define([ ‘myLib‘ ], function(myLib){ function foo(){ myLib.doSomething(); } return { foo : foo }; }); |
定义的模块返回函数个数问题
1、define 的return只有一个函数,require的回调函数可以直接用别名代替该函数名。
2、define 的return当有多个函数,require的回调函数必须用别名调用所有的函数。
1
2
3
4
5
6
|
require([ ‘selector‘ , ‘book‘ ], function(query,book) { var els = query( ‘.wrapper‘ ); book.fun1(); book.fun2(); }); |
1
2
3
|
<script> require( [ "some" ] ); </script> |
1
2
3
4
5
6
|
<script> require([ "aModule" , "bModule" ], function() { myFunctionA(); // 使用 aModule.js 中的函数 myFunctionA myFunctionB(); // 使用 bModule.js 中的函数 myFunctionB }); </script> |
require.js还提供一系列插件,实现一些特定的功能。
domready插件,可以让回调函数在页面DOM结构加载完成后再运行。
1
2
3
|
require([ ‘domready!‘ ], function (doc){ // called once the DOM is ready }); |
1
2
3
4
5
6
7
8
9
|
define([ ‘text!review.txt‘ , ‘image!cat.jpg‘ ], function(review,cat){ console.log(review); document.body.appendChild(cat); } ); |
1
|
<script data-main= "js/main" src= "js/require-jquery.js" ></script> |
3、在代码中require一个文件多次,不会导致浏览器反复加载
不会,这是 RequrieJS 的优点,即使你反复 require 它,它只加载一次。
1
2
3
4
5
6
7
8
|
requirejs.config({ paths: { jquery: [ ‘//cdnjs.cloudflare.com/ajax/libs/jquery/2.0.0/jquery.min.js‘ , ‘lib/jquery‘ ] } }); |
1
2
3
4
5
6
7
8
9
10
11
|
define({ forceChoke: function() { }, forceLighting: function() { }, forceRun: function() { } }); |
1
2
3
4
5
6
7
8
9
10
11
|
// js/app/moduleA.js define( [ "require" , "app/app" ], function( require, app ) { return { foo: function( title ) { var app = require( "app/app" ); return app.something(); } } } ); |
1
|
var path = require.toUrl( "./style.css" ); |
1
2
3
4
5
|
Require.js 提供一个脚本 r.js ,可以将所有使用到的模块压缩成一个脚本文件,r.js 可以使用 node.js 来执行。
在压缩模块前,需要写一个配置文件,说明主模块名,压缩后的文件名,哪些模块不要压缩
没有使用 define 定义的模块都不要压缩,包括 jquery,backbone 等库及其插件
1
2
3
4
5
6
7
8
9
10
11
|
//build.js ({ baseUrl: ‘.‘ , paths: { ‘jquery‘ : ‘empty:‘ , ‘underscore‘ : ‘empty:‘ , ‘backbone‘ : ‘empty:‘ , }, name: ‘main‘ , out: ‘main.min.js‘ }) |
1
|
node r.js -o build.js |
标签:
原文地址:http://www.cnblogs.com/koleyang/p/5051571.html