2021-07-06 JS反解读取源码

增强sourcemap能力,支持读取源码展示出错位置上下5行源码文件内容,方便快速确认问题。

/**
 * node parse_error.js line column // 参数为行号列号
 */
var fs = require('fs');
const readline = require('readline');
var sourceMap = require('source-map');
var arguments = process.argv.splice(2);
console.log('所传递的参数是:', arguments);
function parseJSError(aLine, aColumn) {
    fs.readFile(sourceMapName, 'utf8', function (err, data) {
        var smc = new sourceMap.SourceMapConsumer(data);
        let parseData = smc.originalPositionFor({
            line: parseInt(aLine),
            column: parseInt(aColumn)
        });
        // 输出到控制台
        console.log('解析的结果是:',parseData);
        console.log('code snipet start');
        const code = smc.sourceContentFor(parseData['source']);
        const lineNum = parseData['line'];
        var count = 0;
        code.split(/\r?\n/).forEach(function(line){
            count++;
            if (count >= lineNum - 5 && count <= lineNum + 5 ) {
                console.log(line);
            }
        })
        console.log('code snipet end');
        // 输出到文件中
        fs.appendFile('./parsed.txt', JSON.stringify(parseData) + '\n', 'utf8', function(err) {  
            if(err) {  
                console.log(err);
            }
        });  
    });
}
var sourceMapName = arguments[0];
var line = arguments[1];
var column = arguments[2];
parseJSError(line, column);

通过读取一个文件批量处理堆栈报错,输入文件格式按行输入line和column,举例:

touch error_stack.txt
vim error_stack.txt
insert
9 1666
8 1999
#! /bin/bash
echo $1
while read line; 
do 
    echo $line; 
    node parse_error.js $2 $line;
    echo ===================================
done<$1

保存为 dsymJSException.sh 文件,chmod +x dsymJSException.sh,然后执行./dsymJSException.sh error_stack.txt your_js_file_source_map
就可以解析出对应的堆栈了。
当然也可以用于前端网页处理,使用的是Node JS执行即可。

你可能感兴趣的:(2021-07-06 JS反解读取源码)