Compiler sa web app pour une livraison parfaite
Pas envie déployer des centaines de méga de dépendances ? Un build Astro, next ou autre embarque bien plus de node_modules que nécessaire.
Voici quelques techniques pour être fier de son livrable. Et si tu ne veux pas te prendre la tête, jette un œil à la dernière section ;)
Tout regrouper avec esbuild
npm exec esbuild -- \
dist/server/entry.mjs \
--bundle \
--outfile=dist/server/entry.cjs \
--external:sharp \
--platform=node \
--format=cjs \
--sourcemap=inline \
--define:import.meta.url=$(node -e "process.stdout.write(JSON.stringify(import.meta.resolve('./dist/server/entry.cjs')))")Gros avantage : plus besoin de se prendre la tête avec les dépendances de dev ou non, transitives ou non, du type de package manager… On laisse esbuild regrouper uniquement le nécessaire !
Ensuite, chacun sa stratégie mais grosso modo on supprime node_modules avant de passer à la suite.
Utiliser deno compile sur son application nodejs
En principe, deno n’a pas besoin de l’étape précédente. Une application développée entièrement sous deno compilera très bien sans bidouille.
Toutefois deno compile peut aussi nous rendre service dans un environnement node.
Runtime deno en production
- Augmente la sécurité en permettant la gestion des permissions
- Facilite grandement le reporting télémétrique avec OTEL
- Favorise la vitesse d’exécution par rapport à node
Un simple exécutable
- Un déploiement plus simple
- Moins de versions au runtime à gérer
- Optimisé pour limiter l’IO et les risques de corruption
Les intégrations de deno compile font le café ☕
En fait, deno peut compiler automatiquement je cite :
- Next.js
- Astro
- Fresh (1.x and 2.x)
- Remix
- React Router
- SvelteKit
- Nuxt
- SolidStart
- TanStack Start
- Vite (SSR, plus SPA/MPA projects served as static output)
Pour cela il suffit donc de cibler le dossier du projet comme point d’entrée et… c’est tout.
deno compile .Pas de deno.json, juste un projet node existant et deno fait le nécessaire pour gérer les dépendances et lancer les étapes intermédiaires.
Les sections précédentes peuvent quand même être utiles pour gagner en contrôle. Par exemple, Astro n’optimise (vraiment) pas ses dépendances de production. Deno par souci de compatibilité embarque tout node_modules. Les perfectionnistes voudront donc passer un coup d’esbuild là dessus avant de retirer ces infâmes modules…
deno compile --bundle --minify main.tsJe recommanderais tout de même de bien comprendre les mécanismes sous-jacents avant de s’y frotter. Et d’être prêt à utiliser une API expérimentale :)