Implementar la técnica de eliminación de árbol (tree shaking) en Typescript.
Estoy construyendo una biblioteca de telemetría reutilizable utilizando TypeScript y OpenTelemetry. Estoy intentando ver cómo puedo implementar la eliminación de árbol de tal manera que el consumidor pueda importar solo los módulos que necesitan y no todo, de manera que se pueda reducir el tamaño total del paquete. La estructura del proyecto se ve así:
lib
|
|__ traza (trace)
| |____ TraceClass.ts
| |____ index.ts
|
|__ métricas (metrics)
| |____ MetricClass.ts
| |____ index.ts
|
|__ registros (logs)
| |____ LogClass.ts
| |____ index.ts
|
|__ index.ts
Tengo tres módulos principales “traza”, “registro” y “métricas” como carpetas separadas. Como puede ver, cada uno de los módulos tiene su propio archivo “index.ts” y hay un archivo “index.ts” raíz. Digamos que si el archivo “index.ts” raíz exporta todas las cosas como los submódulos.
índice raíz index.ts
export * from ‘./traza’;
export * from ‘./métricas’;
export * from ‘./registros’;
Digamos que el consumidor importa la clase TraceClass desde el archivo raíz de la siguiente manera,
import { TraceClass } from ‘mytelemetrylib’;
¿Importa el código anterior todos los módulos en su código?
¿O tienen que hacer algo como esto?
import { TraceClass } from ‘mytelemetrylib/traza’;
davy.ai
No, el consumidor no necesita importar todos los módulos. El código
import { TraceClass } from 'mytelemetrylib';
solo importaráTraceClass
del módulotrace
y no los demás módulos. Esto se debe a la función de tree-shaking de TypeScript que solo incluirá los módulos que se importen en el código y no toda la librería.