node36

36、模块的断点调试

const vm = require('vm'); //虚拟机模式,可以创建沙箱环境
vm.runInThisContext(`console.log(a)`);

useA.js
let r = require('./a');
console.log(r);
console.log(this); //this:{}

https://nodejs.org/en/docs/inspector

1、掌握node中如何实现代码调试  node --inspect-brk 文件名来解析
(1)可以在浏览器中进行调试(调试某些模块可以使用这种方式)
(2)直接使用webstorm和vscode自带调试方式,直接通过launch.json进行调试(这种方法最常用)
(3)在控制台中调试

const a = 1;
const b = 2;
function sum(x,y){
	return x+y;
}
sum(a,b);

浏览器调试:
node --inspect-brk useA.js
在浏览器中输入chrome://inspect

vscode调试:
进入到require源码需要借助vscode,打开一个文件夹,设置断点(在require处),打开launch.json,注掉
<!--
"skipFiles":[
	"<node_internals>/**"
],
 -->

 分析node源码:
 1、会默认调用require语法
 2、Module.prototype.require模块的原型上有require方法
 3、Module._load调用模块的加载方法,最终返回的是module.exports
 4、Module._resolveFilename解析文件名 ,将文件名变成绝对路径,默认尝试添加.js/.json/.node
 5、Module.__cache默认会判断是否存在缓存
 6、new Module创建模块(对象) id, exports
 7、把模块缓存起来,方便下次使用
 --------------根据文件名(绝对路径)创建一个模块

 8、tryModuleLoad 尝试加载模块 module.load
 9、module.paths第三方模块查找的路径
 10、获取当前模块的扩展名   根据扩展名调用对应的方法 Module.__extensions策略模式

 11、获取文件的内容
 12、调用Module.__compile方法
 13、将用户的内容包裹到一个函数中(function (exports,require,module,__filename,__dirname){})

 //最终返回的是module.exports,用户会给这个module.exports进行赋值

 a.js
 let a = 1;
 module.exports = a;

 useA.js
 let r = require('./a');
 console.log(this);

 (function(exports,require,module,__filename,__dirname){
	let a = 1;
	module.exports = a;

	return module.exports;
 })

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值