Transcript
00:00:00Ini adalah Nub, toolkit JavaScript serba ada yang bekerja di atas Node, bukan menggantikannya.
00:00:04Ini menggantikan semua alat yang biasa Anda gunakan saat ini, mulai dari manajer paket yang
00:00:08lima kali lebih cepat daripada pnpm, hingga runner TypeScript yang bisa menggantikan TSX,
00:00:13dan bahkan manajer versi Node. Ini adalah fitur-fitur terbaik Bun, tetapi berjalan di atas Node.js standar,
00:00:17dan itulah alasan mengapa Nub sebenarnya adalah ejaan terbalik dari Bun.
00:00:21Saya tahu pengembang JavaScript suka membuat ulang hal-hal baru, tetapi ini bukan sekadar proyek
00:00:25sembarang orang. Alat ini dibuat oleh Colin, pencipta Zod, yang juga membuat proof of concept
00:00:29untuk tRPC, dan bahkan pernah bekerja di Bun. Mari langsung kita pelajari.
00:00:38Nub adalah satu biner Rust yang berfungsi di Mac, Windows, dan Linux. Seperti yang saya tunjukkan di awal,
00:00:44ini hanyalah beberapa alat yang bisa digantikannya. Nub adalah file runner, script runner,
00:00:47package runner, package manager, dan Node version manager. Mari kita bahas satu per satu.
00:00:52Pertama, file runner, dan fitur ini saja memiliki banyak keunggulan. File runner mendukung TypeScript penuh,
00:00:56bukan sekadar type stripping seperti pada Node, sehingga bisa menggantikan alat seperti TSX atau ts-node.
00:01:02Di sini kita bisa melihat file TypeScript yang memiliki enum, namespace, serta param properties,
00:01:06dan itu bukanlah sesuatu yang biasanya bisa dijalankan oleh Node. Jika saya cukup menjalankan Nub, lalu file
00:01:11yang ingin dijalankan, Anda bisa melihat bahwa ini berjalan lancar di saat Node akan mengalami kegagalan.
00:01:15Jika saya mengganti Nub di sini dengan Node, kita bisa melihat eror sintaks TypeScript tidak didukung,
00:01:20karena Node tidak mendukung namespace atau enum. File runner juga bisa menggantikan alat seperti dotenv,
00:01:24mengimpor variabel lingkungan secara otomatis. Ini mendukung file .env, .env.local, serta file
00:01:29lingkungan Node, dan bahkan memiliki ekspansi variabel otomatis. Di bagian bawah sini, kita punya
00:01:33variabel yang dibentuk dari variabel lingkungan lain. Kita memiliki pengguna database dan
00:01:37host database di sini. Jika sekarang saya menjalankan file ini dengan Nub, variabel-variabel lingkungan
00:01:41tersebut akan diimpor, dan URL pemeriksaan kesehatan saya terbentuk menggunakan nilai variabel lainnya.
00:01:46Anda juga bisa melihat bahwa kunci API saya tidak sama dengan yang ada di .env di sini.
00:01:50Itu karena .env.local selalu diutamakan, dan di sini saya telah mengatur kunci API
00:01:54untuk berlangganan Better Stack. Itu adalah sesuatu yang wajib Anda lakukan jika ingin terus mendapatkan
00:01:58kabar terbaru seputar AI dan dunia pengembang. Silakan berlangganan, ini sangat membantu. Selanjutnya, saya akan
00:02:02menjalankan nub dan kemudian src/index.tsx, dan kita bisa melihat semuanya berjalan di sini.
00:02:07Ini adalah demonstrasi fitur nub saya. Pada kode file tersebut, saya menggunakan banyak fitur dari file runner nub.
00:02:12Salah satu yang pertama adalah kita bisa mengimpor file JSON, YAML,
00:02:15HTML, dan bahkan file teks, serta bisa menggantikan alat seperti tsconfig-paths. Jalur yang saya atur
00:02:20di sini dengan @config, yang sudah diatur dalam tsconfig saya, akan dipastikan
00:02:24dapat diselesaikan oleh Node dengan benar. Ada juga dukungan untuk decorator, seperti service dan sealed di sini.
00:02:29Fitur ini mendukung JSX dan akan mentranspilasikannya berdasarkan pengaturan tsconfig Anda, bahkan Anda bisa memakai
00:02:34kata kunci modern seperti kata kunci using untuk manajemen sumber daya eksplisit. Selain semua itu,
00:02:38Nub juga mendukung banyak API modern, seperti web workers, temporal, dan banyak lagi. Nub akan memberikan polyfill
00:02:43secara otomatis pada versi Node yang belum mendukungnya, dan juga mengaktifkan fitur eksperimental
00:02:48Node seperti dukungan localStorage. Itu baru sebagian kecil dari semua fitur
00:02:52yang didukung oleh file runner, tetapi saya juga ingin menyebutkan bahwa runner ini kompatibel bendera demi bendera dengan
00:02:56Node. Maksud saya, karena pada akhirnya ia hanya menjalankan Node, ia hanya meneruskan bendera-bendera tersebut. Artinya jika
00:03:01skrip Anda tidak menggunakan fitur yang tidak didukung Node, Anda tinggal mengganti Node dengan nub dan mendapatkan
00:03:06hasil yang sama persis. Omong-omong, semua ini dilakukan hampir tanpa penurunan kecepatan.
00:03:10Kecepatannya sebisa mungkin mendekati Node, dan menurut dokumentasi mereka, waktu yang dibutuhkan
00:03:14untuk menjalankan file nub sama persis dengan di Node. Saya akui ini tidak akan lebih cepat dari Bun, karena Bun adalah
00:03:19runtime asli yang menggantikan Node, sedangkan nub dibangun di atas Node. Saya memutuskan untuk menjalankan
00:03:24tolok ukur sendiri di Mac saya untuk melihat mana yang lebih cepat, dan jika tampilan ini dibuat sedikit
00:03:28lebih rapi, kita bisa melihat bahwa Node sebenarnya paling cepat bagi saya. Kecepatannya tidak persis sama
00:03:31dengan nub. Nub sedikit tertinggal, tetapi TSX lebih lambat dari keduanya. Beralih dari
00:03:36file runner, fitur nomor dua adalah manajer versi Node. Tidak ada lagi hari-hari membutuhkan NVM atau
00:03:41fnm. Di nub, jika saya punya file di proyek yang bernama .node-version, atau jika menentukannya di .nvmrc atau bahkan
00:03:46di package.json, nub secara otomatis akan menginstal versi yang dibutuhkan dari Node.js.
00:03:52Saat ini proyek ini menggunakan versi Node 26 terbaru. Jika saya mengubah file ini menjadi katakanlah
00:03:56versi 24, lalu menjalankannya kembali menggunakan nub, alat ini akan langsung mengambil versi Node tersebut. Nub juga memiliki semua
00:04:02perintah pengelolaan biasa yang Anda harapkan, jadi kita bisa menginstal versi Node, melihat daftar versi yang
00:04:06terinstal, menghapus versi Node, dan bahkan ada penambatan versi yang akan menuliskan file
00:04:10versi Node tersebut untuk Anda. Sesederhana itu, jadi mari kita berlanjut ke tiga fitur berikutnya,
00:04:15di mana nub dapat menggantikan pnpm dan bun. Pertama adalah fitur nomor tiga, yaitu
00:04:20manajer paket. Fitur ini menjanjikan lima kali lebih cepat daripada pnpm, padahal saya pikir pnpm sudah
00:04:25sangat cepat. Cara kerjanya sesuai dugaan Anda, nub install menginstal paket, tetapi ada hal menarik
00:04:31di sini karena ia bisa mengadopsi file kunci yang sudah ada. Jadi jika Anda pernah menggunakan bun atau pnpm pada proyek
00:04:36sebelumnya, nub hanya akan memperbarui file kunci tersebut alih-alih membuat file sendiri. Ini membuatnya sangat mudah
00:04:41untuk berganti di antaranya jika Anda perlu, begitu pula dengan kompatibilitas pnpm. Setiap perintah
00:04:46manajemen paket di nub persis sama dengan pnpm, termasuk fitur-fitur canggih pnpm seperti
00:04:51katalog ruang kerja. Benderanya sama persis, jadi menukar pnpm dan nub akan berjalan lancar, dan jika Anda
00:04:57menggunakan npm, bun, atau yarn, opsi konfigurasi manajer paket tersebut juga akan terdeteksi.
00:05:02Mengenai klaim kecepatan itu, tolok ukur menempatkan nub sebagai yang tercepat pada instalasi warm
00:05:06frozen, membutuhkan 346 milidetik untuk menginstal 1.168 paket, dan di komputer saya, saya melakukan
00:05:13pengujian pada 14 dependensi langsung yang terurai menjadi 212 paket unik, dan tolok ukur membuktikan bahwa nub adalah
00:05:19yang tercepat. Nub menginstal paket saya dalam 136 milidetik, bun di posisi kedua dengan 239 milidetik,
00:05:25sementara pnpm dan npm butuh waktu lebih dari satu detik, jadi klaim kecepatan itu terbukti benar di komputer saya,
00:05:30dengan kecepatan yang sangat mengesankan. Manajer paket ini juga mengambil hal-hal terbaik dari pnpm terkait
00:05:35keamanan, memiliki batas usia rilis minimum standar 24 jam, dan tidak akan menjalankan skrip build
00:05:40kecuali disetujui, jadi Anda seharusnya aman dari sebagian besar serangan Shai Hulud. Bagian hebat berikutnya dari manajer
00:05:45paket adalah eksekusi paket sebenarnya, yang merupakan fitur nomor 4, dan keunggulan utamanya adalah
00:05:4919 kali lebih cepat daripada npx. Perintah nub x sebenarnya mengarah ke folder biner di dalam node
00:05:54modules, jadi di Rust ia langsung mengeksekusi biner tersebut tanpa ada proses node di dalam
00:05:59pembungkusnya, yang juga berarti alat ini bekerja dengan manajer paket apa pun karena langsung menuju ke
00:06:03node modules tersebut. Seperti sebagian besar perintah nub, ini benar-benar kompatibel bendera demi bendera dengan
00:06:07pnpm exec, termasuk perintah dlx juga. Saat menjalankan tolok ukur di Mac saya, nub sebenarnya adalah
00:06:12yang tercepat pada 169 md untuk menjalankan esbuild, dibandingkan pnpm sebesar 423 md, jadi sekali lagi klaim kecepatan kita memiliki
00:06:20kebenaran di dalamnya. Fitur terakhir yang Anda butuhkan dalam manajer paket adalah script runner, dan tampaknya
00:06:24fitur ini 24 kali lebih cepat daripada pnpm run, serta memiliki hook siklus hidup, variabel lingkungan npm,
00:06:29dan penerusan argumen. Saat Anda menggunakan npm atau pnpm, keduanya akan memuat program Node.js,
00:06:34memuat JavaScript masing-masing manajer paket setiap kalinya, sedangkan nub hanya menggunakan biner Rust-nya
00:06:38tanpa proses awal. Tolok ukur lokal saya kembali menunjukkan bahwa nub run adalah yang tercepat,
00:06:43tetapi dengan selisih yang tidak sebesar pada dokumentasi tersebut. Perlu dicatat juga,
00:06:47dan ini keempat kalinya saya mengatakan ini di video, perintah ini kompatibel bendera demi bendera
00:06:51dengan pnpm, artinya ini juga mendukung fitur mono repo pnpm. Satu hal yang ingin saya apresiasi
00:06:56mengenai tiga fitur terakhir itu adalah bahwa nub tidak membuat ulang roda. Nub sebenarnya menggunakan
00:07:00OBE di balik layar, yang merupakan manajer paket buatan JDX, pencipta dari
00:07:04Mise. Dia membuat manajer paket tersebut agar dapat disematkan oleh pustaka lain, dan Colin bekerja sama
00:07:08dengannya untuk menggunakannya di nub, jadi ini bukan hasil mencuri karya orang lain. Itu adalah fitur-fitur utama
00:07:13dari nub, tetapi masih ada banyak hal lain untuk dijelajahi, seperti GitHub Action
00:07:17pengganti langsung yang menggantikan setup-node resmi. Alat ini dibuat semata-mata untuk membuat segala hal
00:07:21di sekitar Node menjadi jauh lebih mudah. Namun inilah pertanyaan yang saya ajukan pada diri sendiri, apakah saya akan benar-benar
00:07:26menggunakannya? Bagi saya, jawabannya ya dalam skenario tertentu. Jujur saja, saya adalah pengguna berat
00:07:31Bun, dan saya belum pernah mengalami masalah kompatibilitas dalam pengembangan saya. Mungkin dengan port
00:07:35Rust yang baru saya bisa saja berpaling, tetapi meski begitu saya akan tetap menggunakan pnpm untuk segalanya, dan saya
00:07:40harus mengakui, saya tidak pernah merasa bahwa pnpm terlalu lambat. Saya juga menggunakan Mise untuk mengelola versi Node
00:07:44saya, jadi saya tidak melihat diri saya membutuhkan bagian itu, tetapi saya bisa membayangkan diri saya membutuhkan
00:07:48file runner yang menggantikan TSX. Namun, skenario penggunaan terbaik yang saya lihat untuk diri saya sendiri adalah saat
00:07:52saya menggunakan mesin virtual sekali pakai yang baru. Terkadang saya menyiapkannya dengan cepat untuk melakukan
00:07:57beberapa pengujian, dan jika saya hanya ingin langsung memulai dengan Node, saya rasa nub adalah salah satu paket paling lengkap,
00:08:01serta cara tercepat dan termudah untuk melakukannya. Jadi sebagian besar hanya karena saya terjebak
00:08:05pada kebiasaan lama yang menghalangi saya menggunakan nub setiap hari, tetapi saya ingin tahu apa yang Anda gunakan
00:08:08sebagai manajer paket Anda, dan jika Anda mempertimbangkan alat seperti nub, mungkin Anda ingin beralih dari
00:08:12Bun sekarang setelah ditulis ulang menggunakan Rust. Beritahu saya di kolom komentar di bawah, atau jika Anda sudah
00:08:16berlangganan, dan seperti biasa, sampai jumpa di video berikutnya.