node学习—node模块化细节

一、node模块化细节

1.模块的查找

1.绝对路径

//a.js
console.log('a.js');
//index.js
require("F:\\****\\node学习\\1-2模块化细节\\a.js");

在这里插入图片描述

2.相对路径./或…/

//index.js
require("./a.js");

在这里插入图片描述

3.模块路径

在这里插入图片描述

//index.js
require("abc");

在这里插入图片描述
导入一个模块,会按以下方式寻找。
在这里插入图片描述

4.关于后缀名

在这里插入图片描述

//index.js
require("./a");

在这里插入图片描述
如果没有a.js
在这里插入图片描述

//index.js
const result = require("./a");
console.log(result);

在这里插入图片描述
在这里插入图片描述

5.关于文件名

//  src/index.js
console.log('src/index.js');
// index.js
require("./src");

会自动寻找./src/index.js文件
在这里插入图片描述
在package.json中main字段是入口文件
在这里插入图片描述

在这里插入图片描述

2.module对象

记录了当前模块的信息。

// index.js
require("./b");
// b.js
console.log(module);

在这里插入图片描述

3.require

// b.js
console.log('当前模块路径:',__dirname);
console.log('当前模块文件:',__filename);
exports.c = 3;
module.exports = {
    a: 1,
    b: 2
}
this.m = 5;
// index.js
require("./b");

导入一个模块的内部原理

//这里只是一个过程原理,主要理解导入一个模块的过程
function require(modulePath){
	//1.将modulePath转换为绝对路径:F:\****\node学习\1-2模块化细节\b.js
	//2.判断是否该模块已有缓存
		if(require.cache["F:\\****\\node学习\\1-2模块化细节\\b.js"]){
			return require.cache["F:\\****\\node学习\\1-2模块化细节\\b.js"].result;
		};
	//3.读取文件内容
	//4.包裹到一个函数中
		function __temp(module,export,require,__dirname,__filename){
			console.log('当前模块路径:',__dirname);
			console.log('当前模块文件:',__filename);
			exports.c = 3;
			module.exports = {
			    a: 1,
			    b: 2
			};
			this.m = 5;
		}
	//5.创建module对象
		module.exports = {};
		const exports = module.exports;//后将模块中的module.exports赋予module.exports,commonJs部分已讲过
		__temp.call(module.exports,module,exports,require,module.id,module.filename);
		//一开始module.exports、module、exports都指向{},this也是。
		//但模块的module.exports赋值,再改exports和this就没用了,最终返回的是return module.exports。	
}

所以模块里的this可以看做和exports相等。(module.exports被重新赋值了)

// b.js
console.log('当前模块路径:',__dirname);
console.log('当前模块文件:',__filename);
exports.c = 3;
module.exports = {
    a: 1,
    b: 2
}
this.m = 5;
console.log(this);
console.log(exports);
console.log(module.exports);
console.log(this === module.exports);
console.log(exports === module.exports);
console.log(this === exports);

在这里插入图片描述
也可以通过this.c改变exports.c的值。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

飞羽逐星

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值