CommonJs组织定义了一种模块格式,通过确保每一个模块都运行在它自己的命名空间中来解决
JavaScript的作用域问题。
通过强制模块明确的输出它想暴露出去的变量,并且引用其它模块的方式来完成。
为了实现CommonJs,它给了两个工具.
require()
函数,在当前作用域引用别的模块.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 | // salute.js |
1 | // world.js |
在这里使用特殊的对象
module
并且将变量的引用赋值给module.exports
,CommonJs模块系统将
会知道这个对象是想暴露给全局。salute.js
暴露MySalute
,world.js
暴露Result
。
模块依赖
缺省异步定义依赖,我们定义了每个javascript文件为一个单独的模块,但是
world.js
依旧需要
知道谁定义了MySalute
1 | // salute.js |
1 | // world.js |
函数例子1
2
3
4// moduleA.js
module.exports = function( value ){
return value*2;
}
1 | // moduleB.js |