背景:在node.js中,我们经常能在js文件中看到module.exports这句话,它是干嘛用的
要介绍module.exports,需要从CommonJS规范讲起,node.js是对CommonJS的一个实现:
Node应用由模块组成,采用CommonJS模块规范。
根据这个规范,每个文件就是一个模块,有自己的作用域。在一个文件里面定义的变量、函数、类,都是私有的,对其他文件不可见
CommonJS规范规定,每个模块内部,module变量代表当前模块。这个变量是一个对象,它的exports属性(即module.exports)是对外的接口。加载某个模块,其实是加载该模块的module.exports属性。
核心要点:
* 一个文件是一个module
* module.exports定义了module对外暴露的接口
所以module.exports起到的作用就是向其他模块暴露接口的作用
举例:
1.view.js文件内容如下:
module.exports.views = {
engine: 'ejs',
layout: 'layout',
partials: false
};
2.另外一个模块可以通过require加载views模块:
const views = require("views")
console.log(views.engine)
module.exports除了可以暴露模块的属性,还可以暴露方法:
sample.js
module.exports={
sayHelloWorld:function(){
console.log("hello world")
}
}
另一个模块引用sample.js中暴露的方法:
const sample = require("sample")
sample.sayHelloWorld();
const sample = require("sample").sayHelloWorld()
sample();
二者产生的效果是相同的