À proposExpertiseProjetsParcoursBlogContact
Discuter
À proposExpertiseProjetsParcoursBlogContactDiscuter

Yao David Logan

Software Engineer fullstack spécialisé en SaaS, automatisation métier et plateformes web/mobile scalables.

NavigationExpertiseProjetsParcoursBlogContact
LiensGitHubLinkedInEmail
© 2026 Yao David Logan. Tous droits réservés.
DX 2026 — choisir son socle Node.js + TypeScript sans se piéger
Retour au blog

Tech

Xin@

DX 2026 — choisir son socle Node.js + TypeScript sans se piéger

YDLYao David Logan7 min de lecture23 mai 2026

CatégorieTech

Lecture7 min de lecture

Publié23 mai 2026

Vues29

Partages0

Commentaires0

Sommaire
  1. 011. Pourquoi la DX compte autant
  2. 022. Le runtime — Node, Deno ou Bun ?
  3. 033. Le bundler — esbuild ou Vite ?
  4. 044. Le typage — TypeScript strict, sans compromis
  5. 055. La validation runtime — Zod ou Valibot
  6. 066. Le linter — ESLint flat config + TypeScript ESLint
  7. 077. Le formatter — Prettier ou Biome ?
  8. 088. Les tests — Vitest, Bun test ou node:test
  9. 099. Le package manager — pnpm
  10. 1010. Le monorepo — Turborepo ou Nx ?
  11. 1111. La CI — GitHub Actions par défaut
  12. 1212. La stack qui marche par défaut
  13. 1313. Pièges à éviter
  14. 1414. Conclusion

Node 22 LTS, pnpm, Vite, Vitest, ESLint flat, Zod, Turborepo : la stack que j'utilise par défaut en 2026 et pourquoi ennuyeuse vaut mieux que révolutionnaire.

Choisir son socle Node.js + TypeScript en 2026, c'est moins une question de mode qu'une question de DX cumulée sur 2 ans. Voici la stack que j'utilise par défaut et pourquoi.

1. Pourquoi la DX compte autant

La DX (Developer Experience) n'est pas un confort, c'est un investissement. Une stack qui vous fait perdre 15 minutes par jour à attendre des builds ou décoder des erreurs absconses, c'est 60 heures par an et par développeur. Sur une équipe de 4, c'est l'équivalent d'un mi-temps perdu.

Cet article condense la stack que j'utilise en 2026 par défaut, avec les arbitrages qui m'ont mené là. Pas de "tu dois utiliser ça" — des critères pour décider.

2. Le runtime — Node, Deno ou Bun ?

Trois prétendants en 2026, contexte par contexte :

CritèreNode 22 LTSBun 1.xDeno 2.x
Maturité prod★★★★★★★★★★★★
Performance★★★★★★★★★★★★
Écosystème npm★★★★★★★★★★★★★
Outils intégrés★★★★★★★★★★★★
TypeScript natifAvec --experimentalOuiOui
Adoption hostingToutes plateformesLimitéeCroissante

Mon défaut : Node 22 LTS. Raisons :

  • Maturité absolue, support hosting universel
  • Compatibilité totale avec l'écosystème
  • Performance largement suffisante pour 95 % des cas

Bun : pour les workloads très perf-critiques (parseurs, transformateurs, tests massifs). Le démarrage 4x plus rapide change la donne en CI.

Deno : pour les projets edge / serverless courts. Le modèle de permissions et l'imports HTTPS natifs sont élégants, mais la friction de l'écosystème pèse.

3. Le bundler — esbuild ou Vite ?

Pour une app web : Vite, point. La DX est sans concurrence : démarrage en moins d'1 seconde, HMR instantané, support TypeScript et JSX natifs, écosystème de plugins riche.

Pour un service backend : esbuild, parce qu'on n'a pas besoin du serveur de dev de Vite. esbuild en mode watch rebundle en <200ms, parfait pour les tests rapides.

Pour publier un package npm : tsup (wrapper esbuild) ou tsdown. Génère dual ESM/CJS + types en une commande.

JSON
1{
2 "scripts": {
3 "build": "tsup src/index.ts --dts --format esm,cjs",
4 "dev": "tsup src/index.ts --watch --dts --format esm,cjs"
5 }
6}

4. Le typage — TypeScript strict, sans compromis

TypeScript en mode strict plus quelques flags supplémentaires :

JSON
1{
2 "compilerOptions": {
3 "strict": true,
4 "noUncheckedIndexedAccess": true,
5 "noImplicitOverride": true,
6 "noPropertyAccessFromIndexSignature": true,
7 "exactOptionalPropertyTypes": true,
8 "noFallthroughCasesInSwitch": true,
9 "forceConsistentCasingInFileNames": true,
10 "isolatedModules": true,
11 "verbatimModuleSyntax": true,
12 "target": "ES2022",
13 "module": "NodeNext",
14 "moduleResolution": "NodeNext"
15 }
16}
  • noUncheckedIndexedAccess : arr[0] devient T | undefined, forçant à gérer le cas vide
  • exactOptionalPropertyTypes : { a?: string } n'accepte plus undefined explicite, juste l'absence
  • isolatedModules + verbatimModuleSyntax : compatibilité parfaite avec esbuild/Vite

Ces flags coûtent du temps au début mais éliminent une classe entière de bugs. Sur Nexus, le passage à noUncheckedIndexedAccess a révélé 17 bugs latents en une journée de refactor.

5. La validation runtime — Zod ou Valibot

TypeScript valide à la compilation. Pour valider à l'exécution (input HTTP, message de queue, payload externe), un schema runtime est indispensable.

Zod : standard de facto, écosystème énorme, intégration avec tRPC, OpenAPI, etc.

Valibot : 7x plus léger, idéal pour les bundles client. API très proche de Zod.

TypeScript
1// src/validators/deposit.ts (Zod)
2import { z } from "zod";
3 
4export const depositSchema = z.object({
5 amount: z.number().int().positive().max(10_000_000),
6 currency: z.enum(["XOF", "USD", "EUR"]),
7 gateway: z.enum(["mtn_momo", "orange_money", "stripe"]),
8 reference: z.string().min(3).max(64),
9});
10 
11export type Deposit = z.infer<typeof depositSchema>;

Règle : toute donnée venant de l'extérieur passe par un schema runtime. Pas de as Deposit aveugle. Pas de "ça vient du frontend, c'est OK".

6. Le linter — ESLint flat config + TypeScript ESLint

ESLint v9 en flat config (eslint.config.js) est désormais standard.

JavaScript
1// eslint.config.js
2import tseslint from "typescript-eslint";
3import unicorn from "eslint-plugin-unicorn";
4 
5export default tseslint.config(
6 ...tseslint.configs.strictTypeChecked,
7 ...tseslint.configs.stylisticTypeChecked,
8 unicorn.configs.recommended,
9 {
10 languageOptions: {
11 parserOptions: {
12 projectService: true,
13 tsconfigRootDir: import.meta.dirname,
14 },
15 },
16 rules: {
17 "@typescript-eslint/no-unused-vars": ["error", { argsIgnorePattern: "^_" }],
18 "@typescript-eslint/consistent-type-imports": "error",
19 "no-console": ["warn", { allow: ["warn", "error"] }],
20 },
21 },
22);

strictTypeChecked ajoute des règles qui demandent l'analyse de types (lente mais précieuse) : no-floating-promises, no-misused-promises, require-await. Ces trois règles seules attrapent 80 % des bugs async typiques.

7. Le formatter — Prettier ou Biome ?

Prettier reste le standard mature. Son écosystème de plugins (Tailwind, etc.) est inégalé.

Biome est 10–30x plus rapide. Sur les gros monorepos, ça change la vie. Son linter (Biome inclut son propre linter) est encore en retrait vs ESLint mais comble rapidement.

Mon défaut 2026 : Biome pour les nouveaux projets, Prettier+ESLint pour les projets existants. La migration Biome demande du travail mais le gain de vitesse est tangible.

8. Les tests — Vitest, Bun test ou node:test

Vitest : compatible Jest, ESM natif, watch ultra-rapide, snapshot, mocking, coverage v8. C'est le couteau suisse moderne.

Bun test : intégré au runtime Bun, démarrage instantané. Excellent si on tourne déjà sur Bun.

node:test : module natif Node 20+, sans dépendance. Suffit pour des tests simples mais l'écosystème est mince.

TypeScript
1// src/services/payment/PaymentRouter.test.ts
2import { describe, it, expect, vi } from "vitest";
3import { PaymentRouter } from "./PaymentRouter";
4 
5describe("PaymentRouter", () => {
6 it("resolves the right gateway for a method", () => {
7 const router = new PaymentRouter();
8 const fakeGateway = { name: "mtn", supports: ["mobile_money_mtn"] };
9 router.register(fakeGateway as never);
10 expect(router.resolve("mobile_money_mtn")).toBe(fakeGateway);
11 });
12 
13 it("throws on unregistered method", () => {
14 const router = new PaymentRouter();
15 expect(() => router.resolve("card")).toThrow(/no gateway/i);
16 });
17});

9. Le package manager — pnpm

pnpm par défaut. Trois raisons :

  1. Disque : ~5x moins de node_modules (store partagé hardlinks)
  2. Strict : pas d'accès aux dépendances non déclarées (évite les imports fantômes)
  3. Vitesse : install 2–3x plus rapide qu'npm

npm reste OK pour les projets très petits ou pour un monorepo bien structuré avec npm workspaces. Yarn berry est techniquement excellent mais sa courbe d'apprentissage et son écosystème plus petit le rendent moins justifiable en 2026.

10. Le monorepo — Turborepo ou Nx ?

Pour un monorepo de 3 à 15 packages : Turborepo. Configuration simple, cache distant Vercel, parfaitement intégré à pnpm.

Pour un monorepo entreprise avec 30+ packages, contraintes architecturales fortes : Nx. Plus puissant, plus complexe, plus de courbe.

JSON
1// turbo.json
2{
3 "$schema": "https://turbo.build/schema.json",
4 "tasks": {
5 "build": {
6 "dependsOn": ["^build"],
7 "outputs": ["dist/**", ".next/**"]
8 },
9 "lint": { "dependsOn": ["^build"] },
10 "test": { "dependsOn": ["^build"] },
11 "dev": { "cache": false, "persistent": true }
12 }
13}

11. La CI — GitHub Actions par défaut

GitHub Actions est devenu le standard pratique en 2026. GitLab CI reste excellent si vous êtes déjà chez GitLab.

Pour un projet TypeScript/Node :

YAML
1# .github/workflows/ci.yml
2name: CI
3on: [push, pull_request]
4jobs:
5 ci:
6 runs-on: ubuntu-latest
7 steps:
8 - uses: actions/checkout@v4
9 - uses: pnpm/action-setup@v3
10 with: { version: 9 }
11 - uses: actions/setup-node@v4
12 with: { node-version: 22, cache: pnpm }
13 - run: pnpm install --frozen-lockfile
14 - run: pnpm typecheck
15 - run: pnpm lint
16 - run: pnpm test
17 - run: pnpm build

Cache pnpm bien fait : 2 minutes vs 6 sans cache sur un projet moyen.

12. La stack qui marche par défaut

Ma stack 2026 pour un nouveau projet Node/TS :

CatégorieChoix
RuntimeNode 22 LTS
Package managerpnpm
TypeScriptstrict + flags renforcés
Validation runtimeZod
LinterESLint flat + typescript-eslint strict
FormatterBiome (nouveau) ou Prettier (existant)
TestsVitest
Bundler app webVite
Bundler serviceesbuild + tsup pour packages
MonorepoTurborepo + pnpm workspaces
CIGitHub Actions

Cette stack est ennuyeuse, et c'est précisément l'intérêt. Aucun composant n'est révolutionnaire. Tous sont matures, documentés, recrutables. Le temps qu'on ne passe pas sur la stack est du temps qu'on passe sur le produit.

13. Pièges à éviter

PiègeSymptômeCorrection
Stack exotique pour brillerDX dégradée, recrutement difficileChoix par défaut sauf justification précise
TypeScript non-strictBugs runtime fréquentsstrict: true + flags renforcés
Pas de validation runtimeCrash sur input inattenduZod ou Valibot sur tous les inputs
Linter trop laxistePatterns douteux normaliséstypescript-eslint strict + règles async
Pas de cache CIBuilds lents qui démotiventpnpm cache + Turbo cache
Monorepo prématuréComplexité sans bénéficeMono-package jusqu'à 2-3 apps
Tests sans cibleCoverage symboliqueTests sur la logique métier, pas sur le framework

14. Conclusion

La meilleure stack 2026 n'est pas la plus nouvelle. C'est celle qui fait gagner le plus de minutes par jour sans demander d'effort cognitif.

Mes critères de choix dans l'ordre :

  1. Maturité et stabilité
  2. DX au quotidien (vitesse build, qualité erreurs, hot reload)
  3. Écosystème et recrutement
  4. Performance pure (souvent secondaire)

Une équipe de 4 développeurs avec la bonne stack livre 30 à 50 % plus vite qu'avec une stack mal choisie. Le calcul est rarement explicité mais il est massif.

Si vous démarrez aujourd'hui, prenez la stack par défaut. Personnalisez seulement quand un besoin précis et chiffré le justifie. Le reste est cosmétique.

Commentaires

Réactions des lecteurs

Aucun commentaire pour l'instant

Aucun spam — l'email sert uniquement à vérifier votre identité.

·

Soyez le premier à réagir à cet article.

SuivantObservabilité d'une plateforme fintech — logs, métriques, traces et auditTech · 9 min de lecture→
Prochain échange

Transformer cette lecture en décision produit.

Si ce sujet ressemble à un problème réel dans votre produit, je peux intervenir sur le diagnostic, l'architecture, le backend, l'interface et les automatisations qui rendent une plateforme exploitable.

Format
CDI, freelance, mission longue
Focus
SaaS, API, back-office, automatisation
Discuter du sujetTélécharger le CV

Newsletter

Recevoir les prochaines notes techniques.

Une sélection courte sur SaaS, architecture backend, automatisation métier et qualité produit. Pas de bruit, seulement des idées applicables.