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 !