Apa Itu Manajemen Package — Apa yang Dipasang npm install dan Di Mana

Artikel ini adalah bagian dari kursus Dasar-Dasar Teknologi Informasi, yang membangun dari nol pengetahuan TI praktis yang minimal kamu butuhkan untuk memprogram dan melakukan vibe coding.
Ketika kamu mengetik npm install react, folder node_modules muncul di my-app dan satu baris bertambah di package.json. Diagramnya mengikuti apa yang dipicu oleh satu baris itu.

Artikel ini membahas manajemen package.

Ini adalah mekanisme yang mengambil library eksternal lewat nama dengan satu baris seperti npm install, lalu menaruhnya di tempat yang sudah ditentukan.

Apa yang ditaruh satu baris npm install react, dan di mana
Ketiknpm install reactnpm mengunduh darisitus distribusiFolder bertambahdi node_modulesSatu baris masukke package.jsonapp.js tidakberubah
Satu baris di sebelah kiri diteruskan ke npm di tengah, dan hasilnya tertinggal di dua tempat di sebelah kanan. app.js yang kamu tulis sendiri tidak berubah.

Kamu hanya mengetik satu baris di sebelah kiri, dan dua hal di sebelah kanan itulah yang bertambah.

Yang bertambah hanyalah folder node_modules dan satu baris di package.json, sedangkan app.js yang kamu tulis sendiri tidak berubah satu karakter pun.

Apa itu package — library eksternal yang kamu ambil lewat nama

Library eksternal yang dikemas agar bisa diambil lewat nama disebut package, dan nomor yang menandai isinya pada saat itu disebut versi.

Ketika kamu ingin menampilkan tanggal dengan rapi di aplikasi reservasi my-app, proses yang sama bisa kamu tulis sendiri, tetapi juga sudah dibagikan sebagai package.

Menampilkan tanggal: menulis sendiri atau mengambil package
Ingin menampilkantanggal rapiTulis sendiriPakai packageTulis puluhanbaris dan perbaikiAmbil lewat nama,panggil satu barisTampilan samamuncul di layar
Dari atas ke bawah, alurnya terbagi dua lalu bertemu lagi di akhir. Yang berbeda adalah banyaknya baris yang kamu tulis, sedangkan layar yang muncul sama saja.

Di sebelah kiri, semua baris yang kamu tulis menjadi milikmu; di sebelah kanan, kamu hanya memanggil yang sudah kamu ambil dengan satu baris.

Isi satu package bernama react
Package bernama react
Nama
  • String yang kamu sebut saat mengambil
  • Menunjuk tepat satu hal di situs distribusi
Versi
  • Nomor baru ditambahkan setiap kali ada revisi
  • Nomor yang lama tetap tersedia
File source code
  • Program itu sendiri, yang berjalan saat dipanggil
  • Kamu tidak mengubahnya sendiri
Nama package lain yang dibutuhkannya
  • Yang membuat react tidak bisa jalan sendirian terdaftar di sini
  • Semuanya ikut ketika kamu mengambilnya
Kotak luar adalah satu package, yaitu react. Yang kamu sebut saat mengambil adalah nama dan versinya, sedangkan file di dalamnya ikut sekalian.

Yang kamu sebut saat mengambil hanyalah nama di bagian paling atas.

"Nama package lain yang dibutuhkannya" di bagian paling bawah itulah yang nanti menambah jumlah folder.

Package adalah library eksternal yang bisa kamu ambil lewat nama

Package adalah program yang ditulis orang lain, diberi nama, dan dikemas agar bisa dibagikan.

Dengan menyebut namanya, isinya bisa kamu bawa ke komputer kamu, dan versi adalah nomor yang membedakan revisi di dalam nama yang sama.

Apa yang muncul di dalam my-app ketika kamu mengetik npm install react

Yang mengambilnya lewat nama adalah package manager (program yang mengambil package dan menaruhnya di tempat yang sudah ditentukan), dan untuk JavaScript namanya npm.

Keduanya cukup satu baris di terminal, dan keduanya mengandaikan kamu mengetik di dalam my-app.

# Pindah dulu ke folder my-app, baru ketik
cd my-app

# Ambil satu package bernama react
npm install react

# Ambil sekaligus semua nama yang terdaftar di file daftar
npm install

Package yang sudah diambil masuk ke node_modules (folder yang dibuat npm di dalam my-app untuk menampung package yang diambil).

Di dalam my-app: yang kamu tulis dan yang dibuat npm
my-app (folder aplikasi reservasi)
File yang kamu tulis
  • app.js — source code untuk proses reservasi
  • package.json — file berisi daftar nama yang diambil
node_modules (dibuat npm)
react
  • Source code package yang diambil
  • Inilah yang kamu panggil
Package yang dibutuhkan oleh yang kamu ambil
  • Satu folder dibuat untuk setiap nama
  • Kalau tidak membutuhkan apa pun, bagian ini tidak bertambah
Kotak luar adalah folder my-app. Bingkai atas berisi file yang kamu tulis, bingkai bawah adalah folder yang dibuat npm dan diubah npm.

File yang kamu tulis dan folder yang dibuat npm berada terpisah di dalam my-app yang sama.

Meski barisnya sama, hasilnya berubah tergantung cara kamu mengetik dan salah tidaknya nama itu.

Baris yang kamu ketikYang dilakukan npmHasil di dalam my-app
npm install reactMengambil nama itu dan dependensinyaFolder bertambah di node_modules
npm installMengambil sekaligus semua nama di package.jsonnode_modules terbentuk seluruhnya
npm install reacttttMencarinya dan tidak menemukannya404 Not Found, tidak ada yang bertambah

Seperti pada baris ketiga, kalau nama yang salah ketik tidak ada di situs distribusi, tidak ada yang terpasang.

Kalau nama yang salah ketik itu kebetulan ada, yang terpasang justru hal lain, jadi salin nama dari halaman resminya.

Alasan mengambil satu package bisa menambah banyak folder
npm install expressexpressPackage yangdibutuhkan expressPackage yangmereka butuhkanPackage berikutnyalagiPuluhan folderdi node_modules
Alurnya melebar dari atas ke bawah lalu menyatu di akhir. Yang dibutuhkan package yang kamu ambil, dan yang dibutuhkan oleh package itu lagi, ikut datang bersamanya. Untuk package yang tidak membutuhkan apa pun seperti react, foldernya tetap satu.

Package yang dibutuhkan react, dan package yang dibutuhkan oleh package itu lagi, semuanya ikut datang.

Tidak perlu mencari sendiri seluruh rangkaian itu lalu mengambilnya satu per satu, dan itulah alasan memakai package manager.

Mengambil satu package tidak berarti hanya satu folder yang terbentuk di node_modules.

Situs distribusi adalah komputer lain di seberang internet.

Satu-satunya tempat package yang diambil ditaruh adalah node_modules di dalam folder my-app.

app.js yang kamu tulis memanggil package di dalamnya lalu memakainya.

Yang kamu ambil masuk ke node_modules

Yang kamu ambil masuk ke folder node_modules yang terbentuk di dalam my-app.

app.js yang kamu tulis sendiri tidak berubah, dan foldernya lebih banyak daripada jumlah yang kamu sebut karena package yang dibutuhkan oleh package yang kamu ambil ikut datang juga.

package.json — file daftar berisi nama package yang kamu ambil

Isi node_modules dibuat oleh npm, dan kamu tidak mengubahnya sendiri.

Yang kamu kelola hanyalah satu file yang memuat daftar nama yang kamu ambil.

Itulah file daftar (package.json di JavaScript, file yang mencatat nama package yang dibutuhkan aplikasi itu agar bisa berjalan), dan setiap nama yang terdaftar di sana disebut dependensi (dependency, package yang dibutuhkan kode milikmu agar bisa berjalan).

{
  "name": "my-app",
  "dependencies": {
    "react": "^19.0.0",
    "express": "^5.1.0"
  }
}

Dua entri yang terdaftar di bawah dependencies adalah dependensi my-app ini.

Bagian kanan menentukan versi yang diambil, angkanya hanya untuk contoh ini, dan pada praktiknya yang masuk adalah versi saat kamu mengambilnya.

Tanda ^ di depan berarti "versi yang lebih baru dan kompatibel dengan nomor yang tertulis juga diizinkan".

Selain dependensi, package.json juga mencatat hal lain.

Yang terdaftar di dalam package.json
package.json
name
  • Nama aplikasi itu sendiri
  • Isinya my-app
dependencies
  • Memuat nama package yang dibutuhkan agar bisa berjalan
  • npm install membaca bagian ini
  • Mengambil react menambah satu baris
scripts
  • Tempat memberi nama pendek untuk perintah yang sering kamu ketik
  • Dipanggil seperti npm run start
Kotak luar adalah satu file package.json. Yang dibaca npm install adalah bagian dependencies di tengah.

Yang dibaca npm install adalah bagian dependencies di tengah.

Satu hal yang sama bisa punya tiga sebutan, tergantung dari mana kamu melihatnya.

Satu hal yang sama punya sebutan berbeda tergantung dari mana kamu melihatnya
==Situs distribusiPackageDisimpan dengannama dan versiDi package.jsonDependensiTerdaftar sebagaikebutuhan my-appDi app.jsLibrary eksternalProgram yang kamupanggil dan pakai
Sebelah kiri adalah tempat kamu melihat, bagian tengah adalah sebutannya di sana, dan sebelah kanan adalah cara benda itu diperlakukan di sana. Ketiga kotak yang dihubungkan garis ganda adalah hal yang sama.

Karena ada file daftar, kamu tidak perlu menyerahkan node_modules kepada siapa pun.

Yang kamu serahkan ke komputer lainKetika dia mengetik npm installApakah my-app berjalan?
app.js dan package.jsonMengambil semua nama di daftarSemuanya lengkap dan berjalan
Hanya app.jsNama yang harus diambil tidak diketahuiPemanggilannya menimbulkan error
app.js dan node_modulesIsinya sudah ada tanpa mengetiknyaBerjalan, tetapi kamu menyerahkan ratusan folder

Yang kamu serahkan adalah app.js dan package.json, dan orang itu cukup mengetik npm install satu kali.

npm hanya membaca dependencies di package.json, mengambil nama yang terdaftar di sana dari situs distribusi, lalu membangun ulang node_modules.

Tidak perlu menyerahkan node_modules itu sendiri.

Dengan daftar nama saja, isinya bisa dibangun ulang

package.json adalah file yang memuat nama package yang dibutuhkan my-app ini agar bisa berjalan.

npm install membaca file ini lalu mengambil semua namanya sekaligus, jadi node_modules bisa dibangun ulang kapan saja dan tidak pernah perlu diserahkan kepada siapa pun.

Sama saja di Python — pip, requirements.txt, dan virtual environment yang memisahkan tempat package disimpan

Sejauh ini kita melihatnya dengan nama-nama JavaScript.

Di Python namanya berbeda, tetapi yang dilakukan sama saja.

Yang berperan sama di JavaScript dan Python
===JavaScriptnpmpackage.jsonnode_modulesPythonpiprequirements.txtsite-packagesPeranMengambil denganmenyebut namaMenyimpan daftarnama yang diambilTempat packageyang diambil
Baris atas adalah JavaScript, baris tengah adalah nama di Python, dan baris bawah adalah perannya. Dua hal yang dihubungkan garis ganda hanya berbeda nama, sedangkan perannya sama.

Yang mengambil adalah pip, dan file daftar yang memuat namanya adalah requirements.txt.

Karena perannya sama, memahami yang satu membuatmu bisa membaca yang lain dengan cara yang sama.

Satu hal yang berbeda adalah tempat penyimpanannya: tanpa virtual environment, pip memasangnya ke seluruh komputer.

Untuk menghindarinya kamu membuat virtual environment (mekanisme yang membuat sebuah folder khusus untuk menampung package milik aplikasi itu saja).

Tempat package disimpan, terpisah per aplikasi
Komputer kamu
my-app (aplikasi reservasi)
  • node_modules — dependensi masuk ke sini
  • Tidak terlihat dari aplikasi lain
other-app (aplikasi lain)
  • Punya node_modules sendiri
  • Versi berbeda dengan nama yang sama tidak bertabrakan
Aplikasi Python tanpa virtual environment
  • site-packages hanya ada satu untuk seluruh komputer
  • Kalau aplikasi lain meminta versi berbeda, keduanya bertabrakan
Kotak luar adalah komputer kamu. Dua yang di atas menyimpan package-nya di dalam foldernya masing-masing, dan hanya yang paling bawah yang berbagi satu tempat untuk seluruh komputer.

Kalau foldernya terpisah per aplikasi, versi berbeda dengan nama yang sama bisa berdampingan tanpa bertabrakan.

Panduan pemasangan menyuruhmu membuat virtual environment lebih dulu supaya pemisahan itu terbentuk.

Meski bahasanya berbeda, ketiga perannya sama

Setiap bahasa punya program yang mengambil, file daftar yang memuat nama, dan tempat menyimpan apa yang tiba.

Di JavaScript itu adalah npm, package.json, dan node_modules; di Python itu pip dan requirements.txt, dan hanya di Python package-nya masuk ke seluruh komputer kalau kamu tidak membuat virtual environment.

QUIZ

Cek Pemahaman

Jawab setiap pertanyaan satu per satu.

Soal 1Ketika kamu mengetik npm install react di folder my-app, ke mana package yang diambil itu masuk?

Soal 2Ketika menjalankan my-app yang sama di komputer lain, mengapa kamu tidak perlu menyerahkan node_modules?

Soal 3Mengapa mengambil satu package saja bisa membuat lebih dari satu folder di node_modules?