模块化方案
CommonJS
CommonJS的实现很简单。在CommonJS里面,文件和模块就是一一对应的关系。比方说,在同一个文件夹下,foo.js加载circle.js是这么写的:
foo.js:
var circle = require("./circle.js");
console.log('The area of a circle of radius 4 is' + circle.area(4));
circle.js:
var PI = Math.PI;
exports.area = function(r){
return PI * r * r;
};
exports.circumference = function(r){
return 2 * PI * r;
};
在上面这个例子里面,circle.js这个模块导出了它的两个方法。注意,模块里的局部变量是私有的,比如circle.js里的PI.如果需要导出多个变量或者方法,可以采用module.exports的写法:
module.exports = function(){
return {
//返回需要导出的变量或方法
}
}
AMD
AMD实现了JavaScript模块的异步加载,它的实现形式是:
define(id?: String, dependencies?: String[], factory: Function|Object);
id定义了模块的名字,是选填项。
dependencies指定了该模块所依赖的模块,它也是选填项,如果缺省了,那么默认为:["require", "exports","module"].
factory定义了模块的方法,它可以是个函数,也可以是个对象。如果是函数的话,它所返回的值将会被这个模块导出。
具名模块:
define('myModule', ['jquery'], function($) {
// $ is the export of the jquery module.
$('body').text('hello world');
});
// and use it
define(['myModule'], function(myModule) {});
多个依赖:
define(['jquery', './math.js'], function($, math) {
// $ and math are the exports of the jquery module.
$('body').text('hello world');
});
导出自身:
define(['jquery'], function($) {
var HelloWorldize = function(selector){
$(selector).text('hello world');
};
return HelloWorldize;
});