提交 4da4b289 编写于 作者: D DCloud_LXH

chore: uni-stacktracey readme

上级 4ab19605
### uni-stacktracey 使用说明
#### 引用方式
```js
const {
sourcemap: { stacktracey, uniStracktraceyPreset, utsStracktraceyPreset },
} = require('${HBuilderX}/plugins/uniapp-cli-vite')
```
#### stacktracey 方法
**stacktracey 方法有两个参数:**
1. stacktrace
2. opts
##### stacktrace 参数说明
> 一个错误堆栈。String 类型
**示例**
```js
// js 错误堆栈
const uniErrorMsg = `Error: Sentry Error
at a.throwError(/static/js/pages-index-index.3ab0d0e5.js:1:567)
at click(/static/js/pages-index-index.3ab0d0e5.js:1:2745)
at ee(/static/js/chunk-vendors.75525bd5.js:34:11927)
at n(/static/js/chunk-vendors.75525bd5.js:34:13747)
at ee(/static/js/chunk-vendors.75525bd5.js:34:11927)
at HTMLElement.n(/static/js/chunk-vendors.75525bd5.js:34:13824)
at HTMLElement.o._wrapper(/static/js/chunk-vendors.75525bd5.js:34:53966)
at HTMLElement.i(/static/js/chunk-vendors.75525bd5.js:7:609894)`
// uts 错误堆栈
const utsErrorMsg = `e: DCloud-UTSPlugin/android/src/io/dcloud/uniplugin/TestModule.kt: (9, 5): Unresolved reference: logxxxxxxx
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':nativeplugins:DCloud-UTSPlugin:compileReleaseKotlin'.
> Compilation error. See log for more details
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
* Get more help at https://help.gradle.org
BUILD FAILED in 2s
`
```
#### opts 参数说明
> 解析生成错误栈时需要用到的一些方法。
> 此处提供了生成该参数的两种预设方案:uniStracktraceyPreset、utsStracktraceyPreset
**预设一:`uniStracktraceyPreset`**
> 解析 js 错误栈的预设方案
```js
// 调用方式
stacktracey(uniErrorMsg, {
preset: uniStracktraceyPreset({
base: path.resolve(__dirname, './__UNI__APPID__/1.0.0/.sourcemap/h5/'),
sourceRoot: '',
}),
}).then((stacktrace) => {
// stacktrace 即为解析 sourcemap 后的错误信息
console.log('stacktrace :>> ', stacktrace)
})
```
**预设二:`utsStracktraceyPreset`**
> 解析 uts 错误栈的预设方案
```js
// 调用方式
stacktracey(utsErrorMsg, {
preset: utsStracktraceyPreset({
base: path.resolve(
__dirname,
'./nativeplugins-sourceMap/DCloud-UTSPlugin/'
),
sourceRoot: 'DCloud-UTSPlugin/android/src/',
}),
}).then((stacktrace) => {
// stacktrace 即为解析 sourcemap 后的错误信息
console.log('stacktrace :>> ', stacktrace)
})
```
**预设方案的参数说明**
1. `base`:当前项目 `sourcemap` 文件路径。如果由 `http:、https:` 开头,则会发送网络请求获取
2. `sourceRoot`:当前项目资源路径
3. 详细说明
> 由上述 stacktrace 参数说明中 `utsErrorMsg` 为例
>
> 错误信息为 e: DCloud-UTSPlugin/android/src/io/dcloud/uniplugin/TestModule.kt: (9, 5): Unresolved reference: logxxxxxxx
- 第一步:根据 `sourceRoot` 解析出包含 path 的 fileName
- 比如,`sourceRoot` 参数为:`DCloud-UTSPlugin/android/src/`
- 解析出的 `fileName` 为:`io/dcloud/uniplugin/TestModule.kt`
- 第二步:根据 `base + fileName` 参数拼接出 `sourcemap` 路径
- 比如,`base` 参数为:`C:/project/test-uni/.sourcemap/`
- 解析出的 `sourcemap` 路径为 `C:/project/test-uni/.sourcemap/io/dcloud/uniplugin/TestModule.kt.map`
......@@ -53,6 +53,7 @@ function stacktracey(stacktrace, opts) {
Promise.all(parseStack)
.then(() => {
const parseError = opts.preset.asTableStacktrace({
stack,
maxColumnWidths: {
callee: 999,
file: 999,
......@@ -113,7 +114,6 @@ function parseSourceMapContent(consumer, obj) {
}
function uniStracktraceyPreset(opts) {
const { base, sourceRoot } = opts;
let stack;
return {
parseSourceMapUrl(file, fileName) {
// 组合 sourceMapUrl
......@@ -131,9 +131,9 @@ function uniStracktraceyPreset(opts) {
return Promise.resolve(getSourceMapContent(this.parseSourceMapUrl(file, fileName)));
},
parseStacktrace(stacktrace) {
return (stack = new StackTracey__default["default"](stacktrace));
return new StackTracey__default["default"](stacktrace);
},
asTableStacktrace({ maxColumnWidths, stacktrace } = { stacktrace: '' }) {
asTableStacktrace({ maxColumnWidths, stacktrace, stack }) {
const errorName = stacktrace.split('\n')[0];
return ((errorName.indexOf('at') === -1 ? `${errorName}\n` : '') +
(stack.asTable ? stack.asTable({ maxColumnWidths }) : ''));
......@@ -142,7 +142,6 @@ function uniStracktraceyPreset(opts) {
}
function utsStracktraceyPreset(opts) {
const { base, sourceRoot } = opts;
let stack;
let errStack = [];
return {
parseSourceMapUrl(file, fileName) {
......@@ -191,11 +190,11 @@ function utsStracktraceyPreset(opts) {
};
})
.filter((x) => x !== undefined);
return (stack = {
return {
items: entries,
});
};
},
asTableStacktrace({ stacktrace } = { stacktrace: '' }) {
asTableStacktrace({ maxColumnWidths, stacktrace, stack }) {
return errStack
.map((item) => {
if (item === '%StacktraceyItem%') {
......
......@@ -51,6 +51,7 @@ function stacktracey(stacktrace, opts) {
Promise.all(parseStack)
.then(() => {
const parseError = opts.preset.asTableStacktrace({
stack,
maxColumnWidths: {
callee: 999,
file: 999,
......@@ -111,7 +112,6 @@ function parseSourceMapContent(consumer, obj) {
}
function uniStracktraceyPreset(opts) {
const { base, sourceRoot } = opts;
let stack;
return {
parseSourceMapUrl(file, fileName) {
// 组合 sourceMapUrl
......@@ -129,9 +129,9 @@ function uniStracktraceyPreset(opts) {
return Promise.resolve(getSourceMapContent(this.parseSourceMapUrl(file, fileName)));
},
parseStacktrace(stacktrace) {
return (stack = new StackTracey(stacktrace));
return new StackTracey(stacktrace);
},
asTableStacktrace({ maxColumnWidths, stacktrace } = { stacktrace: '' }) {
asTableStacktrace({ maxColumnWidths, stacktrace, stack }) {
const errorName = stacktrace.split('\n')[0];
return ((errorName.indexOf('at') === -1 ? `${errorName}\n` : '') +
(stack.asTable ? stack.asTable({ maxColumnWidths }) : ''));
......@@ -140,7 +140,6 @@ function uniStracktraceyPreset(opts) {
}
function utsStracktraceyPreset(opts) {
const { base, sourceRoot } = opts;
let stack;
let errStack = [];
return {
parseSourceMapUrl(file, fileName) {
......@@ -189,11 +188,11 @@ function utsStracktraceyPreset(opts) {
};
})
.filter((x) => x !== undefined);
return (stack = {
return {
items: entries,
});
};
},
asTableStacktrace({ stacktrace } = { stacktrace: '' }) {
asTableStacktrace({ maxColumnWidths, stacktrace, stack }) {
return errStack
.map((item) => {
if (item === '%StacktraceyItem%') {
......
......@@ -28,22 +28,23 @@ type Stacktracey = {
interface StacktraceyPreset {
/**
* 解析错误栈信息
* @param filename
* @param stacktrace
*/
parseStacktrace(stacktrace: string): Stacktracey
/**
* 根据错误信息重新赋值为错误栈信息
* @param filename
* 根据解析后的错误信息重新整合为错误栈信息
* @param opts
*/
asTableStacktrace(opts?: {
asTableStacktrace(opts: {
stack: Stacktracey
maxColumnWidths?: StackTracey.MaxColumnWidths
stacktrace: string
}): string
/**
* 根据编译后的文件名地址
* 编译后的文件名地址
* @param file
* 根据编译后的文件名
* @param filename
* 编译后的文件名
* @param fileName
*/
parseSourceMapUrl(file: string, fileName: string): string
getSourceMapContent(file: string, fileName: string): Promise<string>
......@@ -106,6 +107,7 @@ export function stacktracey(
Promise.all(parseStack)
.then(() => {
const parseError = opts.preset.asTableStacktrace({
stack,
maxColumnWidths: {
callee: 999,
file: 999,
......@@ -195,8 +197,6 @@ export function uniStracktraceyPreset(
): StacktraceyPreset {
const { base, sourceRoot } = opts
let stack: Stacktracey
return {
parseSourceMapUrl(file, fileName) {
// 组合 sourceMapUrl
......@@ -214,9 +214,9 @@ export function uniStracktraceyPreset(
)
},
parseStacktrace(stacktrace) {
return (stack = new StackTracey(stacktrace))
return new StackTracey(stacktrace)
},
asTableStacktrace({ maxColumnWidths, stacktrace } = { stacktrace: '' }) {
asTableStacktrace({ maxColumnWidths, stacktrace, stack }) {
const errorName = stacktrace.split('\n')[0]
return (
(errorName.indexOf('at') === -1 ? `${errorName}\n` : '') +
......@@ -241,7 +241,6 @@ export function utsStracktraceyPreset(
): StacktraceyPreset {
const { base, sourceRoot } = opts
let stack: Stacktracey
let errStack: string[] = []
return {
......@@ -303,11 +302,11 @@ export function utsStracktraceyPreset(
})
.filter((x) => x !== undefined)
return (stack = {
return {
items: entries as StackTracey.Entry[],
})
}
},
asTableStacktrace({ stacktrace } = { stacktrace: '' }) {
asTableStacktrace({ maxColumnWidths, stacktrace, stack }) {
return errStack
.map((item) => {
if (item === '%StacktraceyItem%') {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册