模块有三种

在Node中的JavaScript还有一个重要的概念,模块系统。

  • 模块作用域
  • 使用require方法来加载模块
  • 使用exports接口对象来导出模板中的成员

加载​​require​

语法:

var 自定义变量名 = require('模块')

作用:

  • 执行被加载模块中的代码
  • 得到被加载模块中的​​exports​​导出接口对象

导出​​exports​

  • Node中是模块作用域,默认文件中所有的成员只在当前模块有效
  • 对于希望可以被其他模块访问到的成员,我们需要把这些公开的成员都挂载到​​exports​​​接口对象中就可以了
    导出多个成员(必须在对象中):
exports.a = 123;
exports.b = function(){
console.log('bbb')
};
exports.c = {
foo:"bar"
};
exports.d = 'hello';

导出单个成员(拿到的就是函数,字符串):

module.exports = 'hello';

以下情况会覆盖:

module.exports = 'hello';
//后者会覆盖前者
module.exports = function add(x,y) {
return x+y;
}

也可以通过以下方法来导出多个成员:

module.exports = {
foo = 'hello',
add:function(){
return x+y;
}
};

模块原理

exports和​​module.exports​​的一个引用:

console.log(exports === module.exports);  //true

exports.foo = 'bar';

//等价于
module.exports.foo = 'bar';

​当给exports重新赋值后,exports!= module.exports.​

​最终return的是module.exports,无论exports中的成员是什么都没用。​

真正去使用的时候:
导出单个成员:exports.xxx = xxx;
导出多个成员:module.exports 或者 modeule.exports = {};

总结

一、具名的核心模块

// 用来获取机器信息的
var os = require('os');
// 用来操作路径的
var path = require('path');
// 获取当前机器的cpu信息
console.log(os.cpus());
// memory内存
console.log(os.totalmem());
// 获取扩展名
console.log(path.extname('a/s/s/s/anc.txt'));
//以及前面使用的http等
​require​​​也就是加载执行里面的代码
​​​node​​中,没有全局作用域,只有模块作用域,也就是只在自己的文件里有用,外部访问不到内部,内部也访问不到外部,无论是变量还是函数,都不行

node中的js—模块系统_前端

node中的js—模块系统_javascript_02

二、用户编写的文件模块


相对路径必须加载 `./`,否则报错


node中的js—模块系统_加载_03


可以省略后缀名

那如何让不同的模块进行通信呢

通过对象来获取另一个模块里面的函数,变量

例如:
a文件:

// a文件
// require方法有两个作用
// 1、加载文件模块并执行里面的代码
// 2、拿到被加载文件模块导出的接口对象
// 3、自定义的每个文件里都提供了一个默认空对象:exports
// 加载fs核心模块和b模块
var bExports = require('./b');
var fs = require('fs');
// 通过对象方法访问b成员及方法
console.log(bExports.temp);
console.log(bExports.add(3,8));

// fs访问内容
fs.readFile('./a.js',function(err,data){
if(err){
console.log("取读失败");
}else{
console.log("读取成功,数据是"+data.toString());
}
})

b文件:

// b文件
console.log('b,js文件被加载执行了');
var temp='牛牛';
function add (x,y){
return x+y;
}
exports.temp = temp;
// exports.add = add;//左边是成员变量,右边是模块函数
// 或者
exports.add = function(x,y){
return x+y;
}

node中的js—模块系统_前端_04