commonJS是一个规范,讲起来内容会有非常多,我们来点直接的要点
CommonJS对模块的定义十分简单,主要分为模块引用、模块定义和模块标识3个部分。
核心如下
下面以helloworld2来演示具体的用法
helloworld2会有2个文件,用来演示多文件直接引用关系
helloworld2.js
module.exports = function () {
console.log('hello world');
}
这里使用module.exports
导出一个function
,里面只是打印了hello world
下面我们看一下如何在main.js里调用
main.js
var hello = require('./helloworld2');
hello()
这样需要说明的是,通过require来引用helloworld2这个模块,一旦你require了这个模块,那么这个模块对外暴露的方法或变量,你就可以调用了
再回想一下module.exports
的作用:当前module暴露的方法或变量
那么此处我们可能会有的疑问
main.js
➜ nodejs git:(master) ✗ node demo/main.js
hello world
helloworld2这个module导出的是一个function,既然是function那么就一定可以直接调用
创建main.js
require('./helloworld2')();
执行
➜ nodejs git:(master) ✗ node demo/main2.js
hello world
创建helloworld3.js
module.exports = function (person) {
console.log('hello world ' + person);
}
创建main3.js
require('./helloworld3')('海角');
执行
➜ nodejs git:(master) ✗ node demo/main3.js
hello world 海角
创建helloworld4.js
function say(person) {
console.log('hello world ' + person);
}
module.exports = say;
创建main4.js
require('./helloworld3')('海角');
执行
➜ nodejs git:(master) ✗ node demo/main4.js
hello world 海角
(注意./helloworld2代表的是当前目录下的helloworld2.js)
我们来假设一下,在helloworld5里既能吃饭又能打招呼呢?
也就是说这个模块要提供2个方法
创建helloworld5.js
function say(person) {
console.log('i am say hello world to ' + person);
}
function eat(food) {
console.log('i am eat ' + food);
}
exports.eat = eat;
exports.say = say;
创建main5.js
var h5 = require('./helloworld5')
h5.eat('兰州拉面');
h5.say('海角');
执行
➜ nodejs git:(master) ✗ node demo/main5.js
i am eat 兰州拉面
i am say hello world to 海角
如果你还记得之前的模块是如何导出,你就会对比一下
之前用的是module.exports,现在用的是exports.xxx
那么你好奇,它们有什么差别么?