>_ DevTrendsfr

Langue

Accueil

Langages

Sections

Frontend Backend Mobile DevOps AI / ML GameDev Blockchain Embarqué Sécurité
Rust

Comment rendre Node.js rapide et pratique sans passer à Bun

Les moteurs Bun et Deno ont réinventé l'expérience familière du développement JS. Le support natif de TypeScript, le lancement instantané de tests et un gestionnaire de paquets réactif ont établi un nouveau standard de qualité. Cependant, tout le monde n'est pas prêt à migrer sa production actuelle vers un nouveau runtime. Des addons C++ spécifiques, les nuances du comportement des modules et l'héritage accumulé maintiennent la plupart des projets sur Node.js classique.

L'équipe du projet Nub a décidé d'adopter une approche différente. Au lieu de créer un autre runtime isolé, ils ont écrit un utilitaire en Rust qui booste Node standard.

L'idée derrière tout ça

Les développeurs surchargent souvent leurs projets avec une douzaine d'utilitaires : 4 ou 5 pour exécuter TypeScript, 6 ou 7 pour la gestion de versions Node.js, 8 pour les paquets et 9 pour les variables d'environnement. Il en résulte des centaines de millisecondes de délai à chaque exécution de script, avant même que le code ne commence à s'exécuter.

Nub combine toutes ces fonctions dans un seul binaire Rust. L'outil sert de couche transparente entre le développeur et Node.js. V8 et les modules standard restent inchangés à l'intérieur, mais tous les outils environnants fonctionnent à la performance du code compilé.

0

Exécuter TypeScript et sélection automatique de version

La commande 10 exécute 11, 12, 13, 14, 15 et d'autres formats sans aucune configuration d'outil de build.

En coulisses, il utilise l'analyseur Rust rapide Oxc. Pour la transpilation et la résolution correcte des chemins (y compris 16 et les imports sans extensions), Nub exploite les points d'extension modernes de Node.js : le preload 17 et le mécanisme 18.

Un aspect intéressant concerne la gestion des versions. Lors du lancement d'un fichier, Nub vérifie les fichiers 19, 20 ou la section 21 dans 22. Si la version Node requise n'est pas disponible localement, l'utilitaire la télécharge dans le cache et exécute le code à travers celle-ci.

1

Nub supprime également automatiquement les drapeaux expérimentaux pour les nouvelles fonctionnalités de Node.js. Travailler avec 23, 24 ou 25 fonctionne immédiatement sans avoir besoin de spécifier des drapeaux CLI.

Accélérer les scripts et lancer des binaires

Chaque fois que 26 ou 27 est appelé, un processus Node.js complet démarre juste pour lire 28 et invoquer le script shell approprié. Attendre l'initialisation de l'environnement JS crée un goulot d'étranglement notable.

Puisque 29 est écrit en Rust, il n'y a pas de phase d'initialisation JavaScript. Les scripts sont récupérés instantanément.

Dans les benchmarks des développeurs, le lancement à chaud d'un script via 30 prend environ 14 millisecondes. À titre de comparaison, 31 a ceci à environ 330 millisecondes, et 32 dépasse 440 millisecondes.

L'utilitaire 33 fonctionne de manière similaire, remplaçant 34 et 35. Lors de l'appel d'un binaire depuis 36, il ne crée pas de processus Node.js intermédiaire supplémentaire, le rendant environ 19 fois plus rapide que 37.

2

Si un paquet n'est pas disponible localement, 38 le télécharge depuis le registre, l'exécute et supprime les fichiers temporairement créés.

Gestionnaire de paquets et support de Corepack

La commande 39 gère la récupération des dépendances. Elle est construite sur le moteur Aube, qui peut fonctionner en mode compatibilité avec les fichiers lock existants.

Si vous entrez dans un projet avec 40, Nub respecte les paramètres pnpm, lit 41 et construit le graphe de dépendances sans conflits. Il en va de même pour les projets avec 42 ou 43.

Plusieurs fonctionnalités de sécurité lors de l'installation des paquets :

  1. Blocage automatique des scripts 44 par défaut.
  2. Vérification de la version du paquet contre la base de données de vulnérabilités osv.dev lors de la résolution du graphe.
  3. Restriction d'âge minimum de publication de 24 heures pour se protéger contre les attaques de la chaîne d'approvisionnement.

Pour travailler avec plusieurs versions du gestionnaire de paquets, la commande 45 est disponible. Elle crée des shims globaux pour 46, 47 et 48. C'est un remplacement utile pour Corepack, qui a été supprimé de Node.js à partir de la version 25.

Utilisation pratique

L'outil ne nécessite pas de modifier la structure de votre projet ni d'abandonner votre infrastructure existante. Vous pouvez l'installer globalement et l'utiliser uniquement pour le débogage rapide ou l'exécution d'utilitaires CLI locaux.

3

Dans les pipelines GitHub Actions, le 49 standard est remplacé par 50. Cela fournit une interface cohérente et accélère l'exécution des étapes de build grâce à la mise en cache rapide et à l'installation des dépendances.

En conclusion

Nub s'avère être un compromis solide pour les équipes qui apprécient la commodité de Bun mais font face à des contraintes techniques les empêchant de quitter Node.js. L'utilitaire consolide une collection dispersée d'outils CLI, accélère les commandes quotidiennes et ne vous force pas à réécrire une seule ligne de code.

Le projet est assez récent mais a déjà accumulé environ 3,8k étoiles sur GitHub. Cela vaut la peine de l'essayer au moins pour l'exécution instantanée de 51 et le téléchargement automatique pratique des versions Node.js requises.

Projets similaires