YangHaiquan / requirejsdemo

javascript模块化(AMD)框架requirejs的使用示例

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

公司某项目中使用ruquired.js进行javascript模块化管理,写一个例子,整理下笔记。

Javascript模块化

Javascript模块化三种写法 http://www.ruanyifeng.com/blog/2012/10/javascript_module.html

AMD规范

1、 定义模块

采用特定的define()函数来定义

2、 加载模块

采用require()语句加载模块require([module], callback);

第一个参数[module],是一个数组,里面的成员就是要加载的模块;第二个参数callback,则是加载成功之后的回调函数。例如:

  require(['math'], function (math) {

    math.add(2, 3);

  });

math.add()与math模块加载不是同步的,浏览器不会发生假死。所以很显然,AMD比较适合浏览器环境。

require.js实现了AMD规范。

require.js例子

我的Github地址:https://github.com/oldmaimai/requirejsdemo

定义模块A,moduleA.js

/*
function fun1(){
  alert("it works");
}

fun1();
*/

/*
示例1:使用普通方式创建模块:使用了块作用域来申明function防止污染全局变量
*/
/*
(function(){
  var add = function (x,y){
    return x+y;
  };
  return {
    add: add
  };
})()
*/

define(function (){
  var add = function (x,y){
    return x+y;
  };
  return {
    add: add
  };
});

定义模块B,moduleB.js

/*
实例2:使用AMD规范创建模块:define方式来创建模块,同时,该模块还依赖moduleA
*/
define(['moduleA'], function(moduleA){
  function add(x, y){
        return moduleA.add(x, y);
  }
  return {
     add : add
  };
});

模块使用方式1:

直接引用require.js,用require的方式加载


<!DOCTYPE html>
<html>
    <head>
        <script type="text/javascript" src="require.js"></script>
        <script type="text/javascript">
		    // 本地加载方式1
            require(["moduleA"]);
			
			// 本地加载方式2
			require(["moduleB"],function(mb){
			    alert(mb.add(1, 1));
			})
        </script>
    </head>
    <body>
      <span>body</span>
    </body>
</html>

模块使用方式2

异步加载requires.js,使用主模块方式,我们项目中使用这种

首先定义主模块main.js

//主模块依赖jquery、moduleB这2个模块
alert("主模块加载成功!");
require(['jquery-1.10.2', 'moduleB'], function ($, b){
    // some code here
		alert(b.add(2, 2));
  });

html使用main

<!DOCTYPE html>
<html>
    <head>
	    <!--
		1.async属性表明这个文件需要异步加载,避免网页失去响应。IE不支持这个属性,只支持defer,所以把defer也写上。	
        2.data-main属性的作用是,指定网页程序的主模块。这个文件会第一个被require.js加载。
		  由于require.js默认的文件后缀名是js,所以可以把main.js简写成main
		-->
        <script src="require.js" defer async="true" data-main="main"></script>
    </head>
    <body>
      <span>本例子展示了1、如何定义模块 2、如何引入模块</span>
    </body>
</html>

About

javascript模块化(AMD)框架requirejs的使用示例


Languages

Language:JavaScript 98.9%Language:HTML 1.1%