Skip to content

Bun inclut un minifieur JavaScript et TypeScript rapide qui peut réduire la taille des bundles de 80 % ou plus (selon la base de code) et rendre le code de sortie plus rapide à exécuter. Le minifieur effectue des dizaines d'optimisations, notamment le pliage de constantes, l'élimination du code mort et les transformations de syntaxe. Contrairement à d'autres minifieurs, le minifieur de Bun rend bun build plus rapide car il y a moins de code à imprimer.

Utilisation CLI

Activer toute la minification

Utilisez l'option --minify pour activer tous les modes de minification :

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

L'option --minify active automatiquement :

  • La minification des espaces
  • La minification de la syntaxe
  • La minification des identifiants

Mode production

L'option --production active automatiquement la minification :

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

L'option --production active également :

  • Définit process.env.NODE_ENV sur production
  • Active l'importation et la transformation JSX en mode production

Contrôle granulaire

Vous pouvez activer des modes de minification spécifiques individuellement :

bash
# Supprimer uniquement les espaces
bun build ./index.ts --minify-whitespace --outfile=out.js

# Minifier uniquement la syntaxe
bun build ./index.ts --minify-syntax --outfile=out.js

# Minifier uniquement les identifiants
bun build ./index.ts --minify-identifiers --outfile=out.js

# Combiner des modes spécifiques
bun build ./index.ts --minify-whitespace --minify-syntax --outfile=out.js

API JavaScript

Lors de l'utilisation du bundler de Bun programmatiquement, configurez la minification via l'option minify :

ts
await Bun.build({
  entrypoints: ["./index.ts"],
  outdir: "./out",
  minify: true, // Activer tous les modes de minification
});

Pour un contrôle granulaire, passez un objet :

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

Modes de minification

Le minifieur de Bun a trois modes indépendants qui peuvent être activés séparément ou combinés.

Minification des espaces (--minify-whitespace)

Supprime tous les espaces, nouvelles lignes et formats inutiles de la sortie.

Minification de la syntaxe (--minify-syntax)

Réécrit la syntaxe JavaScript en des formes équivalentes plus courtes et effectue le pliage de constantes, l'élimination du code mort et d'autres optimisations.

Minification des identifiants (--minify-identifiers)

Renomme les variables locales et les noms de fonctions en des identifiants plus courts en utilisant une optimisation basée sur la fréquence.

Toutes les transformations

Raccourcissement des littéraux booléens

Mode : --minify-syntax

Convertit les littéraux booléens en expressions plus courtes.

ts
true
false
js
!0
!1

Optimisations de l'algèbre booléenne

Mode : --minify-syntax

Simplifie les expressions booléennes en utilisant des règles logiques.

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

Raccourcissement de undefined

Mode : --minify-syntax

Remplace undefined par un équivalent plus court.

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

Optimisation de l'égalité undefined

Mode : --minify-syntax

Optimise les vérifications d'égalité lâche avec undefined.

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

Raccourcissement de Infinity

Mode : --minify-syntax

Convertit Infinity en expressions mathématiques.

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

Optimisations de typeof

Mode : --minify-syntax

Optimise les comparaisons typeof et évalue les expressions 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"

Formatage des nombres

Mode : --minify-syntax

Formate les nombres dans la représentation la plus compacte.

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

Pliage arithmétique des constantes

Mode : --minify-syntax

Évalue les opérations arithmétiques au moment de la compilation.

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

Pliage bitwise des constantes

Mode : --minify-syntax

Évalue les opérations bitwise au moment de la compilation.

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

Concaténation de chaînes

Mode : --minify-syntax

Combine les littéraux de chaîne au moment de la compilation.

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

Indexation de chaîne

Mode : --minify-syntax

Évalue l'accès aux caractères de chaîne au moment de la compilation.

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

Pliage des littéraux de template

Mode : --minify-syntax

Évalue les littéraux de template avec des expressions constantes.

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

Conversion de littéral de template en chaîne

Mode : --minify-syntax

Convertit les littéraux de template simples en chaînes régulières.

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

Optimisation des guillemets de chaîne

Mode : --minify-syntax

Choisit le caractère de guillemet optimal pour minimiser les échappements.

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

Inlining du spread de tableau

Mode : --minify-syntax

Inline les opérations de spread de tableau avec des tableaux constants.

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

Indexation de tableau

Mode : --minify-syntax

Évalue l'accès constant au tableau au moment de la compilation.

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

Optimisation de l'accès aux propriétés

Mode : --minify-syntax

Convertit la notation entre crochets en notation par point lorsque c'est possible.

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

Pliage des comparaisons

Mode : --minify-syntax

Évalue les comparaisons constantes au moment de la compilation.

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

Pliage des opérations logiques

Mode : --minify-syntax

Simplifie les opérations logiques avec des valeurs constantes.

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

Pliage du coalescence nullish

Mode : --minify-syntax

Évalue le coalescence nullish avec des valeurs connues.

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

Simplification des expressions virgule

Mode : --minify-syntax

Supprime les expressions sans effet de bord des séquences de virgule.

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

Pliage des conditions ternaires

Mode : --minify-syntax

Évalue les expressions conditionnelles avec des conditions constantes.

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

Pliage des expressions unaires

Mode : --minify-syntax

Simplifie les opérations unaires.

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

Suppression de la double négation

Mode : --minify-syntax

Supprime les doubles négations inutiles.

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

Optimisation des instructions if

Mode : --minify-syntax

Optimise les instructions if avec des conditions constantes.

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

Élimination du code mort

Mode : --minify-syntax

Supprime le code inaccessible et le code sans effets de bord.

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

Suppression des branches inaccessibles

Mode : --minify-syntax

Supprime les branches qui ne peuvent jamais s'exécuter.

ts
while (false) {
  neverRuns();
}
js
// supprimé entièrement

Suppression des blocs vides

Mode : --minify-syntax

Supprime les blocs vides et les accolades inutiles.

ts
{ }
if (x) { }
js
;
// supprimé

Déballage des blocs à instruction unique

Mode : --minify-syntax

Supprime les accolades inutiles autour des instructions uniques.

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

Intégration des énumérations TypeScript

Mode : --minify-syntax

Intègre les valeurs d'énumération TypeScript au moment de la compilation.

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

Prise en charge des annotations Pure

Mode : Toujours actif

Respecte les annotations /*@__PURE__*/ pour le tree shaking.

ts
const x = /*@__PURE__*/ expensive();
// Si x est inutilisé...
js
// supprimé entièrement

Renommage des identifiants

Mode : --minify-identifiers

Renomme les variables locales en des noms plus courts basés sur la fréquence d'utilisation.

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

Stratégie de nommage :

  • Les identifiants les plus fréquemment utilisés obtiennent les noms les plus courts (a, b, c...)
  • Lettres simples : a-z (26 noms)
  • Lettres doubles : aa-zz (676 noms)
  • Lettres triples et au-delà selon les besoins

Identifiants préservés :

  • Mots-clés JavaScript et mots réservés
  • Identifiants globaux
  • Exports nommés (pour maintenir l'API)
  • Noms CommonJS : exports, module

Suppression des espaces

Mode : --minify-whitespace

Supprime tous les espaces inutiles.

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

Optimisation des points-virgules

Mode : --minify-whitespace

Insère des points-virgules uniquement lorsque c'est nécessaire.

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

Suppression des espaces autour des opérateurs

Mode : --minify-whitespace

Supprime les espaces autour des opérateurs.

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

Suppression des commentaires

Mode : --minify-whitespace

Supprime les commentaires sauf les commentaires de licence importants.

ts
// Ce commentaire est supprimé
/* Et celui-ci aussi */
/*! Mais ce commentaire de licence est conservé */
function test() { /* commentaire en ligne */ }
js
/*! Mais ce commentaire de licence est conservé */
function test(){}

Formatage des objets et tableaux

Mode : --minify-whitespace

Supprime les espaces dans les littéraux d'objets et de tableaux.

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

Formatage du flux de contrôle

Mode : --minify-whitespace

Supprime les espaces dans les structures de contrôle.

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);

Formatage des fonctions

Mode : --minify-whitespace

Supprime les espaces dans les déclarations de fonctions.

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;

Minimisation des parenthèses

Mode : Toujours actif

Ajoute des parenthèses uniquement lorsque c'est nécessaire pour la précédence des opérateurs.

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

Mangle des propriétés

Mode : --minify-identifiers (avec configuration)

Renomme les propriétés d'objets en des noms plus courts lorsque configuré.

ts
obj.longPropertyName
js
obj.a

Pliage des valeurs de littéraux de template

Mode : --minify-syntax

Convertit les valeurs interpolées non-chaînes en chaînes et les intègre dans le template.

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

Pliage de la longueur de chaîne constante

Mode : --minify-syntax

Évalue la propriété .length sur les littéraux de chaîne au moment de la compilation.

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

Simplification des appels de constructeur

Mode : --minify-syntax

Simplifie les appels de constructeur pour les types intégrés.

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

Intégration des objets à propriété unique

Mode : --minify-syntax

Intègre l'accès aux propriétés pour les objets avec une seule propriété.

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

Pliage constant de charCodeAt de chaîne

Mode : Toujours actif

Évalue charCodeAt() sur les littéraux de chaîne pour les caractères ASCII.

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

Égalité void 0 vers égalité null

Mode : --minify-syntax

Convertit les vérifications d'égalité lâche avec void 0 en null car elles sont équivalentes.

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

Optimisation de l'opérateur de négation

Mode : --minify-syntax

Déplace l'opérateur de négation à travers les expressions virgule.

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

Intégration des propriétés import.meta

Mode : Mode bundle

Intègre les propriétés import.meta au moment de la construction lorsque les valeurs sont connues.

ts
import.meta.dir
import.meta.file
import.meta.path
import.meta.url
js
"/chemin/vers/repertoire"
"nomfichier.js"
"/chemin/complet/vers/fichier.js"
"file:///chemin/complet/vers/fichier.js"

Fusion des déclarations de variables

Mode : --minify-syntax

Fusionne les déclarations de variables adjacentes du même type.

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

Fusion des instructions d'expression

Mode : --minify-syntax

Fusionne les instructions d'expression adjacentes en utilisant l'opérateur virgule.

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

Fusion des instructions return

Mode : --minify-syntax

Fusionne les expressions avant return avec l'opérateur virgule.

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

Fusion des instructions throw

Mode : --minify-syntax

Fusionne les expressions avant throw avec l'opérateur virgule.

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

Intégration des énumérations TypeScript entre modules

Mode : --minify-syntax (mode bundle)

Intègre les valeurs d'énumération à travers les limites des modules.

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

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

Intégration des énumérations de propriétés calculées

Mode : --minify-syntax

Intègre les valeurs d'énumération utilisées comme propriétés d'objets calculées.

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

Nombre de chaîne vers index numérique

Mode : --minify-syntax

Convertit l'accès aux propriétés numériques de chaîne en index numérique.

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

Raccourcissement du corps de fonction fléchée

Mode : Toujours actif

Utilise la syntaxe de corps d'expression lorsqu'une fonction fléchée retourne uniquement une valeur.

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

Raccourcissement des propriétés d'objet

Mode : Toujours actif

Utilise la syntaxe raccourcie lorsque le nom de propriété et l'identifiant de valeur correspondent.

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

Raccourcissement de méthode

Mode : Toujours actif

Utilise la syntaxe raccourcie de méthode dans les littéraux d'objet.

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

Suppression des instructions debugger

Mode : --drop=debugger

Supprime les instructions debugger du code.

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

Suppression des appels console

Mode : --drop=console

Supprime tous les appels de méthode console.* du code.

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

Suppression des appels de fonctions personnalisées

Mode : --drop=<name>

Supprime les appels aux fonctions ou méthodes globales spécifiées.

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

Conserver les noms

Lors de la minification des identifiants, vous pouvez souhaiter préserver les noms de fonctions et de classes originaux à des fins de débogage. Utilisez l'option --keep-names :

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

Ou dans l'API JavaScript :

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

Cela préserve la propriété .name sur les fonctions et les classes tout en minifiant toujours les noms d'identifiants réels dans le code.

Exemple combiné

Utilisation des trois modes de minification ensemble :

ts
const myVariable = 42;

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

const output = myFunction();
js
// Sortie avec --minify (49 octets, réduction de 69%)
const a=42,b=()=>{const c=!0,d=void 0;return c?a:d},e=b();

Quand utiliser la minification

Utilisez --minify pour :

  • Les bundles de production
  • Réduire les coûts de bande passante CDN
  • Améliorer les temps de chargement de page

Utilisez des modes individuels pour :

  • --minify-whitespace : Réduction rapide de la taille sans changements sémantiques
  • --minify-syntax : Sortie plus petite tout en gardant des identifiants lisibles pour le débogage
  • --minify-identifiers : Réduction maximale de la taille (combiner avec --keep-names pour de meilleures traces de pile)

Évitez la minification pour :

  • Les builds de développement (plus difficiles à déboguer)
  • Lorsque vous avez besoin de messages d'erreur lisibles
  • Les bibliothèques où les consommateurs peuvent lire la source

Bun édité par www.bunjs.com.cn