npm
npm atau Node Package Manager adalah manajer paket utama untuk JavaScript. Pusatnya di registry npmjs.com tempat orang berbagi kode yang bisa dipakai ulang. Anda menemukan paket, menginstalnya, dan mengelola versi dependensi tanpa download manual satu per satu. Meski lahir untuk Node.js di server, npm kini menjadi standar untuk frontend juga dan tetap paling populer dibanding Yarn dan pnpm yang tetap memakai paket npm di bawahnya.
Apa yang dipecahkan npm
Cara lama menambah pustaka adalah download file moment.min.js, letakkan di folder proyek, dan tambah tag <script> di HTML sesuai urutan. Itu mudah dipahami, tetapi merepotkan saat update dan rawan salah urutan. npm mengotomasi proses itu lewat command line dan file konfigurasi package.json.
Pasang dan cek
npm ikut terinstal saat Anda memasang Node.js dari nodejs.org. Cek instalasi dengan:
node -v
npm -v
Alur kerja inti
1. Inisialisasi proyek
Masuk ke folder proyek (cd ke path proyek, ls untuk memastikan file), lalu:
npm init
Perintah ini menanyakan nama, versi, deskripsi, author, dan license, lalu membuat package.json. Isi awal berisi field name, version, main, scripts, dan blok kosong untuk dependencies.
2. Pasang paket
Contoh memasang pustaka format tanggal moment:
npm install moment --save
# singkatan: npm i moment
Yang terjadi:
- Kode paket diunduh ke folder
node_modules(misalnyanode_modules/moment/min/moment.min.js). package.jsondiperbarui dengandependencies: { "moment": "^2.22.2" }.package-lock.jsondibuat berisi detail versi pasti dan struktur dependensi.
Contoh kedua dari video: deduplikasi array dengan paket uniq (npm install uniq, lalu uniq([1,1,1,2,3,3,4,5,6,4,7]) menghasilkan [1,2,3,4,5,6,7]).
Untuk berbagi proyek, cukup kirim package.json. Rekan menjalankan npm install tanpa argumen dan npm akan memulihkan seluruh node_modules secara konsisten.
3. Memakai paket di kode
Cara lama: referensikan file di HTML:
<script src="node_modules/moment/min/moment.min.js"></script>
<script src="index.js"></script>
Cara Node: impor langsung di JavaScript:
var moment = require('moment');
console.log(moment().startOf('day').fromNow());
Atau dengan sintaks ES2015 setelah transpiler diatur:
import moment from 'moment';
Mengapa browser butuh bundler
Browser tidak mengenali require dan tidak punya akses file system seperti Node. Menjalankan require('moment') di browser menghasilkan require is not defined. Solusinya adalah module bundler yang dijalankan saat build dan mengganti pernyataan require dengan isi file yang dibutuhkan, lalu menghasilkan satu bundle yang bisa dimuat browser.
- Browserify (2011) mempopulerkan
requiregaya Node di frontend dan membuka jalan npm sebagai manajer paket frontend. - webpack (menjadi dominan sekitar 2015, didorong React) melakukan hal yang sama dengan fitur lebih lengkap.
Contoh dengan Browserify:
npm install -g browserify # atau sebagai devDependency
browserify main.js -o bundle.js
Lalu ganti di index.html:
<script src="bundle.js"></script>
Dan contoh dengan webpack:
npm install webpack webpack-cli --save-dev
./node_modules/.bin/webpack index.js --mode=development
# hasil default: dist/main.js
Konfigurasi webpack.config.js menyederhanakan pemanggilan ini, dan script npm run build atau npm run watch bisa dipakai untuk minifikasi serta rebuild otomatis.
Video freeCodeCamp menekankan poin yang sama: setelah bundle dibuat, halaman menampilkan tanggal terformat dengan rapi, dan setiap perubahan di main.js perlu di-bundle ulang (bisa diotomasi).
npm dalam ekosistem JavaScript modern
Artikel Peter Jang menempatkan npm sebagai langkah pertama dari empat pilar workflow modern:
- Package manager (npm) untuk download dan update paket otomatis.
- Module bundler (webpack/Browserify) untuk gabungkan modul menjadi satu file.
- Transpiler (Babel/TypeScript) untuk tulis fitur JavaScript baru lalu ubah ke ES5 yang kompatibel.
- Task runner (npm scripts, dulu Grunt/Gulp) untuk otomasi build, minify, dan dev server.
Instalasi webpack dan Babel sendiri dilakukan lewat npm sebagai devDependencies:
npm install webpack webpack-cli --save-dev
npm install @babel/core @babel/preset-env babel-loader --save-dev
Lalu webpack.config.js mengatur loader Babel, dan package.json menambahkan script seperti:
{
"scripts": {
"build": "webpack --progress --mode=production",
"watch": "webpack --progress --watch",
"serve": "webpack-dev-server --open"
}
}
Build yang konsisten dan peran package.json
package.json mencatat semua kebutuhan proyek, package-lock.json mengunci versi pasti untuk build yang konsisten di setiap lingkungan. Folder node_modules sengaja tidak dibagikan karena ukurannya besar. Alternatif Yarn muncul akhir 2016 sebagai antarmuka lain di atas registry npm, tetapi npm tetap rujukan utama.
Kapan tidak membuat halaman terpisah
Penyebutan npm di beberapa commit skripsi atau blueprint admin panel cukup sebagai referensi pada halaman ini, tidak perlu halaman baru.
Lihat juga
- JavaScript: bahasa yang di-package oleh npm, termasuk modul dan bundling
- Git: version control yang sering dipakai bersama
package.json - GitHub: hosting repo yang sering memicu
npm installdi CI/CD - Node.js: runtime yang membawa npm secara bawaan
- HTML dan CSS: aset statis yang dimuat bersama bundle JavaScript
Sumber
- Dokumentasi resmi npm: https://docs.npmjs.com/ (landing: About npm, Getting started, Packages and modules, npm CLI)
- Peter Jang - Modern JavaScript Explained For Dinosaurs (2017): https://peterxjang.com/blog/modern-javascript-explained-for-dinosaurs.html - sejarah HTML manual, Bower vs npm, package.json, Browserify dan webpack, Babel, npm scripts
- freeCodeCamp / iEatWebsites - npm Tutorial for Beginners (YouTube, 2018-11-16, 14:34): https://www.youtube.com/watch?v=2V1UUhBJ62Y - demo
npm init,npm i moment,package-lock.json, errorrequire is not defined, bundling dengan Browserify, contohuniq