Hoe je Node.js Snel en Gemakkelijk Maakt Zonder Over te Schakelen naar Bun
Bun en Deno-engines hebben de vertrouwde JS-ontwikkelervaring opnieuw uitgevonden. Native TypeScript-ondersteuning, direct testen opstarten en een reactieve pakketbeheerder hebben een nieuwe kwaliteitsstandaard gezet. Maar niet iedereen is klaar om hun daadwerkelijke productie naar een nieuwe runtime te migreren. Specifieke C++-addons, nuances in modulegedrag en opgehoopt legacy houden de meeste projecten bij klassiek Node.js.
Het Nub-projectteam koos een andere aanpak. In plaats van nog een geïsoleerde runtime te maken, schreven ze een utility in Rust die standaard Node een boost geeft.
Wat is het idee
Ontwikkelaars laden hun projecten vaak vol met een dozijn utilities: 4 of 5 voor het uitvoeren van TypeScript, 6 of 7 voor Node.js-versiebeheer, 8 voor pakketten en 9 voor omgevingsvariabelen. Als gevolg daarvan kost het opstarten van elk script honderden milliseconden vertraging voordat je code überhaupt begint met uitvoeren.
Nub combineert al deze functies in één enkele Rust-binary. Het tool fungeert als een transparante laag tussen de ontwikkelaar en Node.js. V8 en standaardmodules blijven ongewijzigd aan de binnenkant, maar alle omliggende tooling werkt met gecompileerde code-prestaties.
0TypeScript uitvoeren en automatische versieselectie
Het 10 commando voert 11, 12, 13, 14, 15 en andere formaten uit zonder enige build tool-configuratie.
Onder de motorkap gebruikt het de snelle Oxc Rust-parser. Voor transpilatie en correcte padresolutie (inclusief 16 en imports zonder extensies) maakt Nub gebruik van moderne Node.js-extensiepunten: 17 preload en het 18 mechanisme.
Een interessant aspect heeft betrekking op versiebeheer. Bij het opstarten van een bestand controleert Nub op 19 bestanden, 20, of het 21 gedeelte in 22. Als de vereiste Node-versie niet lokaal beschikbaar is, downloadt de utility deze naar de cache en voert de code uit via die versie.
1Nub verwijdert ook automatisch experimentele flags voor nieuwere Node.js-functies. Werken met 23, 24 of 25 werkt onmiddellijk zonder CLI-flags te hoeven opgeven.
Scripts versnellen en binaries starten
Elke keer dat 26 of 27 wordt aangeroepen, start een volledig Node.js-proces alleen om 28 te lezen en het juiste shell-script aan te roepen. Wachten op initialisatie van de JS-omgeving creëert een merkbare bottleneck.
Omdat 29 in Rust is geschreven, is er geen JavaScript-initialisatiefase. Scripts worden onmiddellijk opgepakt.
In de benchmarks van de ontwikkelaars kost hot launching van een script via 30 ongeveer 14 milliseconden. Ter vergelijking: 31 heeft dit op ongeveer 330 milliseconden en 32 overschrijdt 440 milliseconden.
Het 33 utility werkt op dezelfde manier en vervangt 34 en 35. Bij het aanroepen van een binary vanuit 36 wordt er geen extra tussenliggend Node.js-proces gecreëerd, waardoor het ongeveer 19 keer sneller is dan 37.
2Als een pakket niet lokaal beschikbaar is, downloadt 38 het van de registry, voert het uit en verwijdert de tijdelijk aangemaakte bestanden.
Pakketbeheerder en Corepack-ondersteuning
Het 39 commando verwerkt het ophalen van afhankelijkheden. Het is gebouwd op de Aube-engine, die in compatibiliteitsmodus kan werken met bestaande lock-bestanden.
Als je een project binnenkomt met 40, respecteert Nub de pnpm-instellingen, leest 41 en bouwt de afhankelijkheidsgraaf zonder conflicten. Hetzelfde geldt voor projecten met 42 of 43.
Verschillende beveiligingsfuncties bij het installeren van pakketten:
- Automatisch blokkeren van 44 scripts standaard.
- Pakketversiecontrole tegen de osv. dev kwetsbaarheidsdatabase tijdens graafresolutie.
- Minimale release-leeftijdsbeperking van 24 uur om te beschermen tegen supply chain-aanvallen.
Voor het werken met meerdere pakketbeheerders is het 45 commando beschikbaar. Het maakt globale shims voor 46, 47 en 48. Dit is een nuttige vervanging voor Corepack, dat vanaf versie 25 uit Node.js is verwijderd.
Praktisch gebruik
Het tool vereist geen wijziging van je projectstructuur of het opgeven van je bestaande infrastructuur. Je kunt het globaal installeren en alleen gebruiken voor snel debuggen of het uitvoeren van lokale CLI-utilities.
3In GitHub Actions-pipelines wordt de standaard 49 vervangen door 50. Dit biedt een consistente interface en versnelt de uitvoering van build-stappen via snelle caching en afhankelijkheidsinstallatie.
De conclusie
Nub blijkt een solide compromis te zijn voor teams die het gemak van Bun waarderen maar technische beperkingen ondervinden die hen verhinderen Node.js te verlaten. De utility consolideert een verspreide collectie CLI-tools, versnelt alledaagse commando's en dwingt je niet om één regel code te herschrijven.
Het project is vrij nieuw maar heeft al ongeveer 3,8k sterren verzameld op GitHub. Het is de moeite waard om uit te proberen, in ieder geval voor directe 51 uitvoering en handig automatisch downloaden van de vereiste Node.js-versies.
Gerelateerde projecten