【发布时间】:2021-12-29 10:09:24
【问题描述】:
我正在使用 TypeScript 和 OpenTelemetry 构建一个可重复使用的遥测库。我正在尝试了解如何实现 tree-shaking 以便消费者可以只导入他们需要的模块而不是所有内容,这样他们就可以减少整体包的大小。项目结构是这样的,
lib
|
|__ trace
| |____ TraceClass.ts
| |____ index.ts
|
|__ metrics
| |____ MetricClass.ts
| |____ index.ts
|
|__ logs
| |____ LogClass.ts
| |____ index.ts
|
|__ index.ts
我将三个主要模块“trace”、“log”和“metrics”作为单独的文件夹。如您所见,每个模块都有自己的“index.ts”文件,并且有一个根“index.ts”文件。假设根“index.ts”文件是否导出了子模块之类的所有内容。
根索引.ts
export * from './trace';
export * from './metrics';
export * from './logs';
假设消费者从根文件中导入TraceClass,如下所示,
import { TraceClass } from 'mytelemetrylib';
上述代码是否导入了代码中的所有模块?
或者他们必须这样做?
import { TraceClass } from 'mytelemetrylib/trace';
【问题讨论】:
-
提供摇树效果始终是消费者的责任。这取决于他们的构建过程。库开发人员无法知道将请求哪些模块。