Ukuran Bundle & Format Modul
SDK mengirimkan baik build CommonJS maupun ESM, dan menjaga dua ketergantungan beratnya — Zod dan socket.io-client — keluar dari grafik impor sampai mereka benar-benar digunakan. Proyek yang memanggil satu metode, tidak mengaktifkan validasi dan tidak pernah membuka soket memuat 43 kB yang diminimalkan (9.7 kB gzip), turun dari 536 kB (110 kB gzip).
Apa yang dikirim dalam paket
| Field | Value | Used by |
|---|---|---|
main | dist/index.js | Node dan konsumen CommonJS lainnya |
module | esm/index.js | Bundler (webpack, Vite, Rollup, esbuild) |
types | dist/index.d.ts | TypeScript |
sideEffects | false | Bundler, untuk menghapus modul yang tidak digunakan |
Tidak ada peta "exports", jadi setiap impor dalam yang dalam — oneentry/dist/<module>/<module>Interfaces dan lainnya — diselesaikan persis seperti sebelumnya. Node terus menyelesaikan build CommonJS melalui main; tidak ada yang perlu diubah dari pengaturan Anda saat ini.
sideEffects: false memberi tahu bundler bahwa mengimpor modul SDK tidak pernah melakukan apa pun dengan sendirinya, yang memungkinkan tree-shaking: modul yang tidak Anda sentuh dihapus dari output.
Zod hanya dimuat saat validasi dijalankan
Validasi respons dinonaktifkan secara default. Skema respons sebelumnya diimpor secara statis oleh setiap modul, yang menarik Zod ke dalam setiap bundle bahkan ketika tidak ada yang pernah divalidasi. Skema dan pembantu validasi sekarang dimuat sesuai permintaan, saat pertama kali respons benar-benar harus divalidasi.
- Dengan
validation.enabled: false(default), Zod dan skema per modul (341 kB) berakhir dalam chunk yang tidak pernah diminta. - Dengan
validation.enabled: true, perilakunya tidak berubah — skema hanya diambil saat pertama kali dibutuhkan. - Di Node,
require('oneentry')tidak lagi memuat Zod saat startup.
Untuk proyek yang memanggil satu metode dengan validasi dimatikan, kode yang benar-benar dimuat turun dari 536 kB menjadi 83 kB yang diminimalkan (110 kB → 22 kB gzip) — dan turun menjadi 43 kB setelah socket.io juga dikeluarkan (lihat di bawah).
ℹ️ Angka tersebut mengasumsikan bundler melakukan pemisahan kode — default di webpack, Vite, dan Rollup. Bundle yang dipaksa menjadi satu file tetap menyusut, tetapi hanya menjadi ~427 kB, karena Zod kemudian disisipkan meskipun tidak pernah dijalankan.
Tidak ada API publik yang berubah. Pembantu internal _validateResponse menjadi async, yang hanya relevan jika Anda memperluas kelas dasar SDK sendiri.
socket.io hanya dimuat saat Anda membuka soket
WS.connect() mempertahankan tanda tangan synchronous dan masih mengembalikan Socket dari socket.io, tetapi socket.io-client (~41 kB) sekarang diimpor saat pertama kali connect() dipanggil.
Sampai chunk diselesaikan, objek yang dikembalikan mengantri apa pun yang Anda lakukan dengannya — on, emit, disconnect — dan memutarnya ke soket yang sebenarnya dalam tick yang sama saat soket dibuat, sebelum koneksi dapat mengirimkan apa pun, sehingga tidak ada peristiwa yang hilang:
// 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));
Membaca status koneksi lebih awal tetap akurat, karena soket yang baru dibuat juga tidak terhubung: id adalah undefined dan connected adalah false dalam perilaku lama maupun baru.
Satu perbedaan: metode yang harus mengembalikan sesuatu (misalnya listeners()) tidak dapat menjawab sebelum chunk tiba, dan objek bersarang seperti socket.io hanya dapat diakses setelah dimuat. Mendaftarkan handler dan mengeluarkan — penggunaan normal — tidak terpengaruh.
Ukuran bundle sekilas
| Scenario | Minified | Gzip |
|---|---|---|
| Sebelum (setiap konsumen) | 536 kB | 110 kB |
| Validasi dimatikan, tidak ada soket | 43 kB | 9.7 kB |
| Validasi dimatikan, soket dibuka | ~83 kB | ~22 kB |
| Bundle satu file, tanpa pemisahan kode | ~427 kB | — |
Mendapatkan build terkecil
- Biarkan validasi dimatikan di produksi. Aktifkan saat mengembangkan untuk menangkap inkonsistensi data, lalu matikan — skema tetap keluar dari kode yang dimuat.
- Biarkan bundler Anda memisahkan kode. Pemisahan kode diaktifkan secara default di webpack, Vite, dan Rollup; menonaktifkannya menyisipkan chunk malas dan mengembalikan sebagian besar keuntungan.
- Impor tipe dengan
import type. Impor tipe dihapus pada waktu kompilasi — lihat Impor Tipe. - Hanya destruktur modul yang Anda gunakan. Dengan
sideEffects: falsedan build ESM, modul yang tidak tersentuh dihapus dari output.
🔗 Dokumentasi Terkait
- Impor Tipe - titik masuk
oneentrydanoneentry/types - Validasi Respons API - mengaktifkan dan mengonfigurasi validasi Zod
- Modul WS - membuka koneksi waktu nyata