Ada Package Manager BARU!? (Alternatif Bun)

BBetter Stack
Computing/SoftwareInternet Technology

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.

Key Takeaway

Nub menyediakan alat serba ada berbasis biner Rust yang berjalan di atas Node.js standar untuk menggantikan pnpm, TSX, dotenv, dan NVM dengan performa instalasi hingga 136 milidetik.

Highlights

  • Nub adalah toolkit JavaScript berbasis biner tunggal Rust yang berjalan di atas Node.js untuk menggantikan manajer paket, runner TypeScript, dan versi Node.

  • File runner Nub menginstal paket 5 kali lebih cepat dari pnpm dan mengeksekusi biner paket 19 kali lebih cepat dari npx.

  • Proyek ini dibuat oleh Colin, pencipta pustaka Zod yang juga membuat proof of concept untuk tRPC dan mantan pengembang Bun.

  • Pengujian instalasi lokal menunjukkan Nub menyelesaikan instalasi 212 paket dalam waktu 136 milidetik, mengalahkan Bun di 239 milidetik.

  • Fitur keamanan bawaan Nub memberlakukan batas usia rilis minimum paket selama 24 jam dan memblokir skrip build otomatis.

Timeline

Arsitektur dan Latar Belakang Nub

  • Nub berfungsi sebagai toolkit serba ada berbasis biner Rust tanpa menggantikan runtime Node.js.
  • Alat ini mengintegrasikan fungsi file runner, script runner, package runner, package manager, dan Node version manager.
  • Colin, pembuat Zod dan kontributor tRPC, merancang Nub sebagai alternatif ekosistem Node.

Nama Nub merupakan ejaan terbalik dari Bun untuk mencerminkan pendekatan fitur serupa yang berjalan di atas Node.js standar. Biner tunggal Rust ini mendistribusikan dukungan penuh untuk sistem operasi Mac, Windows, dan Linux.

Kemampuan File Runner dan Kompatibilitas Node

  • File runner Nub mengeksekusi fitur TypeScript penuh seperti enum, namespace, dan parameter properties tanpa kegagalan sintaks.
  • Pemuatan variabel lingkungan terjadi secara otomatis dengan prioritas utama pada file .env.local.
  • Kompatibilitas bendera penuh memastikan perintah Node dapat diganti langsung menggunakan Nub.

Pemuatan file JSON, YAML, HTML, serta teks dapat dilakukan langsung tanpa pustaka tambahan. Fitur ini menangani transpilasi JSX, decorator, kata kunci using, pemecahan jalur tsconfig-paths, serta penyediaan polyfill otomatis untuk API modern seperti Web Workers dan Temporal.

Manajemen Versi Node Otomatis

  • Nub mendeteksi berkas konfigurasii .node-version, .nvmrc, atau package.json untuk mengunduh versi Node.js yang sesuai.
  • Sistem ini menggantikan kebutuhan alat eksternal seperti NVM dan fnm.
  • Perintah manajemen lokal menyediakan fungsi instalasi, pendaftaran daftar versi, penghapusan, dan penambatan berkas.

Perubahan versi pada berkas konfigurasi proyek memicu pengunduhan dan eksekusi versi Node secara otomatis saat biner Nub dijalankan. Seluruh riwayat versi terisolasi di dalam lingkungan kerja tanpa memerlukan konfigurasi shell tambahan.

Kinerja dan Fitur Keamanan Package Manager

  • Proses instalasi 212 paket selesai dalam 136 milidetik pada pengujian lokal.
  • Perintah nub x mengeksekusi biner langsung dari node_modules tanpa memuat ulang proses Node wrapper.
  • Aturan keamanan membatasi rilis paket berumur kurang dari 24 jam dan memblokir eksekusi skrip build otomatis.

Penggunaan file kunci dari pnpm atau Bun dapat langsung diadopsi tanpa membuat berkas pengunci baru. Struktur perintah dan fitur ruang kerja sepenuhnya kompatibel dengan pnpm, sementara mekanisme keamanan internal mencegah potensi serangan rantai pasokan kode.

Script Runner dan Integrasi OBE

  • Eksekusi skrip melalui nub run menghindari overhead pemuatan JavaScript manajer paket.
  • Komponen manajemen paket Nub memanfaatkan pustaka OBE buatan pencipta Mise.
  • Action GitHub khusus tersedia sebagai pengganti langsung dari tindakan setup-node resmi.

Ketiadaan proses awal Node.js pada penanganan skrip menghasilkan peningkatan kecepatan eksekusi tugas harian. Kolaborasi pengembangan biner ini memanfaatkan komponen modular Rust teruji untuk memastikan stabilitas ekosistem.

Community Posts

View all posts