1、通过func.toString()
可以获取function代码
2、要获取所在文件,需要错误调用func,根据堆栈可以获取
堆栈信息类似:
at module.exports.data (d:Projectaiui flowflowapp-jsmodulesmusicNewsrcscenessubplayothers.js:30:39)
at d:Projectaiui flowflowapp-jsmodulesmusicNewsrcscenessubplaypanel.js:28:39
因此可以通过下面的方式来获取文件,并读取代码文件
try {
func(null);
} catch (error) {
console.log(error.stack)
let lines = error.stack.split('
')
let first = lines[1].trim().replace("at ","")
// at module.exports.data (d:Projectaiui flowflowapp-jsmodulesmusicNewsrcscenessubplayothers.js:30:39)
// at d:Projectaiui flowflowapp-jsmodulesmusicNewsrcscenessubplaypanel.js:28:39
let file = first.substring(first.indexOf("(") + 1, first.indexOf(".js") + 3);
file = file.replace(/\/g, "/")
let fileCode = fs.readFileSync(file).toString();
}
- 为什么要获取代码文件?
获取了就能从代码读取一些有用的信息啊,比如闭包context的变量定义,比如注释信息