nodejs的模块分为我们自定义的模块、第三方模块、nodejs内置模块三大类
比如,
我们前边说的sum.js就是自定义模块;
而我们使用npm下载的各种各样的js插件、框架都是第三方模块,比如我们一开始举的例子calender,还有solarlunar(公历、农历互相转换)、chinese-finance-number(将数字转换成财务用的中文大写数字)、 base-64(base64加密)等等都是我们可以使用的第三方模块,就像java里面的jar包似的;
而比如像fs,http等操作文件和处理http请求的模块是nodejs内置的,我们成为nodejs内置模块。
上篇教程我们使用exports导出了name变量和sum函数:
exports.func_sum=sum;
exports.var_name=name;
在test.js使用的使用格式如下:
var module_sum=require("./mymodules/sum.js")
module_sum.func_sum(1,100);
console.log(module_sum.var_name);
程序员嘛,就是没事也要给自己找点事,力求用最少的代码完成最多的事情,那么有人就纳闷了,我调用sum函数为什么还要通过module_sum.func_sum的方式?难道就不能在test.js直接使用函数名(1,100)的方式?当然可以,只不过不能再使用exports导出了,而需要使用module.exports来导出。修改一下sum.js:
var name="sum.js";
function sum(start,end){
var sum=0;
for(var i=start;i<=end;i++){
sum+=i;
}
console.log(sum);
}
module.exports=sum;
在test.js中使用的话需要这样来搞:
var module_sum=require("./mymodules/sum.js")
module_sum(1,100);
console.log(module_sum.var_name);
运行结果:
显然,使用module.exports导出跟只使用exports在使用起来更便捷,不过使用module.exports导出只能导出一个,我们一般使用module.exports来导出一个对象(构造函数,比如有一个构造函数People需要导出,就可以使用module.exports,这样使用起来更方便)。当一个模块需要导出多个时使用exports;
当一个模块只需要导出一个的时候推荐使用module.exports,当然使用exports也是可以的,只不过使用的时候方式不同而已。
下面是使用module.exports的一个例子,编写People.js:
function People(name,age){
this.name=name;
this.age=age;
}
People.prototype.printInfo=function(){
console.log("姓名:"+this.name+",年龄:"+this.age);
}
module.exports=People;
编写test.js:
var module_people=require("./mymodules/People.js")
var p=new module_people("zhao","28");
p.printInfo();
运行结果:
这里module_people指的就是People这个对象。
改为使用exports导出方式,People.js:
function People(name,age){
this.name=name;
this.age=age;
}
People.prototype.printInfo=function(){
console.log("姓名:"+this.name+",年龄:"+this.age);
}
exports.class_People=People;
test.js:
var module_people=require("./mymodules/People.js")
var p=new module_people.class_People("zhao","28");
p.printInfo();
这里module_people指的就是exports这个对象。
运行结果是一样的: