7.创建及加载模块
Posted AlanTao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了7.创建及加载模块相关的知识,希望对你有一定的参考价值。
模块(Module)和包(Package)是 Node.js最重要的支柱。开发一个具有一定规模的程序不可能只用一个文件,通常需要把各个功能拆分、封装,然后组合起来,模块正是为了实现这种方式而诞生的。
1.什么是模块;
2.如何创建并加载模块;
3.如何创建一个包;
4.如何使用包管理器;
1.什么是模块 ==> 一个文件就是一个模块
模块是 Node.js 应用程序的基本组成部分,文件和模块是一一对应的。换言之,一个Node.js 文件就是一个模块,这个文件可能是javascript 代码、JSON或者编译过的 C/C++ 扩展。
在前面章节的例子中,我们曾经用到了 var http = require(‘http‘),其中 http 是 Node.js 的一个核心模块,其内部是用 C++实现的,外部用 JavaScript 封装。我们通过 require 函数获取了这个模块,然后才能使用其中的对象。
2.创建模块
创建一个模块非常简单,因为一个文件就是一个模块,我们要关注的问
题仅仅在于如何在其他文件中获取这个模块。
exports ==> 模块公开的接口
require ==> 用于从外部获取一个模块的接口,即所获取模块的 exports 对象。
// 创建一个模块文件 module.js var name; exports.setName = function (thyName) { name = thyName; }; exports.sayHello = function () { console.log(‘Hello ‘ + name); };
引入模块, 在同一目录下创建 getmodule.js ,内容是:
var myModule1 = require(‘./module‘); myModule1.setName(‘Alan‘); myModule1.sayHello(); // Alan // module.js 通过 exports 对象把 setName 和 sayHello 作为模块的访问接口, 在 getmodule.js 中通过 require(‘./module‘) 加载这个模块,然后就可以直接访问 module.js 中 exports 对象的成员函数了。 npm提供的上万个模块都是通过这种简单的方式搭建起来的。
没有重装, 后者覆盖前者
var myModule2 = require("./module.js"); myModule2.setName("Alan2"); var myModule3 = require("./module.js"); myModule3.setName("Alan3"); myModule1.sayHello(); // Alan3 myModule2.sayHello(); // Alan3 myModule3.sayHello(); // Alan3
3.覆盖exports
有时候我们只是想把一个对象封装到模块中,例如:singleobject.js
在其他文件中需要通过 require(‘./singleobject‘).Hello 来获取
Hello 对象,这略显冗余
function Hello() { var name; this.setName = function (thyName) { name = thyName; }; this.sayHello = function () { console.log(‘Hello ‘ + name); }; }; exports.Hello = Hello;
模块接口的唯一变化是使用 module.exports = Hello 代替了 exports.Hello=Hello。在外部引用该模块时,其接口对象就是要输出的Hello 对象本身,而不是原先的 exports。
//使用模块接口module.exports ==> hello.js function Hello() { var name; this.setName = function (thyName) { name = thyName; }; this.sayHello = function () { console.log(‘Hello ‘ + name); }; }; module.exports = Hello; 这样就可以直接获得这个对象了 ==> gethello.js var Hello = require(‘./hello.js‘); hello = new Hello(); hello.setName(‘Wu‘); hello.sayHello(); // 事实上,exports 本身仅仅是一个普通的空对象,即{},它专门用来声明接口,本质上是通过它为模块闭包①的内部建立了一个有限的访问接口。因为它没有任何特殊的地方,所以可以用其他东西来代替,譬如我们上面例子中的 Hello 对象。
不可以通过对 exports 直接赋值代替对 module.exports赋值。exports 实际上只是一个和 module.exports指向同一个对象的变量,它本身会在模块执行结束后释放,但module 不会,因此只能通过指定 module.exports 来改变访问接口。
以上是关于7.创建及加载模块的主要内容,如果未能解决你的问题,请参考以下文章
续:纠正:ubuntu7.04可以安装,而且完美的安装 ! for《Oracle-10.2.0.1,打补丁10.2.0.5:在 debian 版本4不含4以上,及 ubuntu 7.04不含(代码片段