Node.js模块系统

2019-03-27  本文已影响0人  贪恋冬天的幸福

Node.js 中的require方法接受以下几种参数的传递:

文件模块

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

//hello.js
exports.world = function() {
      console.log('Hello');
}
//main.js
var hello = require('./hello');//"./"是当前目录,node.js默认后缀是js
hello.world();

//有时候我们只是想把一个对象封装到模块中
module.exports = function() {
}
//例如:
//hello.js
function Hello() {
     var name;
     this.setName = function(theName) {
         name = theName;
     }
     this.sayHello = function() {
         console.log('Hello ' + name);
     }
}
module.exports = Hello;

//main.js
var Hello = require('./hello');
hello = new Hello();
hello.setName('Node.js');
hello.sayHello();//Hello Node.js

模块接口的唯一变化是使用 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内部中的加载优先级不同,查找策略如下:


可以看出require优先从文件模块的缓存中加载,若文件模块的缓存中不存在,则优先从原生模块中加载,当文件模块缓存中不存在,而且不是原生模块的时候,则从文件系统中加载实际的文件。
上一篇 下一篇

猜你喜欢

热点阅读