Un NOUVEAU gestionnaire de paquets !? (Une alternative à Bun)

BBetter Stack
컴퓨터/소프트웨어AI/미래기술

Transcript

00:00:00Voici Nub, une boîte à outils JavaScript tout-en-un qui fonctionne sur Node au lieu de le remplacer.
00:00:04Il remplace tous ces outils que vous utilisez actuellement, du gestionnaire de paquets qui
00:00:08est cinq fois plus rapide que pnpm, au moteur d'exécution TypeScript capable de remplacer TSX,
00:00:13et même un gestionnaire de versions Node. Il offre les meilleures fonctionnalités de Bun, mais au-dessus d'un Node.js standard,
00:00:17et c'est probablement pour ça que Nub n'est autre que « Bun » écrit à l'envers.
00:00:21Et je sais que les dévs JS adorent tout réinventer, mais ce n'est pas juste le projet de n'importe qui.
00:00:25Il a été créé par Colin, le créateur de Zod, qui a aussi conçu la preuve de concept
00:00:29de tRPC et a même travaillé chez Bun. Alors plongeons directement dedans pour voir ça de plus près.
00:00:38Nub est un binaire Rust unique compatible Mac, Windows et Linux. Comme montré en intro,
00:00:44ce ne sont là que quelques-uns des outils qu'il peut remplacer. C'est un exécuteur de fichiers, de scripts,
00:00:47de paquets, un gestionnaire de paquets et un gestionnaire de versions Node. Passons-les en revue.
00:00:52Tout d'abord, l'exécuteur de fichiers, et il regorge à lui seul de fonctionnalités. Il prend en charge
00:00:56TypeScript complet, pas seulement le nettoyage de types comme Node, et peut donc remplacer TSX ou ts-node.
00:01:02On voit ici que j'ai un fichier TypeScript contenant des enums, des namespaces ainsi que des propriétés
00:01:06de paramètre, ce que Node ne peut pas exécuter nativement. Si je lance simplement Nub suivi du
00:01:11fichier à exécuter, vous voyez qu'il s'exécute parfaitement, là où Node échouerait.
00:01:15Si je remplace Nub par Node ici, on obtient une erreur de syntaxe TypeScript non supportée,
00:01:20car il n'accepte ni le namespace ni l'enum. L'exécuteur de fichiers remplace aussi dotenv
00:01:24en observant automatiquement les variables d'environnement. Il gère les fichiers .env, .env.local,
00:01:29ceux de l'environnement Node, et gère même l'expansion automatique. Juste ici, on a une
00:01:33variable composée d'autres variables d'environnement. On a ici l'utilisateur et
00:01:37l'hôte de la base de données. Si je lance ce fichier avec Nub, il importe ces variables
00:01:41pour moi et a reconstitué l'URL de vérification de santé à partir des autres valeurs.
00:01:46Vous remarquez aussi que ma clé API ne correspond pas à celle du fichier .env.
00:01:50C'est parce que .env.local est toujours prioritaire, et j'y ai défini la clé API
00:01:54sur « subscribe to better stack ». C'est ce que vous devriez faire pour rester
00:01:58à jour sur l'IA et le dev. Abonnez-vous, ça aide énormément. Ensuite, je vais lancer
00:02:02« nub src/index.tsx », et on constate que tout fonctionne. C'est
00:02:07ma démo complète de Nub. Dans ce code, j'utilise plein de fonctionnalités offertes par Nub.
00:02:12L'une des premières est l'importation de fichiers JSON, YAML,
00:02:15HTML et texte brut. Il remplace aussi un outil comme tsconfig-paths. Les alias configurés
00:02:20ici avec « @config » dans mon tsconfig vont être correctement résolus
00:02:24par Node. Il gère aussi les décorateurs comme « service » et « sealed ». Il prend en charge
00:02:29JSX et va le transpiler selon vos paramètres tsconfig. Vous pouvez même utiliser
00:02:34des mots-clés récents comme « using » pour la gestion explicite des ressources. En plus de tout cela,
00:02:38il intègre des tonnes d'API modernes comme Web Workers ou Temporal. Il ajoute les polyfills
00:02:43automatiquement sur les versions de Node qui ne les gèrent pas et active les fonctionnalités
00:02:48expérimentales de Node comme le support de localStorage. Ce n'est qu'un aperçu de tout ce que
00:02:52propose cet exécuteur, mais je précise aussi qu'il est 100 % compatible avec les options
00:02:56de Node. Comme il lance Node au final, il se contente de lui transmettre ces options. Si votre
00:03:01script n'utilise aucune fonction non supportée par Node, vous pouvez remplacer Nub par Node
00:03:06et obtenir exactement le même résultat. Tout cela se fait sans quasi aucun impact sur la vitesse.
00:03:10Il se veut aussi proche de Node que possible. Selon leur documentation, l'exécution
00:03:14d'un fichier prend le même temps qu'avec Node. Ce ne sera pas plus rapide que Bun,
00:03:19car Bun est un runtime natif qui remplace Node, tandis que Nub s'appuie sur Node. J'ai fait
00:03:24mon propre benchmark sur mon Mac pour vérifier le plus rapide. En rendant ça un peu
00:03:28plus lisible, on voit que Node a été le plus rapide chez moi. La vitesse n'était pas identique
00:03:31à celle de Nub. Nub était légèrement derrière, mais TSX était plus lent que les deux. Passons
00:03:36à la deuxième fonctionnalité : le gestionnaire de versions Node. Fini le besoin d'NVM ou
00:03:41d'FNM. Si mon projet contient un fichier « .node-version », ou si elle est définie dans .nvmrc ou
00:03:46package.json, Nub va télécharger et installer automatiquement la version requise depuis Node.js.
00:03:52Pour l'instant, ce projet utilise la dernière version Node 26. Si je modifie le fichier pour indiquer
00:03:56la version 24 et relance Nub, il récupérera cette version automatiquement. On retrouve toutes les
00:04:02commandes habituelles : installation de versions, liste des versions installées,
00:04:06désinstallation, et même le verrouillage de version qui écrit le fichier d'environnement.
00:04:10C'est d'une simplicité enfantine. Abordons maintenant les trois fonctionnalités suivantes,
00:04:15où Nub vient remplacer pnpm et Bun. Troisième fonctionnalité : le gestionnaire
00:04:20de paquets. Il promet d'être cinq fois plus rapide que pnpm, que je trouvais déjà
00:04:25extrêmement rapide. La commande « nub install » installe les paquets. Point très appréciable :
00:04:31il sait reprendre vos fichiers de verrouillage existants. Si vous utilisiez Bun ou pnpm,
00:04:36Nub mettra simplement à jour ces fichiers au lieu d'en créer un propre. Cela facilite grandement
00:04:41la transition si besoin. Il en va de même pour la compatibilité avec pnpm. Chaque commande
00:04:46est identique à celle de pnpm, y compris les fonctions avancées comme les catalogues
00:04:51de monorepo. Ce sont les mêmes options, donc l'échange est transparent. Si vous
00:04:57utilisez npm, Bun ou Yarn, leurs options de configuration seront également détectées.
00:05:02Concernant la vitesse annoncée, les tests placent Nub en tête pour les installations
00:05:06en cache, avec 346 millisecondes pour 1168 paquets. Sur ma propre machine, j'ai testé
00:05:1314 dépendances directes représentant 212 paquets au total. Le résultat confirme que Nub
00:05:19est le plus rapide. Il a tout installé en 136 ms, Bun arrive second avec 239 ms,
00:05:25tandis que pnpm et npm dépassent la seconde. L'écart de vitesse se confirme donc,
00:05:30avec des performances impressionnantes. Ce gestionnaire reprend aussi le meilleur de pnpm
00:05:35côté sécurité : ancienneté minimale de publication fixée à 24 heures par défaut et blocage
00:05:40des scripts de build sans validation. Vous êtes ainsi protégé de la plupart des attaques. L'autre atout
00:05:45d'un gestionnaire de paquets est l'exécuteur de paquets (quatrième fonctionnalité).
00:05:49L'argument choc : il est 19 fois plus rapide qu'npx. La commande « nubx » pointe vers
00:05:54le dossier binaire de node_modules. Écrite en Rust, elle exécute les binaires sans lancer
00:05:59de processus Node intermédiaire. Elle fonctionne donc avec n'importe quel gestionnaire
00:06:03puisqu'elle cible directement node_modules. Comme souvent avec Nub, les options
00:06:07sont 100 % identiques à « pnpm exec », y compris pour les commandes dlx. En benchmark,
00:06:12Nub se montre le plus rapide avec 169 ms pour exécuter esbuild, contre 423 ms pour pnpm.
00:06:20La promesse de vitesse se vérifie encore. Enfin, le lanceur de scripts est annoncé
00:06:2424 fois plus rapide que « pnpm run ». Il intègre le suivi du cycle de vie, les variables
00:06:29d'environnement npm et la transmission d'arguments. npm et pnpm lancent des programmes Node
00:06:34en rechargeant le JavaScript du gestionnaire à chaque fois, alors que Nub utilise son binaire
00:06:38Rust sans aucun temps d'initialisation. Mes benchmarks confirment la supériorité
00:06:43de « nub run », même si l'écart est moindre que dans la documentation. À noter aussi —
00:06:47et c'est la quatrième fois que je le répète —, cette commande reste 100 % compatible
00:06:51avec pnpm et prend en charge ses fonctions monorepo. Un point mérite d'être souligné
00:06:56concernant ces trois dernières fonctionnalités : Nub n'a pas réinventé la roue. Il utilise
00:07:00obe sous le capot, un gestionnaire écrit par JDX, également créateur de
00:07:04mise. Il a conçu son outil pour être intégrable dans d'autres bibliothèques,
00:07:08et Colin a collaboré avec lui pour l'intégrer dans Nub. Il ne s'agit donc pas d'un simple copié-collé.
00:07:13Voilà pour les points clés, mais il reste beaucoup à découvrir, comme la GitHub Action prêt à l'emploi
00:07:17qui vient remplacer l'action officielle setup-node. Tout est pensé pour vous simplifier la vie
00:07:21autour de Node. Mais une question se pose : est-ce que je l'utiliserais
00:07:26au quotidien ? La réponse est oui, dans certains cas. Pour être honnête, je suis un gros utilisateur
00:07:31de Bun et je n'ai rencontré aucun problème de compatibilité. Peut-être qu'avec le passage
00:07:35à Rust je changerai d'avis, mais même là, j'utiliserais pnpm pour le reste. Et je dois
00:07:40avouer que pnpm ne m'a jamais paru trop lent. J'utilise aussi mise pour gérer mes versions
00:07:44de Node, donc je n'ai pas besoin de cette partie-là. En revanche, l'exécuteur de fichiers
00:07:48qui remplace TSX m'intéresse vraiment. Mon cas d'usage principal reste l'utilisation
00:07:52de machines virtuelles temporaires. J'en monte parfois rapidement pour faire des tests,
00:07:57et pour démarrer avec Node, Nub est l'une des solutions les plus complètes,
00:08:01rapides et simples à mettre en œuvre. Ce sont surtout mes habitudes qui m'empêchent
00:08:05d'adopter Nub au quotidien. Dites-moi en commentaire quel gestionnaire
00:08:08de paquets vous utilisez, et si vous envisagez de passer à Nub maintenant qu'il est réécrit
00:08:12en Rust. Laissez un mot dans les commentaires, pensez à vous abonner,
00:08:16et comme toujours, à la prochaine !

Key Takeaway

Nub rassemble l'ensemble de l'écosystème d'outils Node.js en un seul binaire Rust pour offrir des exécutions, des installations de paquets et une gestion de versions nettement plus rapides sans rompre la compatibilité native de Node.js.

Highlights

  • Nub est un outil écrit en Rust qui s'exécute directement au-dessus de Node.js plutôt que d'essayer de le remplacer.

  • L'installateur de paquets de Nub installe 212 paquets en 136 ms, surpassant Bun à 239 ms et pnpm ou npm qui dépassent une seconde.

  • L'exécuteur de paquets nubx offre un gain de vitesse de 19 fois par rapport à npx en ciblant directement le dossier node_modules sans lancer de processus Node intermédiaire.

  • Le gestionnaire intègre par défaut un délai minimal de publication de 24 heures pour les paquets afin de bloquer les attaques sur la chaîne d'approvisionnement.

  • Nub assure une rétrocompatibilité complète avec les fichiers de verrouillage et les configurations existantes de pnpm, Bun, npm et Yarn.

Timeline

Présentation de la boîte à outils Nub

  • Nub regroupe un exécuteur de fichiers, un gestionnaire de versions Node, un gestionnaire de paquets et un exécuteur de scripts.
  • Le projet s'appuie sur le runtime Node.js standard au lieu de créer un environnement d'exécution totalement distinct.
  • Le créateur de Zod et de la preuve de concept tRPC, Colin, a conçu cet outil.

Nub propose une alternative à Bun en conservant le runtime Node.js officiel. Son nom est littéralement « Bun » écrit à l'envers. Le projet est distribué sous la forme d'un binaire unique écrit en Rust, disponible sur macOS, Windows et Linux.

Fonctionnalités avancées de l'exécuteur de fichiers

  • L'exécuteur prend en charge les fonctionnalités TypeScript complexes comme les enums, namespaces et propriétés de paramètres.
  • La gestion des variables d'environnement inclut le chargement hiérarchique des fichiers .env et .env.local avec l'expansion automatique des variables.
  • La résolution des alias du tsconfig et la transpilation JSX fonctionnent sans configuration supplémentaire.

Node.js échoue sur certaines syntaxes TypeScript avancées, tandis que Nub transpile et exécute ces structures directement sans nécessiter TSX ou ts-node. L'outil intègre automatiquement les polyfills pour les API récentes comme Temporal ou Web Workers, tout en transmettant directement les options d'exécution au binaire Node.js. Les benchmarks montrent des performances d'exécution de fichiers légèrement supérieures à TSX sur un environnement Mac.

Gestion automatique des versions de Node.js

  • Nub lit les fichiers .node-version, .nvmrc ou package.json pour basculer automatiquement de version Node.
  • L'installation et l'isolation des versions Node s'effectuent de façon transparente à la volée.
  • Les commandes de gestion courantes permettent d'installer, lister ou verrouiller les versions du runtime.

Cette fonctionnalité élimine le besoin de gestionnaires externes comme NVM ou FNM. Lors d'un changement de version déclarée dans la configuration d'un projet, l'exécuteur télécharge et active la version cible de Node.js avant de lancer le script.

Performance du gestionnaire de paquets et sécurité

  • L'installation de paquets avec Nub enregistre un temps de 136 ms sur un test de 212 paquets.
  • Le système met à jour les fichiers de verrouillage pnpm ou Bun existants sans forcer la création d'un nouveau format.
  • Une sécurité renforcée bloque l'exécution automatique des scripts de build et impose un délai de publication de 24 heures.

Nub s'avère plus rapide que Bun (239 ms) et pnpm (plus de 1000 ms) sur des installations locales avec cache. La compatibilité ascendante avec pnpm garantit une transition simple, y compris dans les architectures monorepo complexes. Les fonctions de sécurité empêchent le téléchargement immédiat de paquets publiés récemment afin d'éviter les attaques par injection de code malveillant.

Exécution rapide de paquets et de scripts

  • La commande nubx exécute les binaires de node_modules sans démarrer de processus Node intermédiaire.
  • Le lanceur de scripts nub run élimine le temps de démarrage lié au rechargement du code JavaScript des gestionnaires traditionnels.
  • L'architecture repose sur la bibliothèque Rust obe développée par l'auteur de l'outil mise.

L'exécuteur de paquets réalise une tâche d'exécution esbuild en 169 ms, contre 423 ms pour pnpm exec. Cette rapidité s'explique par la réécriture intégrale des commandes en Rust, ce qui supprime l'initialisation répétée de scripts JavaScript lors des appels. L'outil s'avère particulièrement utile pour la configuration rapide et minimale d'environnements de dev ou de machines virtuelles.

Community Posts

View all posts