增強(qiáng)sourcemap能力蜜托,支持讀取源碼展示出錯(cuò)位置上下5行源碼文件內(nèi)容聪全,方便快速確認(rèn)問題。
/**
* node parse_error.js line column // 參數(shù)為行號(hào)列號(hào)
*/
var fs = require('fs');
const readline = require('readline');
var sourceMap = require('source-map');
var arguments = process.argv.splice(2);
console.log('所傳遞的參數(shù)是:', 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)
});
// 輸出到控制臺(tái)
console.log('解析的結(jié)果是:',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);
通過讀取一個(gè)文件批量處理堆棧報(bào)錯(cuò)载佳,輸入文件格式按行輸入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蔫慧,然后執(zhí)行./dsymJSException.sh error_stack.txt your_js_file_source_map
就可以解析出對(duì)應(yīng)的堆棧了挠乳。
當(dāng)然也可以用于前端網(wǎng)頁處理,使用的是Node JS執(zhí)行即可藕漱。