alibaba / alibaba/ice

日志输出优化

Open
#5,690 0 comments 0 reactions 1 assignee Assigned to @luhc228 View on GitHub
discussion
Dominant language
TypeScript
Stars
18.6k
Forks
2.1k
PR merge metrics
No merged PRs in 30d

Description

目前通过 consola 的方式控制日志等级,并通过设置 CONSOLA_LEVEL 的方式控制 debug 信息的输出。但由于目前的构建任务复杂,并且插件也推荐通过 debug 输出日志,一旦开启输入后,日志内容相对较多,造成大量不必要干扰。期望优化成更加细粒度的日志输出逻辑。

### 方案设计

#### 错误日志合并

##### 设计的前置思考

一旦编译发生错误,大概率是用户代码出现问题,这个时候不管是 data-loader 构建、server 构建还是 client 端代码构建等都会出错。因此大部分场景下开发者仅需要关心修复 client 端的错误,其余构建任务特别是 预构建 / server / data-loader / 配置获取的构建任务都不应该关心,由框架保证其执行的可靠性。

> server 端的构建错误基本上和 client 端保持一致,绝大多数为同构代码的错误,类似 `window is not defined`,而这种错误将在执行 server 逻辑的时候抛出

##### 合并设计

对于除 client 端外错误外,其他编译错误不再直接抛出,而通过中心化逻辑对错误进行处理,并在构建结束后输出一条 summary:

```js
import errorMessage from './errorMessage';

try {
await serverCompiler();
} catch(err) {
errorMessage.add('namespace', err);
}

// after webpack compile
errorMessage.summary(); // 仅输出一条总结性错误,并给出输出详细错误的提示
```

#### 错误输出控制

在 log level 的基础上增加,`--debug=namespace` 的能力,为框架内置的几个主要编译任务设置 namespace:
- pre,包含预分析,预编译
- server,服务端编译
- config,appconfig / routeconfig 等轻量配置任务
- dataloader,dataLoader 构建任务

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.