Saat memasang aplikasi di ponsel, Anda jarang mengunduh berkasnya satu per satu secara manual. Anda cukup membuka toko aplikasi, menekan tombol pasang, dan sistem mengurus sisanya: mengunduh, memasang, sampai memberi tahu ketika ada pembaruan. Di dunia Linux, peran serupa dipegang oleh package manager seperti apt atau yum yang mengelola ribuan paket software dari satu tempat terpusat.
Pengembang JavaScript menghadapi kebutuhan yang sama, bahkan lebih besar. Satu proyek web modern bisa bergantung pada ratusan potongan kode buatan orang lain, mulai dari pustaka kecil sampai framework besar. Mustahil mengunduh, menyusun, dan memperbarui semuanya secara manual. Di sinilah npm bekerja. npm adalah pengelola paket resmi yang membuat proses itu cukup dilakukan dengan satu baris perintah.
npm Adalah Apa? Mengenal Node Package Manager
npm adalah package manager (pengelola paket) standar untuk Node.js dan ekosistem JavaScript secara luas. Tugas utamanya sederhana untuk dijelaskan namun penting: mengunduh, memasang, memperbarui, dan mengatur paket kode yang dibutuhkan sebuah proyek, beserta seluruh ketergantungannya, secara otomatis.
Banyak pemula bertanya npm singkatan dari apa. Secara historis, npm berasal dari Node Package Manager. Menariknya, pengembangnya kemudian menjadikan namanya sebagai lelucon rekursif: secara resmi npm disebut sebagai "npm is not an acronym" (npm bukan singkatan). Jadi Anda tidak perlu memperdebatkan kepanjangan npm secara kaku, cukup pahami fungsinya.
Satu catatan supaya tidak salah arah. Singkatan "NPM" punya beberapa makna di luar pemrograman: di dunia kampus, NPM berarti Nomor Pokok Mahasiswa, sedangkan di bidang keuangan, NPM berarti Net Profit Margin. Artikel ini membahas npm dalam konteks pemrograman, yaitu pengelola paket Node.js. Karena npm hidup di ekosistem JavaScript, pemahaman dasar tentang bahasa tersebut akan memudahkan Anda mengikuti pembahasan berikutnya.
Tiga Hal yang Sebenarnya Anda Dapat dari npm
Sumber kebingungan pemula sering muncul karena kata "npm" dipakai untuk tiga hal sekaligus. Memisahkan ketiganya membuat semua penjelasan setelah ini terasa jauh lebih jelas.
- Registry (gudang paket): sebuah basis data publik berisi jutaan paket yang bisa diunduh siapa saja secara gratis. Inilah "rak" tempat semua paket disimpan.
- Perangkat baris perintah (CLI): program
npmyang Anda ketik di terminal. Perangkat inilah yang benar-benar mengunduh paket dari registry dan memasangnya ke proyek Anda. - Situs web npmjs.com: halaman untuk mencari paket, membaca dokumentasinya, dan melihat statistik penggunaannya sebelum Anda memutuskan memakainya.
Jadi ketika seseorang berkata "pasang lewat npm", yang dimaksud biasanya perangkat baris perintah, yang mengambil paket dari registry. Ketiganya satu kesatuan, hanya beda peran.
Sejarah Singkat: Dari 2010 sampai Dimiliki GitHub
npm pertama kali dirilis pada 12 Januari 2010 oleh Isaac Z. Schlueter, sebagai jawaban atas kebutuhan komunitas Node.js untuk berbagi kode dengan rapi. Sejak awal, npm dirancang menyatu dengan Node.js, sehingga ketika Anda memasang Node.js, npm ikut terpasang otomatis tanpa instalasi terpisah.
Dari proyek kecil, registry npm tumbuh menjadi yang terbesar di dunia, dengan lebih dari 3,1 juta paket dan puluhan miliar unduhan setiap bulan. Skala inilah yang membuatnya menjadi tulang punggung pengembangan web modern. Pada Maret 2020, npm, Inc. diakuisisi oleh GitHub (yang dimiliki Microsoft), dan registry publiknya tetap dijaga gratis untuk semua pengembang. Sebagian besar paket di dalamnya berlisensi open source, sehingga bebas digunakan dan dipelajari.
Cara Kerja npm: Registry, package.json, dan node_modules
Inti kerja npm bisa dipahami sebagai satu alur sederhana. Anda mendeklarasikan paket apa saja yang dibutuhkan proyek, npm membaca daftar itu, mengambil paketnya dari registry, lalu menyimpannya secara lokal di proyek Anda.
Daftar kebutuhan tadi ditulis dalam berkas bernama package.json. Saat Anda menjalankan perintah pemasangan, npm membaca berkas tersebut, menghubungi registry, mengunduh setiap paket beserta paket lain yang ikut dibutuhkannya (disebut dependency atau ketergantungan), lalu menaruh semuanya di sebuah folder bernama node_modules. Folder inilah yang berisi kode pihak ketiga siap pakai untuk proyek Anda.
Diagram alur npm install dari package.json ke node_modules.
Yang perlu Anda ingat: folder node_modules tidak ditulis manual dan tidak perlu Anda salin antar komputer. Cukup bawa package.json, jalankan satu perintah, dan npm akan menyusun ulang node_modules yang sama di mesin mana pun.
Mengenal package.json dan Versi Paket
Berkas package.json adalah pusat kendali sebuah proyek npm. Isinya antara lain nama proyek, versinya, kumpulan perintah pintasan (scripts), dan yang paling penting, daftar paket yang dibutuhkan. Daftar paket ini terbagi dua kelompok yang fungsinya berbeda.
- dependencies: paket yang dibutuhkan aplikasi agar berjalan di produksi. Contohnya pustaka untuk menangani permintaan jaringan atau mengelola tampilan.
- devDependencies: paket yang hanya dipakai selama pengembangan dan pengujian, misalnya alat pengetes kode atau pemformat otomatis. Paket ini tidak ikut dibutuhkan saat aplikasi sudah dipakai pengguna.
Setiap paket dituliskan bersama versinya, dan di sinilah pemula sering tersandung. npm memakai Semantic Versioning (SemVer), yaitu penomoran tiga bagian mayor.minor.patch, contohnya 4.18.2. Angka pertama berubah saat ada perubahan besar yang berpotensi merusak, angka kedua saat ada fitur baru, dan angka ketiga saat ada perbaikan kecil.
Dua simbol berikut menentukan seberapa bebas npm boleh menaikkan versi saat memasang:
Diagram pembagian versi SemVer 4.18.2 menjadi mayor, minor, dan patch.
- Tanda sisipan
^(misal^4.18.2): boleh naik ke versi minor dan patch terbaru, tapi angka mayor tetap. Jadi npm boleh memasang4.19.0, tapi tidak5.0.0. - Tanda gelombang
~(misal~4.18.2): hanya boleh naik di angka patch. npm boleh memasang4.18.5, tapi tidak4.19.0.
Agar setiap anggota tim dan setiap server mendapat versi yang benar-benar sama, npm membuat berkas pendamping bernama package-lock.json. Berkas ini mengunci versi persis dari seluruh paket, termasuk ketergantungan turunannya. Jadi package.json menyatakan kebutuhan secara longgar, sedangkan package-lock.json mencatat versi pasti yang terpasang.
Perintah Dasar npm yang Wajib Anda Tahu
Anda tidak perlu menghafal semua perintah npm. Beberapa perintah inti berikut sudah cukup untuk kebutuhan sehari-hari. Semua dijalankan di terminal, di dalam folder proyek Anda.
Untuk memulai proyek baru dan membuat package.json, gunakan perintah inisialisasi berikut. Tambahkan -y agar npm mengisi nilai bawaan tanpa banyak bertanya:
npm init -yUntuk memasang satu paket tertentu ke dalam proyek, sebutkan namanya. Contoh memasang Express, sebuah framework untuk membangun server:
npm install expressTambahkan --save-dev jika paket itu hanya dipakai saat pengembangan, sehingga masuk ke devDependencies. Sementara itu, untuk memasang ulang seluruh paket yang sudah tercatat di package.json (misalnya setelah mengunduh proyek dari rekan), cukup jalankan npm install tanpa nama paket apa pun.
Beberapa perintah penting lain yang sering dipakai:
npm install -g <paket>: memasang paket secara global di seluruh sistem, bukan hanya satu proyek. Cocok untuk alat baris perintah.npm uninstall <paket>: menghapus paket dari proyek dan daripackage.json.npm update: memperbarui paket ke versi terbaru yang masih diizinkan oleh aturan SemVer dipackage.json.npm run <nama-script>: menjalankan perintah pintasan yang Anda definisikan di bagianscripts. Contoh paling umum adalahnpm run devuntuk menyalakan server pengembangan.npm ci: memasang paket secara bersih langsung daripackage-lock.json. Perintah ini lebih cepat dan konsisten, sehingga umum dipakai di server otomatis. Jikapackage.jsondan lockfile tidak sinkron, npm akan berhenti dan menampilkan pesan kesalahan, bukan diam-diam memperbaikinya.
npm Bukan Satu-satunya: Sekilas yarn dan pnpm
npm memang pengelola paket bawaan Node.js, tetapi bukan satu-satunya pilihan. Dua alternatif populer adalah yarn dan pnpm. Keduanya membaca package.json yang sama dan mengambil paket dari registry npm yang sama, jadi konsepnya tidak berubah.
Perbedaannya ada pada cara kerja di belakang layar. yarn dulu hadir untuk menawarkan pemasangan yang lebih cepat dan stabil, sementara pnpm fokus menghemat ruang disk dengan tidak menggandakan paket yang sama di banyak proyek. Untuk pemula, npm bawaan sudah lebih dari memadai. Anda bisa mempertimbangkan yarn atau pnpm nanti, ketika sudah merasakan kebutuhan spesifik seperti kecepatan pemasangan di proyek besar.
Hal yang Perlu Anda Pertimbangkan
Kemudahan npm datang dengan beberapa konsekuensi yang sebaiknya Anda sadari sejak awal, supaya tidak kaget di kemudian hari.
- Folder node_modules bisa sangat besar: karena setiap paket membawa ketergantungannya sendiri,
node_modulesmudah membengkak hingga ratusan megabyte bahkan untuk proyek sederhana. Inilah alasan folder ini biasanya tidak ikut disimpan ke sistem kontrol versi, melainkan dibangun ulang dengannpm install. - Risiko keamanan dari kode pihak ketiga: setiap paket adalah kode buatan orang lain yang Anda jalankan di proyek Anda. Sebuah paket bisa membawa celah keamanan, baik karena kelalaian maupun karena disusupi. Karena itu, biasakan menjalankan
npm audituntuk memeriksa kerentanan yang diketahui, dan jangan memasang paket asing tanpa menelaahnya lebih dulu. - Ketergantungan turunan yang berlapis: satu paket yang Anda pasang bisa menarik puluhan paket lain. Mengunci versi lewat
package-lock.jsonmembantu menjaga agar hasil pemasangan tetap konsisten dan dapat diprediksi.
Pertimbangan ini bukan alasan untuk menghindari npm, melainkan rambu agar Anda memakainya dengan sadar. Saat aplikasi Node.js Anda sudah siap dijalankan di lingkungan nyata, Anda akan menjalankan npm di sisi server, baik di hosting yang mendukung Node.js maupun di sebuah VPS tempat Anda memegang kendali penuh atas lingkungannya.
Kesimpulan
npm adalah pengelola paket resmi Node.js yang menyatukan tiga peran: registry sebagai gudang paket, perangkat baris perintah untuk memasangnya, dan situs untuk mencarinya. Inti kerjanya berpusat pada package.json yang mendeklarasikan kebutuhan, dan folder node_modules tempat paket tersimpan. Untuk memulai, Anda tidak perlu menguasai semuanya sekaligus. Pahami dulu cara membaca package.json, lalu kuasai segelintir perintah dasar seperti npm init, npm install, dan npm run.
Bagi sebagian besar pemula, npm bawaan sudah cukup untuk perjalanan belajar maupun membangun proyek pertama. Setelah terbiasa, Anda bisa mendalami SemVer lebih jauh, mengelola keamanan dependency, atau mencoba alternatif seperti yarn dan pnpm. Semoga artikel ini membantu.




