Loading

模块和包

问题:
1、什么是模块
2、如何创建并加载模块
3、如何创建一个包
4、如何使用包管理器

什么是模块

模块是Node.js应用程序的基本组成部分,文件和模块式一一对应的。换言之,一个Node.js文件就是一个模块,这个文件可能是Javascript代码,JSON或者编译过的C/C++扩展。 例如: var http=require('http'),其中http是Node.js的一个核心模块,其内部实现是用C++实现的,外部用Javascript封装。我们通过require
函数获取了这个模块,然后才能使用其中的对象。

创建及加载模块

1>创建模块

   在Node.js中,创建一个模块非常简单,因为一个文件就是一个模块,我们要关注的问题仅仅在于如何在其他文件中获取这个模块。Node.js提供了exports和require两个对象,其中exports是模块公开的接口,require用于从外部获取一个模块的接口,即所获取模块的expors对象下面来举个例子:

创建一个模块 Module.js
var name;
exports.setName=function (thyName)
{
name=thyName;
}

exports.sayHello=function(){
console.log('Hello'+name +'你已经学会创建Node.js包咯哦,太聪明~\(≧▽≦)/~啦啦啦');
}

获取模块 GetModule.js
var myModule=require('./Module');
myModule.setName('Darren');
myModule.sayHello();

运行GetModule.js 即可得到如下内容
HelloDarren你已经学会创建Node.js包咯哦,太聪明~(≧▽≦)/~啦啦啦

以上示例中,module.js通过exports对象吧setName和sayHello作为模块的访问接口,在getmodule.js中通过require('./module')加载这个模块,
然后就可以直接访问module.js中exports对象的成员函数啦
这种接口封装方式比许多语言要简洁的多,同时也不失优雅,未引入违反语义的特性,符合传统的编程逻辑。在这基础上,我们可以构建大型的应用
程序,npm提供的上万个模块都是通过这种简单的方式搭建起来的。

2>单次加载

上面的例子有点类似于创建一个对象,但实际上和对象又有本质的区别,因为require不会重复加载模块,也就是说无论调用多少次require,获得 的模块都是同一个,我们在getmodule.js的基础之上稍作修改:
var myModule=require('./Module');
myModule.setName('Darren');
myModule.sayHello();

var myModule2=require('./Module');
myModule2.setName('jesn');
myModule2.sayHello();

运行后,发现结果是 “Hellojesn你已经学会创建Node.js包咯哦,太聪明~(≧▽≦)/~啦啦啦”
这是因为变量myModule1和myModule2都是指向同一个实例,因为myModule2的结果会覆盖myModule1的结果

posted @ 2014-05-14 22:28  jesn  阅读(134)  评论(0编辑  收藏  举报