node的模块实现

node的模块实现很大程度的参考了CommonJS规范,例如使用 require(...) 引入模块,使用module.exports、exports抛出模块

这里的exports其实就是module.exports

node采用优先缓存加载模块的优化策略:即对于相同的模块的二次加载,一律先从缓存内加载

node中的模块主要分为三类:核心模块(fs、path、http...),文件模块,自定义模块(第三方依赖)
核心模块:核心模块在node源代码编译过程中就被编译为二进制代码了,查找核心模块不需要路径分析
文件模块:以 . .. / 开始的标识符,都会被当做文件模块解析,其实就是我们自己书写的模块代码,标识符就是相对路径
自定义模块(第三方依赖):这是一种特殊的文件模块,可能是一个文件或者一个包

模块路径:对于核心模块,没有模块路径一说;对于文件模块,标识符就是相对路径;对于自定义模块,会依次在本目录下的node_modules、上级目录下的node_modules 、直到最顶级目录下的node_modules下查找

模块编译:每一个使用require(...)引入的模块,其实都对模块内容进行了包装

(functon (exports, require, module,__filename, __dirname){
	//引入的模块原本的内容
	return module.exports;
}

当我们引入某一个模块时,上面的包装函数其实会被隐式的调用,举个例子:

//开发代码
const module = require("./module");

//编译代码
const module = (functon (exports, require, module,__filename, __dirname){
	//引入的module模块的原本内容
	return module.exports;
})()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值