Verifica tu bundle

No te fíes de los números de este sitio. Aquí está cómo obtenerlos en tu propio proyecto.

Por qué molestarse

Porque «tree-shakeable» es una afirmación, y el único bundle que importa es el tuyo. Una librería puede ser perfectamente tree-shakeable y aun así entrar entera en tu build — un import * as, una búsqueda por cadena, un archivo barril, y el empaquetador deja de poder demostrar qué sobra.

Cómo

Compila dos veces y resta. Primero ng build --configuration production tal como lo tienes hoy; anota el tamaño gzip de los chunks de entrada. Después agrega el icono y vuelve a compilar. La diferencia es lo que te costó el icono — no lo que alguien prometió.

Para ver por qué un número es el que es, compila con --stats-json y abre el resultado en cualquier analizador de bundles. Lo que buscas es si el catálogo aparece entero: si importaste bellIcon y la salida menciona iconos que nunca nombraste, algo está anclando el registro.

El sospechoso habitual es name="bell" con provideIconCatalog(ANIMATED_ICONS). Esa ruta es una conveniencia y está documentada como tal: una búsqueda por cadena no se puede tree-shakear, así que arrastra el catálogo entero a propósito. Si quieres el número pequeño, pasa el icono por valor con [iconDef].

Qué esperar

Medido en CI en cada push contra el paquete publicado:

  • Un icono — unos 13.7 KB gzip netos sobre una app vacía, motor incluido.
  • Diez iconos — unos 15.2 KB. El motor se paga una vez; cada icono suma alrededor de 0.17 KB.
  • El catálogo entero vía name= — más de 100 KB. Ese es el trato, y es la razón de que el catálogo sea opt-in.

Si tus números quedan muy por encima de estos, la diferencia está en tu build y no en el paquete — y el archivo de estadísticas dirá dónde.