CommonJs

CommonJs组织定义了一种模块格式,通过确保每一个模块都运行在它自己的命名空间中来解决
JavaScript的作用域问题。
通过强制模块明确的输出它想暴露出去的变量,并且引用其它模块的方式来完成。
为了实现CommonJs,它给了两个工具.

  1. require()函数,在当前作用域引用别的模块.
  2. module对象,允许从当前作用域输出变量。

简单的JavaScript

下面是一个未使用CommonJs的例子,定义一个status.js脚本文件,该文件只包含一个值,它将会
在别的脚本文件中使用。

1
2
// salute.js
var MySalute = "Hello";

在第二个名叫world.js的脚本文件中使用在status.js中定义的变量

1
2
// world.js
var Result = MySalute + " world!";

模块定义

当然world.js无法工作,因为MySalute未定义,我们需要定义每一个文件为一个模块。

1
2
3
// salute.js
var MySalute = "Hello";
module.exports = MySalute;
1
2
3
// world.js
var Result = MySalute + "world!";
module.exports = Result;

在这里使用特殊的对象module并且将变量的引用赋值给module.exports,CommonJs模块系统将
会知道这个对象是想暴露给全局。salute.js暴露MySalute, world.js暴露Result

模块依赖

缺省异步定义依赖,我们定义了每个javascript文件为一个单独的模块,但是world.js依旧需要
知道谁定义了MySalute

1
2
3
// salute.js
var MySalute = "Hello";
module.exports = MySalute;
1
2
3
4
// world.js
var MySalute = require("./salute");
var Result = MySalute + "world!";
module.exports = Result;

函数例子

1
2
3
4
// moduleA.js
module.exports = function( value ){
return value*2;
}

1
2
3
// moduleB.js
var multiplyBy2 = require('./moduleA');
var result = multiplyBy2( 4 );