nodejs 模块加载机制

本文详细介绍了Node.js的模块加载机制,包括主模块的识别、模块缓存、核心模块、文件模块和文件夹作为模块的加载方式,以及循环加载的处理。此外,还探讨了模块缓存的警告、模块包装和对象,帮助读者理解Node.js如何管理和使用模块。
摘要由CSDN通过智能技术生成

Nodejs拥有一套简单的模块加载系统,在Nodejs里面文件和模块是一一对应的关系。例如:foo.js加载了同一个目录下的circle.js文件。

circle.js文件内容:

const PI = Math.PI;  
exports.area = (r) => PI*r*r;  
exports.circumference = (r) => 2*PI*r;  

foo.js文件内容:

const circle = require('./circle.js');  
console.log(`the area of radius 4 is ${circle.area(4)}`);

circle模块导出了areacircumference函数,为了根模块能够引用到它,你可以把它们添加到exports对象上。

模块内部的局部变量都是私有的, 因为每个模块都被封装在一个函数内部。上面的例中PI就是属于circle模块的局部变量。

如果你希望导出一个函数或者一个对象,你应该把该函数或者对象赋值给module.exports而不是exports


访问主模块

如果一个模块直接通过Node.js启动运行,require.main将会设置为该模块。你可以通过如下方式测试当前模块是否为主模块:

console.log(require.main === module);

举个例子,对于foo.js文件,如果通过nodejs foo.js运行,那么该测试将会输出true, 如果通过require('foo.js'),测试将输出false
由于每个module对象都有一个filename属性,也可以通过require.main.filename查看主模块文件名。


模块加载

当我们调用require加载外部文件的时候,将会调用require.resolve函数。具体的解析规则如下:

在Y目录下的模块调用require(X)  

- 1 . 如果X是一个内建核心模块,  
   a. 返回该模块  
   b. 停止执行  

- 2. 如果X使用`./`或`/`或`../`开a. 把(Y+X)作为文件路径来加载(LOAD_AS_FILE)      
   b. 把(Y+X)作为目录路径来加载(
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值