当下有这么一个需求,我要在 dev 环境下打印一些日志,所以我封装了一个函数,是这样的
const isDev = import.meta.env.DEV;
export const log = (message: string) => {
if (isDev) {
console.log(message);
}
};
但是实际使用中发现,虽然打印是没问题的,但是显示的行号却总是这个文件里的行号,导致我没法定位打印的位置。
后边发现,当库里边 throw 一个 Error 的时候,显示的行号并不是库的行,而是实际函数报错的位置 ,所以对 log 函数做一个简单的修改,让他可以打印日志,并且能显示调用的行号
const isDev = import.meta.env.DEV;
export const log = (message: string) => {
if (isDev) {
var error = new Error(message);
try {
throw error;
} catch (error) {
const _error = error as Error;
_error.name = "Debugger";
var lines = (_error.stack ?? "").split('\n');
_error.stack = [lines[0], lines[2]].join("\r\n");
console.log(_error);
}
}
};
非常好用,nice