Node.js是如何处理模块的

Node.js模块分为两类:原生模块和文件模块
1、原生模块:是指Node.js API提供的原生模块。原生模块在启动时就已经被加载;
2、文件模块:为动态加载模块,加载模块的工作主要是由原生模块module来实现和完成的。

原生模块在启动时已经被加载,而文件模块则需要通过调用Node.js的require方法来实现加载。

那node.js处理模块的机制是怎么样的呢 ?

node.js如何处理模块的?

上面说过了node.js模块分为原生模块和文件模块。而且它们加载和调用存在一定区别,所以 我们就分别来说说两者的调用。

1、原生模块的调用

通过使用Node.js API提供的require()直接加载相应的模块。require()加载成功后会返回一个Node.js模块对象,并且这个对象拥有该模块的所有的属性和方法。

var httpObject = require('http');  // 引入node.js原生的http模块

对于上面code, “http”是Node.js的原生模块,在这个模块里定义了createServer、request和get等多个方法和属性;而httpObject则是我们通过require方法加载原生HTTP模块后所返回的对象,通过这个对象我们就可以访问到HTTP模块所有的属性和方法。

例如:

// 通过httpObject对象调用Node.js原生HTTP模块的.createServer()方法和.listen()方法创建简单服务器
var server = httpObject.createServer(function(req, res) {
    // here are code......
}).listen( 8088 );

Node.js官方API文档:http://node.js.org/api/

2、文件模块的调用

文件模块调用与原生模块调用方式稍微有点区别,这里的区别是传入require()方法里的参数形式(加载方式)不同。调用文件模块传入的是模块路径,而原生模块不需要指定模块路径。

在调用文件模块时如果没有指明模块路径,又或者传入的路径不对都会出现下面的报错:

can not find **** module

下面是一个文件模块加载示例:

var test = require('/path/.../test.js');
// 或者var test = require('/path/.../test');

注意:
1>、‘/path/…/test.js’是test模块的绝对路径,有绝对路径当然也有相对路径,两者你自己选择使用哪一个。对于上面的示例代码,如果换成相对路径是:require(‘./test’);

2>、加载文件模块成功后返回的依然也是一个模块对象。

那现在可以用返回的模块对象test调用该文件模块的哪些属性和方法?
Node.js明确指出,在模块文件中,只有那些通过通过exports和module.exports对象暴露(如果感兴趣的话可以阅读我写细说exports和module.exports, 那片文章对export和module.exports做了详细的介绍,在这里就不多说了)给外部的属性和方法才能够通过require()方法返回的模块对象调用,而其他的方法和属性是无法获取的。例如:

/*
 * 这里是我们的文件模块代码
 */
 exports.name = " Pandora Galen ";  // exports暴露name属性
 exports.getName = function() { // exports暴露getName方法
     console.log( this.name );
 };

 yourName = " reader ";
 function love() {
     console.log('Welcome!');   
 }

如果引用上述文件模块,则name属性和getName方法是你可以调用的,而yourName属性和love方法是你无法获得的。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值