JavaScript est l’un des langages de programmation les plus populaires et les plus largement adoptés au monde. Il propulse des applications web, des applications mobiles, des logiciels, et même des périphériques embarqués. Malgré son utilisation répandue, il n’est pas exempt de défis. Comme toutes les technologies, JavaScript est confronté à des problèmes de performance, de compatibilité, de sécurité et de complexité.

Pour résoudre ces problèmes, plusieurs moteurs d’exécution JavaScript ont été développés au fil des ans. Node.js et Deno se distinguent, chacun apportant des solutions aux limites de JavaScript. Cependant, s’ils ont résolu de nombreux problèmes, ils en ont également introduit de nouveaux, tels que la nécessité de paquets inutiles et des performances d’exécution plus lentes.

Aujourd’hui, il y a Bun, un moteur d’exécution JavaScript qui existe depuis un certain temps, mais dont l’équipe n’a publié une version stable que récemment, en septembre 2023. Bun est conçu pour être une alternative directe et plus efficace à Node.js.

Cet article explore Bun, ses caractéristiques distinctives et la manière de l’intégrer dans vos projets JavaScript.

Qu’est-ce que Bun ?

Page d'accueil du site Bun.sh.
Page d’accueil du site Bun.sh.

Bun est un moteur d’exécution JavaScript écrit principalement dans le langage de programmation Zig. Il vise à répondre aux limitations de Node.js tout en fournissant une expérience de développement plus rationalisée et plus efficace.

Cependant, Bun n’est pas un simple runtime JavaScript comme il y en a eu beaucoup au fil des ans : Il s’agit d’une boîte à outils tout-en-un conçue pour révolutionner la façon dont les développeurs travaillent avec JavaScript et TypeScript. En étendant JavaScriptCore, le moteur de Safari d’Apple, Bun permet un démarrage rapide et une meilleure utilisation de la mémoire.

Contrairement à Node.js, Bun ne s’appuie pas sur npm et ne nécessite pas de dépendances externes pour fonctionner. Au lieu de cela, il dispose d’une bibliothèque standard intégrée, offrant des fonctionnalités pour divers protocoles et modules, y compris les variables d’environnement, HTTP, WebSocket, le système de fichiers, et plus encore.

Il offre également un support ou͏t-of-the-box pour TypeScript. Et comme Bun transpose en interne chaque fichier source JavaScript ou TypeScript, vous pouvez compiler et exécuter des fichiers TypeScript͏ directement, sans con͏figuration ou transpilation supplémentaire.

Bun est livré avec un puissant outil d’interface de ligne de commande (CLI) qui vous permet de run, format, lint, test͏, et bundle votre code à l’aide des commandes simples suivantes :

  • bun run – exécute un fichier JavaScript ou TypeScript avec Bun.
  • bun test – exécute des tests unitaires avec le cadre de testin͏g intégré à Bun.
  • bun fmt – forma͏ts de code avec le formateur de code intégré de Bun.
  • bun lint – linte le code avec le linteur de code intégré à Bun.
  • bun bundle – regroupe le code avec l’outil de regroupement de code intégré à Bun.

Une autre caractéristique remarquable de Bun est sa fonction de rechargement à chaud, qui actualise les changements de code à la volée tout en préservant l’état de l’application. Il s’agit d’une amélioration significative par rapport à Node.js, où une fonctionnalité similaire nécessite des paquets externes tels que nodemon ou le drapeau expérimental --watch. En revanche, Bun rationalise ce processus en utilisant l’option --hot flag.

Au-delà de ses avantages techniques, Bun s’enorgueillit d’une communauté croissante d’utilisateurs qui contribuent activement à son développement et à son amélioration. Cette communauté dynamique veille à ce que Bun reste à jour et réactif, offrant de nombreuses ressources pour l’apprentissage et le dépannage.

Principales fonctionnalités de Bun

Outre le rechargement à chaud, le support natif de TypeScript et des temps de démarrage plus rapides, Bun possède plusieurs fonctionnalités de base qui contribuent à sa popularité et à ses performances en tant que moteur d’exécution JavaScript : son bundler, son gestionnaire de tests et son gestionnaire de paquets. Voyons ces fonctionnalités en détail.

Le bundler

Un bundler consolide le code JavaScript et ses dépendances dans un seul fichier͏, optimisant son efficacité de chargement pour les navigateurs ou dans les applications Node.js. Node.js ne dispose pas d’un bundler͏ natif, ce qui oblige les développeurs à s’appuyer sur des bundlers tiers tels que Rollup, Webpack et ͏Parcel lorsqu’ils manipulent du code JavaScript.

En revanche, Bun propose un bundler intégré nécessitant une configuration minimale et prenant en charge différents formats de modules. Il dispose également d’optimisations intégrées qui permettent un regroupement plus rapide. Comparativement, le bundler de Bun surpasse les autres, fonctionnant 1,75x plus vite que ͏esbuild, 150x plus vite que Parcel, 180x plus vite que Rollup + Terser, et ͏220x plus vite que Webpack.

Vous ͏pouvez bundler votre projet via la commande bun bundle ͏<source> --out-dir <directory>. Il génère le fichier de sortie dans le répertoire de sortie que vous avez spécifié :

Regrouper un projet avec Bun.
Regrouper un projet avec Bun.

Les tests

Les tests͏ font partie intégrante du développement de logiciels, garantissant la fonctionnalité du code et identifiant les problèmes potentiels avant la mise en production. Bun aussi in͏corpore un programme de test dans sa boîte à outils.

Traditionnellement, les développeurs de Node.js ont utilisé des cadres de test externes comme Jest, qui est puissant et flexible mais qui introduit des dépendances supplémentaires et une surcharge de configuration pour le projet.

D’autre part, Bun intègre son propre gestionnaire de tests, en mettant l’accent sur la vitesse et la compatibilité. Cette approche intégrée offre plusieurs avantages :

  • Vitesse – Avec l’exécution des tests intégrée dans le runtime, l’exécution des tests se fait directement sans avoir à charger des frameworks de test externes. Il en résulte une exécution plus rapide des tests, ce qui est particulièrement avantageux dans les grandes bases de code ou les environnements d’intégration continue.
  • Compatibilité – Le moteur de test intégré fonctionne de manière transparente avec les autres fonctionnalités de Bun. Il exploite les temps de démarrage rapides de Bun et l’utilisation efficace de la mémoire, garantissant que vos tests s’exécutent dans un environnement imitant votre environnement de production.
  • Simplicité – Avec le moteur de test intégré, vous n’avez pas à vous soucier de la configuration et du maintien de la compatibilité entre votre runtime et votre framework de test. Vous pouvez écrire des tests de la même manière que le code de l’application, en utilisant les mêmes fonctionnalités de langage et les mêmes API.

L’exécution des tests dans Bun est entièrement compatible͏ avec divers cadres de test. L’exécution des tests est aussi simple que l’exécution de la commande bun test

En outre, comme Bun prend en charge nativement TypeScript ͏et JSX, il n’y a pas besoin͏ de configurations ou d’extensions supplémentaires. Vous pouvez vous concentrer sur l’écriture de tests de qualité plutôt que sur la mise en place de l’environnement de test.͏

Gestionnaire de paquets

Le gestionnaire de paquets compatible avec Node.js de Bun est nettement plus rapide que npm, yarn et pnpm. Il accélère la vitesse, réduit l’utilisation du disque et minimise l’empreinte mémoire.

Benchmark de Bun, pnpm, npm et Yarn par l'équipe de Bun.
Benchmark de Bun, pnpm, npm et Yarn par l’équipe de Bun.

En utilisant des symli͏nks, Bun relie les paquets͏ de chaque projet à un emplacement centralisé, éliminant ainsi le besoin de re-télécharger les modules pour les projets suivants.͏ Bien que l’utilisation des symlinks ne soit pas entièrement nouvelle dans les gestionnaires de paquets, l’implémentation de Bun surpasse les autres.

Démarrer avec Bun

Pour commencer à utiliser Bun sur votre ordinateur, installez-le. Il existe plusieurs méthodes pour installer Bun, notamment en utilisant une commande cURL, npm ou Homebrew. Cependant, il est essentiel de noter que Bun est utilisé de manière optimale sur les systèmes macOS ou Linux.

Pour installer Bun via la commande cURL, exécutez ce qui suit dans votre terminal :

curl -fsSL https://bun.sh/install | bash

Après une installation réussie, vérifiez-la en exécutant bun --version dans votre terminal. Cela confirme que Bun est prêt à être utilisé.

Vous êtes maintenant prêt à explorer les capacités de Bun. Vous pouvez utiliser Bun pour exécuter vos projets Node.js avec la commande bun run. De plus, pour exécuter un fichier TypeScript nommé index.ts, utilisez bun run index.ts – Bun transpose vos fichiers TypeScript, éliminant ainsi le besoin de paquets supplémentaires.

L’utilité de Bun va au-delà de ces principes de base. Il s’intègre parfaitement aux frameworks JavaScript tels que React et Next.js. Pour aller plus loin et découvrir les fonctionnalités de Bun, consultez la documentation officielle.

Comment exécuter des projets Node.js avec Bun

Migrer ou exécuter vos projets Node.js avec Bun est simple, et ne nécessite que quelques commandes CLI Bun. Suivez ces étapes pour exécuter vos projets Node.js avec Bun :

  1. Tout d’abord, installez Bun. Une fois Bun installé, accédez au répertoire contenant les fichiers de votre projet Node.js (y compris le fichier package.json ). Dans le répertoire de travail de votre projet, exécutez la commande suivante :
    bun install

    La commande ci-dessus permet à Bun de lire le fichier package.j son dans le répertoire de votre projet Node.js, d’examiner le fichier ͏lock .json (s’il est présent) et d’installer les dépendances répertoriées à l’aide de son gestionnaire de paquets intégré.

    Installation des dépendances avec Bun.
    Installation des dépendances avec Bun.

  2. Une fois les dépendances installées, vous pouvez exécuter votre projet avec Bun. Utilisez la commande bun run, suivie du fichier point d’entrée de votre projet :
    bun run 

    Par exemple, si le point d’entrée de votre projet est ͏un fichier appelé index.js, saisissez bun run index.͏js .

    Bun exécute le co͏de JavaScript ou TypeScript dans le fichier spécifié. Si votre projet a un script de démarrage défini dans son fichier package.json, vous pouvez également utiliser bun start pour lancer votre projet.

    Exécution du projet Bun dans Visual Studio Code.
    Exécution du projet Bun dans Visual Studio Code.

La transition vers un nouvel environnement d’exécution peut poser des problèmes. Cependant, le support robuste de Bun pour les modules Node.js, la reconnaissance des variables globales et l’adhérence à l’algorithme de résolution des modules Node.js facilitent le processus de migration de Node.js vers ͏Bun.

Supposons que vous travaillez sur un projet Node.js qui utilise actuellement le paquet dotenv pour gérer les variables d’environnement. Dans ce scénario, vous pouvez supprimer en toute sécurité le paquet dotenv ainsi que son code d’initialisation de votre projet. En effet, Bun a la capacité intégrée de lire automatiquement vos fichiers .env, ce qui rend le paquet dotenv inutile.

N’oubliez pas que Bun est encore en cours de développement, il est donc préférable de procéder avec prudence pendant le processus de migration.

Intégrer Bun à l’hébergement d’applications de Kinsta

L’hébergement d’une application Bun sur Kinsta est transparent grâce à l’hébergement d’application de Kinsta avec les Nixpacks utilisés pour construire votre projet.

Nixpacks, similaire à Buildpacks, est un projet open source conçu pour créer des images de conteneurs pour les applications basées sur leur référentiel. S’appuyant sur le binaire Nix, cet outil construit des applications, installe les dépendances et configure les environnements lors du déploiement.

Son architecture basée sur Rust garantit des temps de construction plus rapides. Nixpacks se distingue notamment de Buildpacks par l’intégration d’un système de mise en cache, ce qui accélère considérablement les constructions ultérieures après la première.

L’adoption de Nixpacks par Kinsta souligne son engagement en faveur d’une technologie de pointe, offrant des solutions plus efficaces et plus flexibles pour gérer les images de conteneurs et rationaliser le processus de développement.

Pour déployer votre projet Bun sur l’hébergement d’applications de Kinsta, commencez par pousser votre code vers un fournisseur Git préféré (Bitbucket, GitHub ou GitLab). Une fois que votre dépôt est prêt, suivez les étapes suivantes pour le déployer avec Kinsta :

  1. Connectez-vous ou créez un compte pour afficher votre tableau de bord MyKinsta.
  2. Autorisez Kinsta avec votre fournisseur Git.
  3. Cliquez sur Applications dans la colonne latérale de gauche, puis cliquez sur Ajouter une application.
  4. Sélectionnez le dépôt et la branche à partir desquels vous souhaitez déployer.
  5. Attribuez un nom unique à votre application et choisissez un centre de données.
  6. Configurez ensuite votre environnement de construction. Sélectionnez la configuration Standard build machine avec l’option Nixpacks recommandée.
  7. Utilisez toutes les configurations par défaut, puis cliquez sur Créer une application.

Le déploiement prend généralement quelques minutes et, en cas de succès, vous recevrez un lien vers votre application ainsi qu’un tableau de bord contenant des informations sur le déploiement.

Kinsta fournit une infrastructure robuste et fiable pour vos applications. Le déploiement de votre application Bun directement sur la plateforme de Kinsta se fait sans problème grâce à son interface conviviale – aucune intégration spécifique n’est nécessaire. Il vous suffit de téléverser votre code, de configurer vos paramètres et votre application est prête à être mise en ligne.

Résumé

En tant que moteur d’exécution JavaScript, Bun a pris de l’importance pour plusieurs raisons. Conçu dans un souci de performance et de simplicité, il vise à rationaliser le processus de développement et à améliorer l’efficacité globale. Son architecture modulaire vous permet de choisir uniquement les composants dont vous avez besoin pour des projets spécifiques, réduisant ainsi les frais généraux inutiles.

Contrairement à Node.js, Bun a une empreinte plus légère et des temps de démarrage plus rapides. Cet atout est essentiel pour les applications exigeant des temps de réponse rapides et une utilisation efficace des ressources. La simplicité de Bun et son approche modulaire contribuent à une expérience de développement plus directe et personnalisable.

L’hébergement de vos applications Bun avec le service d’hébergement d’applications de Kinsta offre une solution transparente et puissante. L’infrastructure robuste de Kinsta garantit des performances élevées, avec des fonctionnalités telles que la mise à l’échelle automatique et la livraison de contenu à chargement rapide.

En choisissant Kinsta, l’hébergement de vos applications Bun devient une expérience fiable et efficace, vous donnant la liberté de vous concentrer sur la construction et l’optimisation de vos projets.

Que pensez-vous de Bun ? Pensez-vous que vous devriez basculer toutes vos applications Node.js vers Bun ? Faites-nous part de vos réflexions dans la section des commentaires.

Joel Olawanle Kinsta

Joel is a Frontend developer working at Kinsta as a Technical Editor. He is a passionate teacher with love for open source and has written over 200 technical articles majorly around JavaScript and it's frameworks.