Kenapa Gw Bikin Node Manager Sendiri (Padahal Belum Pernah Pake NVM)


https://www.blogger.com/#
Dulu pas pertama kali nyoba Linux, gw main hajar aja install Node.js pake apt karena gw pikir itu cara paling bener dan paling simpel. Ekspektasi gw udah tinggi banget, pengen langsung dapet versi terbaru biar bisa nyoba bikin project Vite yang lagi rame. Tapi masalahnya pas gw install itu kok error, trus pas gw cek npm -v, eh ternyata hasilnya bobrok banget, versinya masih nyangkut di v14. Di situ gw sadar kalau repo distro emang kadang suka ketinggalan zaman. Tanpa babibubebo, langsung gw purge detik itu juga dari sistem gw karena ngerasa nggak guna.

Abis kejadian itu, gw sebenernya sempet nyoba nyari solusi "normal" yang orang-orang pake, yaitu NVM. Tapi pas proses install, gw malah ketemu error yang gw sendiri sampe sekarang lupa itu apaan. Karena gw anaknya males kalau harus debat sama error installer yang nggak jelas, akhirnya gw anggep aja emang nggak jodoh pake NVM official. Lagian, gw juga males refleksi diri kenapa itu bisa gagal, mending cari jalan lain yang lebih "gw banget."

Sebenernya waktu it menurut gw Linux itu menarik bukan cuma soal OS/Distro-nya, tapi juga soal kebebasannya. Waktu itu gw lagi selang-seling belajar bahasa C karena menurut gw C itu punya daya tarik tersendiri. Terus gw jadi inget zaman mainan Termux dulu, gw sering banget ngutak-atik /usr/local/bin buat naruh script-script aneh. Akhirnya gw mutusin buat balik ke "Manual Era" sekitar 3 harian. Gw download tarball Node, extract manual ke /usr/local/lib/nodejs, terus bikin link manual ke /usr/local/bin biar bisa dipake. Tapi ya namanya juga gw, lama-lama penyakit malesnya kumat. Capek juga kalau harus pindah-pindah folder dan gonta-ganti link tiap mau nyoba versi Node yang beda.

Di situlah ide nekat muncul: "Kenapa nggak bikin Node Version Manager sendiri aja pake C?" Gw pilih C karena emang lagi pengen pake C, lagian C++ itu menurut gw ribet dan jujur gw males ketemu boilerplate yang nggak perlu. Soal Rust? Waktu itu gw malah nggak tau apa-apa dan gw anggep rust bahasa biasa, jadi nggak masuk hitungan. Awalnya konsep kerja tool ini gw bikin mirip kayak n, tapi banyak masukan kalau cara gitu kurang aman secara permission (yang sebenernya gw tau dia nanya ke ai dulu baru ngomong ke gw). Karena gw pengen tool ini (yang akhirnya gw kasih nama NDM) bisa dipake orang lain dengan aman, akhirnya gw putusin buat ganti konsep total.

Gw ngerjain flow sistem intinya sekitar 5 harian. Tantangan terbesarnya cuma satu: gimana caranya bikin sistem ini system-wide dan support multi-user, tapi tetep aman dan nggak ngerusak sistem utama. Gw sempet seharian pusing nyari alternatif buat gantiin .bashrc biar settingan path-nya lebih universal dan nggak berantakan. Awalnya gw nyasar ke profile.d sampe environment.d, tapi ternyata itu rata-rata khusus buat distro yang pake systemd. Sampe akhirnya gw ketemu pam_env, dan itulah kuncinya.

Dengan pam_env, gw bisa ngatur environment variable dengan lebih rapi. Struktur foldernya pun gw pikirin mateng-mateng: semua versi Node gw kumpulin di /opt/nodeman/ biar simpel dan terpusat. Terus buat tiap user, gw bikinin folder workspace di ~/.ndm/<version> buat nyatuin Node, NPM, sampe Corepack. Semuanya nanti muara ke ~/.ndm/bin yang udah gw daftarin di $PATH user. Jadi tiap kali user ganti versi pake fitur use, NDM bakal otomatis ngatur ulang kaitan binary-nya di situ.

Pas awal jadi, jujur aja UX-nya masih jelek banget, cuma tulisan teks doang yang lewat di terminal. Makanya gw update terus sampe akhirnya gw tambahin Interactive TUI pake ncurses murni biar lebih enak dipandang. Gw juga nambahin fitur parallel build yang sebenernya teknik gw pake buat install lfs. Fitur ini penting banget, karena gw males nunggu 2 jam cuma buat kompilasi dari source, jadi mending gw suruh NDM buat pake semua core CPU yang ada biar prosesnya ngebut.

Kalau ada yang nanya "Kenapa nggak pake NVM aja?", jawaban gw simpel: NDM menang telak secara performa karena dia binary murni C11, bukan shell script yang harus di-parsing tiap kali jalan. NDM udah gw test di sistem Arch Linux gw yang super minimalis dan semuanya jalan lancar tanpa kendala. Masalah masa depan sih gw pengen NDM punya komunitas sendiri atau minimal bisa ngebantu sesama user Linux yang males ribet. Tapi ada spoiler dikit: karena belakangan gw lagi mulai asik nyoba Rust, mungkin bakal ada rewrite besar-besaran buat project baru namanya rs-ndm. Tapi ya liat nanti lah, yang penting NDM sekarang udah stabil di v2.6.0.


Komentar