Node.js学习笔记(九、模块系统)

Node.js模块系统

为了让Node.js的文件可以相互调用,Node.js提供了一个简单的模块系统。

模块是Node.js 应用程序的基本组成部分,文件和模块是一一对应的。换言之,一个 Node.js 文件就是一个模块,这个文件可能是JavaScript 代码、JSON 或者编译过的C/C++ 扩展。

创建模块

Node.js 提供了 exports 和 require 两个对象,其中 exports 是模块公开的接口,require 用于从外部获取一个模块的接口,即所获取模块的 exports 对象。

创建hello.js,通过 exports 对象把 world 作为模块的访问接口。

exports.world = function() {
  console.log('Hello World');
}

创建test.js,通过require(’./hello’) 加载hello模块,然后就可以直接访 问 hello.js 中 exports 对象的成员函数了。

var hello = require('./hello');
hello.world();

只把一个对象封装到模块中,格式如下:

module.exports = function() {
  // ...
}

实例:

hello.js:

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

在test.js中直接获取这个对象:

var Hello = require('./hello'); 
hello = new Hello(); 
hello.setName('BYVoid'); 
hello.sayHello(); 

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

服务端的模块

从第一个实例开始,其实已经使用了模块,

var http = require("http");

...

http.createServer(...);

Node.js 中自带了一个叫做 http 的模块,我们在我们的代码中请求它并把返回值赋给一个本地变量。

这把我们的本地变量变成了一个拥有所有 http 模块所提供的公共方法的对象。

Node.js 的 require 方法中的文件查找策略如下:

由于 Node.js 中存在 4 类模块(原生模块和3种文件模块),尽管 require 方法极其简单,但是内部的加载却是十分复杂的,其加载优先级也各自不同。如下图所示:

Node.js学习笔记(九、模块系统)

参考:

【1】、https://www.w3cschool.cn/nodejs/nodejs-module-system.html

【2】、https://www.runoob.com/nodejs/nodejs-module-system.html


上一篇:外链的策略,怎么做外链才能更有利于SEO优化


下一篇:最新评论--MXCMS LastComm标签