Node.js:模块

概要:本篇博客主要介绍node.js的模块

1.创建模块

  在node.js中创建一个模块非常简单,因为一个文件就是一个模块。我们只需要明白如何从其他文件中获取这个模块。Node.js提供了 exports 和 require 两个对象,其中exports是模块的公开接口,require用于从外部获取一个模块的接口,即所获取模块的exports对象。看下面的例子。

创建一个module.js的文件,内容是:

var name;

exports.setName = function(thyName){
    name = thyName;
};

exports.sayHello = function(){
    console.log(‘hello‘+name);
}

在同一级目录下创建getmodule.js,内容是:

var myModule = require(‘./module‘);

myModule.setName(‘BYVoid‘);
myModule.sayHello();

运行getmodule.js,得到的结果是:hello BYVoid。

  你也许已经能理解exports和require对象的区别了吧。module.js通过exports对象把setName和sayHello作为模块的访问接口,在getmodule.js中通过require(‘./module‘)加载这个模块,然后就可以直接访问module.js中的exports对象的成员了。

2.单次加载

  require不会重复加载模块,并且最终输出的结果是由后者决定的,就像同样的定义CSS属性,后者会覆盖前者一样。

  例如,我们在getmodule.js的基础上稍作修改:

var hello1 = require(‘./module‘);
hello1.setName(‘BYVoid 1‘);

var hello2 = require(‘./module‘);
hello2.setName(‘BYVoid 2‘);

hello1.sayHello();

运行的结果是: hello BYVoid 2。这是因为变量hello1和hello2指向的是同一个实例,因此hello1.setName的结果被hello2.setName覆盖。

3.覆盖exports

  有时候我们只是把一个对象封装到模块中,例如:

function Hello(){
    var name;
    this.setName = function (thyName) {
        name = thyName;
    };
    this.sayHello = function () {
        console.log(‘Hello‘ + name);
    };
};

exports.Hello = Hello;

  此时我们在其他文件中需要通过require(‘./singleobject‘).Hello来获取Hello对象,这略显冗余,因此可以用下面的方法稍微简化:

function Hello() {
    var name;
    this.setName = function(thyName) {
        name = thyName;
    };
    this.sayHello = function() {
        console.log(‘Hello ‘ + name);
    };
};
module.exports = Hello;

这样就可以直接获得这个对象了:

var Hello = require(‘./hello‘);

hello = new Hello();
hello.setName(‘BYVoid‘);
hello.sayHello();

  注意:模块接口的唯一变化就是使用module.exports = Hello代替了exports.Hello = Hello。在外部引用该模块时,其接口对象就是要输出的Hello对象本身,而不是原先的exports。

  警告:不可以通过对 exports 直接赋值代替对 module.exports 赋值。exports 实际上只是一个和 module.exports 指向同一个对象的变量,它本身会在模块执行结束后释放,但 module 不会,因此只能通过指定module.exports 来改变访问接口。

时间: 2024-10-22 21:18:09

Node.js:模块的相关文章

Node.js模块封装及使用

Node.js中也有一些功能的封装,类似C#的类库,封装成模块这样方便使用,安装之后用require()就能引入调用. 一.Node.js模块封装 1.创建一个名为censorify的文件夹 2.在censorify下创建3个文件censortext.js.package.json.README.md文件 1).在censortext.js下输入一个过滤特定单词并用星号代替的函数. var censoredWorlds=["sad","bad","mad&

Node.js 模块和 NPM

1.模块概念 原生模块:Node.js API 提供的原生模块,原生模块在启动时已经被加载. 文件模块:动态加载模块,由原生模块 module 来实现和完成. 文件模块需要通过调用 require 方法来实现加载. Node.js 对两种模块都有缓存,不会重复开销去加载模块,只读取相应数据. 原生模块的调用 Node.js 的 API require 加载相应的 Node.js 模块,加载成功后返回一个 Node.js 模块对象. 该对象拥有该模块的所有方法和属性. var httpModule

如何发布一个自定义Node.js模块到NPM(详细步骤)

咱们闲话不多说,直接开始! 由于我从没有使用过MAC,所以我不保证本文中介绍的操作与MAC一致. 文章开始我先假定各位已经在window全局安装了Node.js,下面开始进行详细步骤介绍: 本文本着,以极少的文字说明以及极少的代码书写为原则来给大家演示! 文章中上传的模块不具备任何意义! 一.封装node.js模块时的必须项 1.创建package.json 每一个完整封装的node模块,必须含有一个参数明确的package.json文件! 以下为package.json的最精简配置: { "n

node js 模块系统

Node.js模块系统 为了让Node.js的文件可以相互调用,Node.js提供了一个简单的模块系统. 模块是Node.js 应用程序的基本组成部分,文件和模块是一一对应的.换言之,一个 Node.js 文件就是一个模块,这个文件可能是JavaScript 代码.JSON 或者编译过的C/C++ 扩展. 创建模块 在 Node.js 中,创建一个模块非常简单,如下我们创建一个 'hello.js' 文件,代码如下: var hello = require('./hello'); hello.w

3:Node.js模块系统

原文出自:http://www.w3cschool.cc/nodejs/nodejs-module-system.html Node.js模块系统 为了让Node.js的文件可以相互调用,Node.js提供了一个简单的模块系统. 模块是Node.js 应用程序的基本组成部分,文件和模块是一一对应的.换言之,一个 Node.js 文件就是一个模块,这个文件可能是JavaScript 代码.JSON 或者编译过的C/C++ 扩展. 创建模块 在 Node.js 中,创建一个模块非常简单,如下我们创建

Developer - 如何自我保证Node.js模块质量

组里正在做SaaS产品,其中一些模块(Module)是Node.js实现,这里我们主要使用Node.js实现Web Server来提供服务. 在做SaaS项目之前,组里的开发模式是传统的Deverloper + QA的模式,这是传统的协作模式,Developer负责写代码开发,当然也会有基本的自测,QA负责测试,遇到问题,提Bug给Developer去修复,Developer修复Bug后,由QA来验证并记录Bug.但这样的协作模式已不适合SaaS产品的开发,SaaS产品更新迭代快,模块众多,这就

本地安装node.js模块

一.需求 单位电脑不让上网,但是需要用到一个node.js模块,elasticdump. 二.解决 1.自己电脑上下载模块: npm install elasticdump -g 注意:必须要加 -g,因为需要全局使用.非全局的模块复制到电脑上,还没找的方法运行模块. 2.复制拷贝 a.复制 操作1步骤会默认下载到C:\Users\T470s\AppData\Roaming\npm\node_modules\elasticdump ,复制elasticdump文件夹到U盘, 再到C:\Users

Node.js 模块机制及常见面试问题解答

Node.js 模块机制采用了 Commonjs 规范,弥补了当前 JavaScript 开发大型应用没有标准的缺陷,类似于 Java 中的类文件,Python 中的 import 机制,Node.js 中可以通过 module.exports.require 来导出和引入一个模块. 在模块加载机制中,Node.js 采用了延迟加载的策略,只有在用到的情况下,系统模块才会被加载,加载完成后会放到 binding_cache 中. 面试指南 require的加载机制?,参考:模块加载机制 modu

node.js模块之fs文件系统

fs 模块是文件操作的封装,它提供了文件的读取.写入.更名.删除.遍历目录.链接等 POSIX 文件系统操作.与其他模块不同的是,fs 模块中所有的操作都提供了异步的和同步的两个版本, 例如读取文件内容的函数有异步的 fs.readFile() 和同步的fs.readFileSync().我们以几个函数为代表,介绍 fs 常用的功能,并列出 fs 所有函数的定义和功能. fs.readFile(filename,[encoding],[callback(err,data)])是最简单的读取文件的

Node.js模块

通常在创建Node.js程序时,我们需要按照一定的逻辑相关性对代码进行划分,组织成多个模块,而不是将代码都在放单个文件中.这必然像其他语言一样,有类似包或者模块的机制可以使用.我们看在Node.js中如何创建和使用模块. 1.单个文件模块 --module.js exports.add = function(a, b) { return a + b; }; var sub = function(a, b) { return a - b; }; --main.js var module = req