VJA*_*JAI 5 typescript tree-shaking
我正在使用 TypeScript 和 OpenTelemetry 构建一个可重用的遥测库。我正在尝试了解如何实现树摇动,以便消费者可以仅导入他们需要的模块而不是所有内容,这样他们就可以减少整体包的大小。项目结构如下所示,
lib
|
|__ trace
| |____ TraceClass.ts
| |____ index.ts
|
|__ metrics
| |____ MetricClass.ts
| |____ index.ts
|
|__ logs
| |____ LogClass.ts
| |____ index.ts
|
|__ index.ts
Run Code Online (Sandbox Code Playgroud)
我将三个主要模块“trace”、“log”和“metrics”作为单独的文件夹。正如您所看到的,每个模块都有自己的“index.ts”文件,并且有一个根“index.ts”文件。假设根“index.ts”文件是否导出子模块等所有内容。
根索引.ts
export * from './trace';
export * from './metrics';
export * from './logs';
Run Code Online (Sandbox Code Playgroud)
假设消费者TraceClass从根文件导入,如下所示,
import { TraceClass } from 'mytelemetrylib';
Run Code Online (Sandbox Code Playgroud)
上面的代码是否导入了其代码中的所有模块?
或者他们必须做这样的事情?
import { TraceClass } from 'mytelemetrylib/trace';
Run Code Online (Sandbox Code Playgroud)
如果在index.ts跟踪文件夹中:
lib
|
|__ trace
| |____ TraceClass.ts
| |____ index.ts
Run Code Online (Sandbox Code Playgroud)
您已经导出了所有内容(例如export * from './TraceClass';),并且在TraceClass.ts类中也导出了(例如export class TraceClass),然后import可以访问显式导出的所有内容(例如import { TraceClass } from 'mytelemetrylib';就足够了)。
此外,为了代码清晰,您可以对导出进行“命名空间”。例如:
export * as Trace from './trace';
export * as Metrics from './metrics';
export * as Logs from './logs';
Run Code Online (Sandbox Code Playgroud)
然后消费者可以导入:
import { Trace, Metrics, Logs } from 'mytelemetrylib';
Run Code Online (Sandbox Code Playgroud)
并将它们用于:
Trace.TraceClass // or any other explicitly exported trace related functionality.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1963 次 |
| 最近记录: |