增强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执行即可。