模块功能类似于dll文件,载入该模块,就可以调用该模块的函数和变量。将可重用的代码封装在一模块中,这样可以达到可重复利用、减少代码量,提高开发效率的目的。本篇文章介绍Node.js模块的自定义和使用。
模块定义编写有2种方式:将需要“暴露”的变量和函数,赋值给exports和module.exports对象属性。exports和moudle.exports的区别与联系如下:
1)exports对象实际是moudle.exports对象的“引用”,require载入使用exports对象实现的模块时,本质上也是载入moudle.export对象【exports = module.exports = {}】。在使用exports对象定义模块时,为其设置属性,实际上是给module.exports对象设置属性。
2)值得注意的是,如果在使用exports对象自定义模块时,如果“显示”地给module.exports对象设置属性,则给export对象设置的属性将被“覆盖”掉不复存在。
3)一般推荐使用exports对象定义自己封装的模块,因为载入模块时,相当于在导出对象上挂属性,该属性对调用模块直接可见,作用类似static静态类,调用方便。除非你打算当成一个实例类型使用,需要构造函数做初始化时,才推荐使用module.exports对象定义模块。
创建Exports.js脚本
/**
* 使用exports对象定义模块
*/
var time = 0.5;
var sum = function(a,b)
{
var res = (a+b)*time;
console.log("sum计算结果:",res);
return res;
}
exports.time = time;
exports.sum = sum;
创建ModuleExports.js脚本
/**
* 使用module.exports对象定义模块
*/
var Student = function(age,name)
{
this.age = age;
this.name = name;
this.printInfo = function(){
console.log("学生的名字:",this.name,"年龄:",this.age);
};
}
module.exports = Student;
创建测试调用自定义模块脚本ModuleExportsTest.js脚本
/**
* 自定义模块调用
*/
const myExports = require("./Export");
//直接访问
myExports.sum(2,3);
const myModuleExports = require("./MuduleExports");
//创建实例
var student = new myModuleExports(6,"Jue");
//再访问
student.printInfo();
运行结果如下