(三)、node.js的模块和包
我们做东西不可能把所有的功能都放在一起,那样会相互影响,我们需要把他们分门别类,
让他们各自执行各自的功能,这就是包或者模块,包和模块这两个概念经常地会用,其实他俩讲的是一个东西
而在node.js中一个文件就是一个包
下面我们就来具体的讲解一下:
Node.js 提供了 exports 和 require 两个对
象,其中 exports 是模块公开的接口,require 用于从外部获取一个模块的接口,即所获
取模块的 exports 对象。
让我们以一个例子来了解模块。
创建一个module.js的文件,内容如下
varname;functionsetName(thyName){name=thyName;};functionsayHello(){console.log('Hello'+name);};//导出模块exports.setName=setName;exports.sayHello=sayHello;再创建一个文件getmodule.js//获取模块require('./文件名'),不需要后缀varmyModule=require('./module');myModule.setName('MyDuoEr');myModule.sayHello();
运行命令
这个例子有点类似于创建一个对象,但实际上和对象又有本质的区别,因为
require 不会重复加载模块,也就是说无论调用多少次 require,获得的模块都是同一个。
我们在 getmodule.js 的基础上稍作修改:
//获取模块varhello1=require('./module');hello1.setName('MyDuoEr');varhello2=require('./module');hello2.setName('MyDuoEr2');hello1.sayHello();
运行命令
运行后发现输出结果是 HelloMyDuoEr2,这是因为变量 hello1 和 hello2 指向的是
同一个实例,因此 hello1.setName 的结果被 hello2.setName 覆盖,最终输出结果是
由后者决定的。
覆盖 exports
有时候我们只是想把一个对象封装到模块中,例如:
functionHello(){varname;this.setName=function(thyName){name=thyName;};this.sayHello=function(){console.log('Hello'+name);};};
exports.Hello = Hello;
此时我们在其他文件中需要通过 require('./singleobject').Hello 来获取
Hello 对象,这略显冗余,可以用下面方法稍微简化:
functionHello(){varname;this.setName=function(thyName){name=thyName;};this.sayHello=function(){console.log('Hello'+name);};};module.exports=Hello;
这样就可以直接获得这个对象了:
varHello=require('./hello');hello=newHello();hello.setName('MyDuoEr');hello.sayHello();
注意,模块接口的唯一变化是使用 module.exports = Hello 代替了 exports.Hello=
Hello。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。