Skip to content

Bun incluye un minificador rápido de JavaScript y TypeScript que puede reducir el tamaño de los bundles en un 80% o más (dependiendo del código base) y hacer que el código de salida se ejecute más rápido. El minificador realiza docenas de optimizaciones incluyendo plegado de constantes, eliminación de código muerto y transformaciones de sintaxis. A diferencia de otros minificadores, el minificador de Bun hace que bun build se ejecute más rápido ya que hay menos código que imprimir.

Uso de CLI

Habilitar toda la minificación

Usa la bandera --minify para habilitar todos los modos de minificación:

bash
bun build ./index.ts --minify --outfile=out.js

La bandera --minify habilita automáticamente:

  • Minificación de espacios en blanco
  • Minificación de sintaxis
  • Minificación de identificadores

Modo de producción

La bandera --production habilita automáticamente la minificación:

bash
bun build ./index.ts --production --outfile=out.js

La bandera --production también:

  • Establece process.env.NODE_ENV a production
  • Habilita el import y transform JSX en modo producción

Control granular

Puedes habilitar modos específicos de minificación individualmente:

bash
# Solo eliminar espacios en blanco
bun build ./index.ts --minify-whitespace --outfile=out.js

# Solo minificar sintaxis
bun build ./index.ts --minify-syntax --outfile=out.js

# Solo minificar identificadores
bun build ./index.ts --minify-identifiers --outfile=out.js

# Combinar modos específicos
bun build ./index.ts --minify-whitespace --minify-syntax --outfile=out.js

API de JavaScript

Al usar el empaquetador de Bun programáticamente, configura la minificación a través de la opción minify:

ts
await Bun.build({
  entrypoints: ["./index.ts"],
  outdir: "./out",
  minify: true, // Habilitar todos los modos de minificación
});

Para control granular, pasa un objeto:

ts
await Bun.build({
  entrypoints: ["./index.ts"],
  outdir: "./out",
  minify: {
    whitespace: true,
    syntax: true,
    identifiers: true,
  },
});

Modos de Minificación

El minificador de Bun tiene tres modos independientes que pueden habilitarse por separado o combinados.

Minificación de espacios en blanco (--minify-whitespace)

Elimina todos los espacios en blanco, saltos de línea y formato innecesarios de la salida.

Minificación de sintaxis (--minify-syntax)

Reescribe la sintaxis de JavaScript a formas equivalentes más cortas y realiza plegado de constantes, eliminación de código muerto y otras optimizaciones.

Minificación de identificadores (--minify-identifiers)

Renombra variables locales y nombres de funciones a identificadores más cortos usando optimización basada en frecuencia.

Todas las Transformaciones

Acortamiento de literales booleanos

Modo: --minify-syntax

Convierte literales booleanos a expresiones más cortas.

ts
true
false
js
!0
!1

Optimizaciones de álgebra booleana

Modo: --minify-syntax

Simplifica expresiones booleanas usando reglas lógicas.

ts
!!x
x === true
x && true
x || false
!true
!false
js
x
x
x
x
!1
!0

Acortamiento de undefined

Modo: --minify-syntax

Reemplaza undefined con un equivalente más corto.

ts
undefined
let x = undefined;
js
void 0
let x=void 0;

Optimización de igualdad con undefined

Modo: --minify-syntax

Optimiza comparaciones de igualdad laxa con undefined.

ts
x == undefined
x != undefined
js
x == null
x != null

Acortamiento de Infinity

Modo: --minify-syntax

Convierte Infinity a expresiones matemáticas.

ts
Infinity
-Infinity
js
1/0
-1/0

Optimizaciones de typeof

Modo: --minify-syntax

Optimiza comparaciones de typeof y evalúa expresiones typeof constantes.

ts
typeof x === 'undefined'
typeof x !== 'undefined'
typeof require
typeof null
typeof true
typeof 123
typeof "str"
typeof 123n
js
typeof x>'u'
typeof x<'u'
"function"
"object"
"boolean"
"number"
"string"
"bigint"

Formato de números

Modo: --minify-syntax

Formatea números en la representación más compacta.

ts
10000
100000
1000000
1.0
-42.0
js
1e4
1e5
1e6
1
-42

Plegado de constantes aritméticas

Modo: --minify-syntax

Evalúa operaciones aritméticas en tiempo de compilación.

ts
1 + 2
10 - 5
3 * 4
10 / 2
10 % 3
2 ** 3
js
3
5
12
5
1
8

Plegado de constantes bitwise

Modo: --minify-syntax

Evalúa operaciones bitwise en tiempo de compilación.

ts
5 & 3
5 | 3
5 ^ 3
8 << 2
32 >> 2
~5
js
1
7
6
32
8
-6

Concatenación de cadenas

Modo: --minify-syntax

Combina literales de cadena en tiempo de compilación.

ts
"a" + "b"
"x" + 123
"foo" + "bar" + "baz"
js
"ab"
"x123"
"foobarbaz"

Indexación de cadenas

Modo: --minify-syntax

Evalúa acceso a caracteres de cadenas en tiempo de compilación.

ts
"foo"[2]
"hello"[0]
js
"o"
"h"

Plegado de literales de plantilla

Modo: --minify-syntax

Evalúa literales de plantilla con expresiones constantes.

ts
`a${123}b`
`result: ${5 + 10}`
js
"a123b"
"result: 15"

Conversión de literales de plantilla a cadena

Modo: --minify-syntax

Convierte literales de plantilla simples a cadenas regulares.

ts
`Hello World`
`Line 1
Line 2`
js
"Hello World"
"Line 1\nLine 2"

Optimización de comillas de cadena

Modo: --minify-syntax

Elige el carácter de comillas óptimo para minimizar escapes.

ts
"It's a string"
'He said "hello"'
`Simple string`
js
"It's a string"
'He said "hello"'
"Simple string"

Inline de spread de arrays

Modo: --minify-syntax

Incluye en línea operaciones de spread de arrays con arrays constantes.

ts
[1, ...[2, 3], 4]
[...[a, b]]
js
[1,2,3,4]
[a,b]

Indexación de arrays

Modo: --minify-syntax

Evalúa acceso a arrays constantes en tiempo de compilación.

ts
[x][0]
['a', 'b', 'c'][1]
['a', , 'c'][1]
js
x
'b'
void 0

Optimización de acceso a propiedades

Modo: --minify-syntax

Convierte notación de corchetes a notación de punto cuando es posible.

ts
obj["property"]
obj["validName"]
obj["123"]
obj["invalid-name"]
js
obj.property
obj.validName
obj["123"]
obj["invalid-name"]

Plegado de comparaciones

Modo: --minify-syntax

Evalúa comparaciones constantes en tiempo de compilación.

ts
3 < 5
5 > 3
3 <= 3
5 >= 6
"a" < "b"
js
!0
!0
!0
!1
!0

Plegado de operaciones lógicas

Modo: --minify-syntax

Simplifica operaciones lógicas con valores constantes.

ts
true && x
false && x
true || x
false || x
js
x
!1
!0
x

Plegado de coalescencia nula

Modo: --minify-syntax

Evalúa coalescencia nula con valores conocidos.

ts
null ?? x
undefined ?? x
42 ?? x
js
x
x
42

Simplificación de expresiones coma

Modo: --minify-syntax

Elimina expresiones sin efectos secundarios de secuencias coma.

ts
(0, x)
(123, "str", x)
js
x
x

Plegado de condicionales ternarios

Modo: --minify-syntax

Evalúa expresiones condicionales con condiciones constantes.

ts
true ? a : b
false ? a : b
x ? true : false
x ? false : true
js
a
b
x ? !0 : !1
x ? !1 : !0

Plegado de expresiones unarias

Modo: --minify-syntax

Simplifica operaciones unarias.

ts
+123
+"123"
-(-x)
~~x
!!x
js
123
123
123
123
x
~~x
!!x
x

Eliminación de doble negación

Modo: --minify-syntax

Elimina dobles negaciones innecesarias.

ts
!!x
!!!x
js
x
!x

Optimización de declaraciones if

Modo: --minify-syntax

Optimiza declaraciones if con condiciones constantes.

ts
if (true) x;
if (false) x;
if (x) { a; }
if (x) {} else y;
js
x;
// eliminado
if(x)a;
if(!x)y;

Eliminación de código muerto

Modo: --minify-syntax

Elimina código inalcanzable y código sin efectos secundarios.

ts
if (false) {
  unreachable();
}
function foo() {
  return x;
  deadCode();
}
js
function foo(){return x}

Eliminación de ramas inalcanzables

Modo: --minify-syntax

Elimina ramas que nunca pueden ejecutarse.

ts
while (false) {
  neverRuns();
}
js
// eliminado por completo

Eliminación de bloques vacíos

Modo: --minify-syntax

Elimina bloques vacíos y llaves innecesarias.

ts
{ }
if (x) { }
js
;
// eliminado

Desenrollado de bloques de una sola declaración

Modo: --minify-syntax

Elimina llaves innecesarias alrededor de declaraciones únicas.

ts
if (condition) {
  doSomething();
}
js
if(condition)doSomething();

Inline de enums de TypeScript

Modo: --minify-syntax

Incluye en línea valores de enum de TypeScript en tiempo de compilación.

ts
enum Color { Red, Green, Blue }
const x = Color.Red;
js
const x=0;

Soporte de anotaciones pure

Modo: Siempre activo

Respeta las anotaciones /*@__PURE__*/ para tree shaking.

ts
const x = /*@__PURE__*/ expensive();
// Si x no se usa...
js
// eliminado por completo

Renombrado de identificadores

Modo: --minify-identifiers

Renombra variables locales a nombres más cortos basados en la frecuencia de uso.

ts
function calculateSum(firstNumber, secondNumber) {
  const result = firstNumber + secondNumber;
  return result;
}
js
function a(b,c){const d=b+c;return d}

Estrategia de nomenclatura:

  • Los identificadores más frecuentemente usados obtienen los nombres más cortos (a, b, c...)
  • Letras simples: a-z (26 nombres)
  • Letras dobles: aa-zz (676 nombres)
  • Letras triples y más según sea necesario

Identificadores preservados:

  • Palabras clave y reservadas de JavaScript
  • Identificadores globales
  • Exportaciones nombradas (para mantener la API)
  • Nombres de CommonJS: exports, module

Eliminación de espacios en blanco

Modo: --minify-whitespace

Elimina todos los espacios en blanco innecesarios.

ts
function add(a, b) {
    return a + b;
}
let x = 10;
js
function add(a,b){return a+b;}let x=10;

Optimización de punto y coma

Modo: --minify-whitespace

Inserta punto y coma solo cuando es necesario.

ts
let a = 1;
let b = 2;
return a + b;
js
let a=1;let b=2;return a+b

Eliminación de espacios en operadores

Modo: --minify-whitespace

Elimina espacios alrededor de operadores.

ts
a + b
x = y * z
foo && bar || baz
js
a+b
x=y*z
foo&&bar||baz

Eliminación de comentarios

Modo: --minify-whitespace

Elimina comentarios excepto comentarios importantes de licencia.

ts
// Este comentario se elimina
/* También este */
/*! Pero este comentario de licencia se mantiene */
function test() { /* comentario en línea */ }
js
/*! Pero este comentario de licencia se mantiene */
function test(){}

Formato de objetos y arrays

Modo: --minify-whitespace

Elimina espacios en blanco en literales de objetos y arrays.

ts
const obj = {
    name: "John",
    age: 30
};
const arr = [1, 2, 3];
js
const obj={name:"John",age:30};const arr=[1,2,3];

Formato de flujo de control

Modo: --minify-whitespace

Elimina espacios en blanco en estructuras de control.

ts
if (condition) {
    doSomething();
}
for (let i = 0; i < 10; i++) {
    console.log(i);
}
js
if(condition)doSomething();for(let i=0;i<10;i++)console.log(i);

Formato de funciones

Modo: --minify-whitespace

Elimina espacios en blanco en declaraciones de funciones.

ts
function myFunction(param1, param2) {
    return param1 + param2;
}
const arrow = (a, b) => a + b;
js
function myFunction(a,b){return a+b}const arrow=(a,b)=>a+b;

Minimización de paréntesis

Modo: Siempre activo

Solo agrega paréntesis cuando es necesario para la precedencia de operadores.

ts
(a + b) * c
a + (b * c)
((x))
js
(a+b)*c
a+b*c
x

Mangle de propiedades

Modo: --minify-identifiers (con configuración)

Renombra propiedades de objetos a nombres más cortos cuando se configura.

ts
obj.longPropertyName
js
obj.a

Plegado de valores de literales de plantilla

Modo: --minify-syntax

Convierte valores interpolados que no son cadenas a cadenas y los pliega en la plantilla.

ts
`hello ${123}`
`value: ${true}`
`result: ${null}`
`status: ${undefined}`
`big: ${10n}`
js
"hello 123"
"value: true"
"result: null"
"status: undefined"
"big: 10"

Plegado de constantes de longitud de cadena

Modo: --minify-syntax

Evalúa la propiedad .length en literales de cadena en tiempo de compilación.

ts
"hello world".length
"test".length
js
11
4

Simplificación de llamadas a constructores

Modo: --minify-syntax

Simplifica llamadas a constructores para tipos integrados.

ts
new Object()
new Object(null)
new Object({a: 1})
new Array()
new Array(x, y)
js
{}
{}
{a:1}
[]
[x,y]

Inline de objetos de una sola propiedad

Modo: --minify-syntax

Incluye en línea acceso a propiedades para objetos con una sola propiedad.

ts
({fn: () => console.log('hi')}).fn()
js
(() => console.log('hi'))()

Plegado de constantes String charCodeAt

Modo: Siempre activo

Evalúa charCodeAt() en literales de cadena para caracteres ASCII.

ts
"hello".charCodeAt(1)
"A".charCodeAt(0)
js
101
65

Igualdad Void 0 a igualdad null

Modo: --minify-syntax

Convierte comparaciones de igualdad laxa con void 0 a null ya que son equivalentes.

ts
x == void 0
x != void 0
js
x == null
x != null

Optimización de operador de negación

Modo: --minify-syntax

Mueve el operador de negación a través de expresiones coma.

ts
-(a, b)
-(x, y, z)
js
a,-b
x,y,-z

Inline de propiedades Import.meta

Modo: Modo bundle

Incluye en línea propiedades import.meta en tiempo de construcción cuando los valores son conocidos.

ts
import.meta.dir
import.meta.file
import.meta.path
import.meta.url
js
"/path/to/directory"
"filename.js"
"/full/path/to/file.js"
"file:///full/path/to/file.js"

Fusión de declaraciones de variables

Modo: --minify-syntax

Fusiona declaraciones de variables adyacentes del mismo tipo.

ts
let a = 1;
let b = 2;
const c = 3;
const d = 4;
js
let a=1,b=2;
const c=3,d=4;

Fusión de declaraciones de expresiones

Modo: --minify-syntax

Fusiona declaraciones de expresiones adyacentes usando el operador coma.

ts
console.log(1);
console.log(2);
console.log(3);
js
console.log(1),console.log(2),console.log(3);

Fusión de declaraciones return

Modo: --minify-syntax

Fusiona expresiones antes de return con el operador coma.

ts
console.log(x);
return y;
js
return console.log(x),y;

Fusión de declaraciones throw

Modo: --minify-syntax

Fusiona expresiones antes de throw con el operador coma.

ts
console.log(x);
throw new Error();
js
throw(console.log(x),new Error());

Inline de enums de TypeScript entre módulos

Modo: --minify-syntax (modo bundle)

Incluye en línea valores de enum a través de límites de módulos.

ts
// lib.ts
export enum Color { Red, Green, Blue }

// Input (main.ts)
import { Color } from './lib';
const x = Color.Red;
js
const x=0;

Inline de enums de propiedades computadas

Modo: --minify-syntax

Incluye en línea valores de enum usados como propiedades de objetos computados.

ts
enum Keys { FOO = 'foo' }
const obj = { [Keys.FOO]: value }
js
const obj={foo:value}

Número de cadena a índice numérico

Modo: --minify-syntax

Convierte acceso a propiedades numéricas de cadena a índice numérico.

ts
obj["0"]
arr["5"]
js
obj[0]
arr[5]

Acortamiento de cuerpo de función flecha

Modo: Siempre activo

Usa sintaxis de cuerpo de expresión cuando una función flecha solo devuelve un valor.

ts
() => { return x; }
(a) => { return a + 1; }
js
() => x
a => a + 1

Atajo de propiedades de objeto

Modo: Siempre activo

Usa sintaxis abreviada cuando el nombre de la propiedad y el identificador del valor coinciden.

ts
{ x: x, y: y }
{ name: name, age: age }
js
{ x, y }
{ name, age }

Atajo de método

Modo: Siempre activo

Usa sintaxis abreviada de método en literales de objetos.

ts
{
  foo: function() {},
  bar: async function() {}
}
js
{
  foo() {},
  async bar() {}
}

Eliminar declaraciones debugger

Modo: --drop=debugger

Elimina declaraciones debugger del código.

ts
function test() {
  debugger;
  return x;
}
js
function test(){return x}

Eliminar llamadas a console

Modo: --drop=console

Elimina todas las llamadas a métodos console.* del código.

ts
console.log("debug");
console.warn("warning");
x = console.error("error");
js
void 0;
void 0;
x=void 0;

Eliminar llamadas a funciones personalizadas

Modo: --drop=<name>

Elimina llamadas a funciones o métodos globales especificados.

ts
assert(condition);
obj.assert(test);
js
void 0;
void 0;

Keep Names

Al minificar identificadores, es posible que desees preservar los nombres originales de funciones y clases para propósitos de depuración. Usa la bandera --keep-names:

bash
bun build ./index.ts --minify --keep-names --outfile=out.js

O en la API de JavaScript:

ts
await Bun.build({
  entrypoints: ["./index.ts"],
  outdir: "./out",
  minify: {
    identifiers: true,
    keepNames: true,
  },
});

Esto preserva la propiedad .name en funciones y clases mientras aún minifica los nombres de identificadores reales en el código.

Ejemplo Combinado

Usando los tres modos de minificación juntos:

ts
const myVariable = 42;

const myFunction = () => {
  const isValid = true;
  const result = undefined;
  return isValid ? myVariable : result;
};

const output = myFunction();
js
// Salida con --minify (49 bytes, 69% de reducción)
const a=42,b=()=>{const c=!0,d=void 0;return c?a:d},e=b();

Cuándo Usar Minificación

Usa --minify para:

  • Bundles de producción
  • Reducir costos de ancho de banda de CDN
  • Mejorar tiempos de carga de páginas

Usa modos individuales para:

  • --minify-whitespace: Reducción rápida de tamaño sin cambios semánticos
  • --minify-syntax: Salida más pequeña manteniendo identificadores legibles para depuración
  • --minify-identifiers: Máxima reducción de tamaño (combina con --keep-names para mejores stack traces)

Evita la minificación para:

  • Builds de desarrollo (más difícil de depurar)
  • Cuando necesitas mensajes de error legibles
  • Librerías donde los consumidores pueden leer el código fuente

Bun por www.bunjs.com.cn editar