commonJS
commonJS规范和hello world2
commonJS是一个规范
commonJS是一个规范,讲起来内容会有非常多,我们来点直接的要点
CommonJS对模块的定义十分简单,主要分为模块引用、模块定义和模块标识3个部分。
核心如下
- require - 用来引入依赖
- export - 用来导出模块,包括标识符(identifier)和模块内容(contents)
- module.exports
- exports.xxx
下面以helloworld2来演示具体的用法
关于 helloworld2
helloworld2会有2个文件,用来演示多文件直接引用关系
- helloworld2.js
- main.js
创建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暴露的方法或变量
那么此处我们可能会有的疑问
- require引用的是一个本地文件(注意./helloworld2代表的是当前目录下的helloworld2.js),如果是其他库呢?
- module.exports这里只是暴露了一个function,那如果想暴露更多方法或变量呢?
执行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 海角
解答疑问
require引用的是一个本地文件,如果是其他库呢?
(注意./helloworld2代表的是当前目录下的helloworld2.js)
module.exports这里只是暴露了一个function,那如果想暴露更多方法或变量呢?
我们来假设一下,在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
那么你好奇,它们有什么差别么?