Taille du bundle et formats de module
Le SDK propose à la fois une version CommonJS et une version ESM, et garde ses deux lourdes dépendances — Zod et socket.io-client — en dehors du graphe d'importation jusqu'à ce qu'elles soient réellement utilisées. Un projet qui appelle une seule méthode, désactive la validation et n'ouvre jamais de socket charge 43 kB minifié (9,7 kB gzip), contre 536 kB (110 kB gzip).
Ce qui est inclus dans le package
| Champ | Valeur | Utilisé par |
|---|---|---|
main | dist/index.js | Node et tout consommateur CommonJS |
module | esm/index.js | Bundlers (webpack, Vite, Rollup, esbuild) |
types | dist/index.d.ts | TypeScript |
sideEffects | false | Bundlers, pour supprimer les modules inutilisés |
Il n'y a pas de carte "exports", donc chaque importation profonde existante — oneentry/dist/<module>/<module>Interfaces et le reste — se résout exactement comme avant. Node continue de résoudre la version CommonJS via main ; rien dans votre configuration actuelle n'a besoin de changer.
sideEffects: false indique au bundler qu'importer un module du SDK ne fait jamais rien par lui-même, ce qui rend le tree-shaking possible : les modules que vous ne touchez pas sont supprimés de la sortie.
Zod ne se charge que lorsque la validation s'exécute
Validation de réponse est désactivée par défaut. Les schémas de réponse étaient auparavant importés statiquement par chaque module, ce qui entraînait l'inclusion de Zod dans chaque bundle même lorsque rien n'était jamais validé. Les schémas et les helpers de validation sont maintenant chargés à la demande, la première fois qu'une réponse doit réellement être validée.
- Avec
validation.enabled: false(la valeur par défaut), Zod et les schémas par module (341 kB) se retrouvent dans des chunks qui ne sont jamais demandés. - Avec
validation.enabled: true, le comportement reste inchangé — les schémas sont simplement récupérés la première fois qu'ils sont nécessaires. - Dans Node,
require('oneentry')ne charge plus Zod au démarrage.
Pour un projet qui appelle une seule méthode avec la validation désactivée, le code qui se charge réellement passe de 536 kB à 83 kB minifié (110 kB → 22 kB gzip) — et descend à 43 kB une fois que socket.io est également exclu (voir ci-dessous).
ℹ️ Ce chiffre suppose qu'un bundler effectue le code splitting — la valeur par défaut dans webpack, Vite et Rollup. Un bundle forcé dans un seul fichier se réduit toujours, mais seulement à ~427 kB, car Zod est alors intégré même s'il ne s'exécute jamais.
Aucune API publique n'a changé. L'assistant interne _validateResponse est devenu async, ce qui n'est pertinent que si vous avez étendu vous-même les classes de base du SDK.
socket.io ne se charge que lorsque vous ouvrez un socket
WS.connect() conserve sa signature synchronisée et retourne toujours un Socket de socket.io, mais socket.io-client (~41 kB) est maintenant importé la première fois que connect() est appelé.
Jusqu'à ce que le chunk soit résolu, l'objet retourné met en file d'attente tout ce que vous faites avec — on, emit, disconnect — et le rejoue sur le vrai socket dans le même tick où le socket est créé, avant que la connexion puisse livrer quoi que ce soit, donc aucun événement n'est perdu :
// Nothing changes in normal use — handlers registered here always fire.
const socket = WS.connect();
socket.on('connect', () => console.log('WebSocket connected'));
socket.on('my_event', (payload) => console.log(payload));
Lire l'état de connexion tôt reste précis, car un socket fraîchement créé n'est pas non plus connecté : id est undefined et connected est false dans le comportement ancien et nouveau.
La seule différence : une méthode qui doit retourner quelque chose (par exemple listeners()) ne peut pas répondre avant que le chunk n'arrive, et les objets imbriqués tels que socket.io ne sont accessibles qu'une fois qu'il est chargé. L'enregistrement des gestionnaires et l'émission — l'utilisation normale — ne sont pas affectés.
Taille du bundle en un coup d'œil
| Scénario | Minifié | Gzip |
|---|---|---|
| Avant (chaque consommateur) | 536 kB | 110 kB |
| Validation désactivée, pas de socket | 43 kB | 9,7 kB |
| Validation désactivée, socket ouvert | ~83 kB | ~22 kB |
| Bundle en un seul fichier, pas de code splitting | ~427 kB | — |
Obtenir la plus petite version
- Laissez la validation désactivée en production. Activez-la pendant le développement pour détecter les incohérences de données, puis désactivez-la — les schémas restent en dehors du code chargé.
- Laissez votre bundler diviser le code. Le code splitting est activé par défaut dans webpack, Vite et Rollup ; le désactiver intègre les chunks paresseux et récupère la plupart des gains.
- Importez les types avec
import type. Les imports de types sont effacés au moment de la compilation — voir Importation de Types. - Ne déstructurez que les modules que vous utilisez. Avec
sideEffects: falseet la version ESM, les modules non touchés sont supprimés de la sortie.
🔗 Documentation Connexe
- Importation de Types - les points d'entrée
oneentryetoneentry/types - Validation de Réponse API - activation et configuration de la validation Zod
- Module WS - ouverture d'une connexion en temps réel