Panduan untuk npm: Manajer Paket Node.js
Diterbitkan: 2022-03-11JavaScript adalah bahasa yang paling mudah digunakan dalam hal pengembangan situs web dan aplikasi web. Banyaknya sumber daya sangat mencengangkan, dan terlebih lagi, jumlah perpustakaan yang tersedia.
Pada awalnya, perpustakaan ini sedikit dan mudah dirawat; namun, segera, ketergantungan akan muncul dan solusi yang lebih matang diperlukan.
Masuk ke Node Package Manager (npm) – pengelola paket JavaScript yang paling sering digunakan bersama dengan Node.js, meskipun dapat digunakan secara independen juga. Ini memberi Anda kontrol luar biasa atas dependensi proyek Anda dan menyediakan cara yang bagus untuk berkontribusi pada dunia sumber terbuka.
Anda dapat memulai hanya dengan menjalankan npm install <package name>
dan memasukkannya ke dalam file JavaScript Anda.
Ingin menginstal versi tertentu? Tidak masalah. Jalankan npm install <package name>@1.2.3
.
Ingin menginstal paket secara global (seperti Mocha, atau Angular-CLI)? Cukup tambahkan -g
seperti: npm install -g angular-cli mocha
.
Diakui, sebagian besar kasus penggunaan berhenti pada instalasi npm, dan tidak ada kebutuhan untuk hal lain. Namun, npm memiliki banyak fitur tambahan, yang akan saya jelaskan, menyoroti yang saya anggap penting, sangat berguna, atau sekadar mengagumkan.
perintah CLI
CLI adalah tempat pengguna menghabiskan sebagian besar waktu mereka untuk berinteraksi dengan npm, dan antarmuka bantuannya sangat membantu.
Meminta bantuan ( npm help
) memunculkan seluruh array opsi, dan menjalankan npm help-search <searchText>
memberi Anda daftar hasil pencarian langsung dari penurunan harga npm.
Berikut adalah perintah inti yang menonjol.
install
: Disebutkan di sini karena kebutuhannya saat bekerja dengan npm. Digunakan untuk menginstal paket baru secara lokal atau global (saat menambahkan-g
) atau untuk menginstal dependensi yang tercantum dalam filepackage.json
(lebih lanjut tentang itu nanti).uninstall
: Ini juga penting. Ini digunakan untuk membersihkan paket tertentu dari direktorinode_modules
baik secara lokal maupun global (saat menambahkan-g
).access
: Ini adalah taman bermain administrator izin pengguna npm dalam konteks npm-organisasi dan paket cakupan (pribadi). Hal-hal yang sangat kuat. Digunakan bersama denganadduser
,owner
,team
, dll, ini memberikan kontrol berbutir halus atas siapa yang memiliki akses ke apa.bin
: Di mana paket diinstal? Jalankan perintah ini untuk melihat jalur file absolut.cache
: Jika Anda mulai menginstal paket dari npm kiri, kanan, dan tengah, perintah ini cukup berguna. Panggil dengan subperintahls
untuk melihat daftar paket yang di-cache secara lokal atau dengan subperintahclean
untuk menghapus semua paket yang ada di cache. Kembali ketika registri npm masih agak tidak stabil, ini penting untuk kembali ke lingkungan yang stabil atau untuk mengatur ulang hal-hal ketika Anda tidak mengatur izin npm dengan benar.config
: Kami akan masuk ke opsi konfigurasi yang berbeda nanti, tetapi perintah ini terutama berkaitan dengan properti konfigurasi yang bertahan di file konfigurasi lokal atau global dengan menggunakanset
,get
ataudelete
subcommands.dedupe
atauddp
: Saat mengerjakan proyek dalam jangka waktu yang lama dan menginstal paket langsung dari npm, perintah ini akan menjalankan pohon paket lokal dan mencoba menyederhanakan dependensi.link
: Saat Anda mengembangkan paket npm Anda sendiri, ini memungkinkan Anda untuk membuat symlink ke konteks global sehingga dapat diuji seolah-olah diinstal secara global dari registri npm. Misalnya, jika Anda menulis alat perakitan di simpul yang memiliki CLI yang diinstal secara global, Anda dapat menjalankan perintah ini dan menguji perilaku CLI Anda tanpa perlu menerapkannya terlebih dahulu.ls
: Digunakan untuk memvisualisasikan dependensi paket dan dependensinya, dalam struktur pohon. Ini keren untuk dilihat dan juga berguna untuk perbandingan dengan proyek lain.outdated
: Ini digunakan untuk mengevaluasi status dependensi terinstal saat ini dan apakah dependensi tersebut sudah usang atau tidak. Dalam proyek di mana daftar ketergantungan root panjangnya ratusan baris, pemeriksaan manual pada paket hampir tidak mungkin. Menambahkan-g --depth=0
ke perintah ini memungkinkan Anda juga memeriksa paket yang diinstal secara global.publish
: Perintah ini penting ketika mengembangkan paket Anda sendiri untuk npm. Itu persis seperti namanya; itu menerbitkan paket Anda ke registri npm.search
: Gunakan ini untuk mencari registri untuk semua paket yang berisi teks yang disediakan dalam argumen ketiga.shrinkwrap
: Singkatnya, perintah ini memungkinkan Anda untuk mengunci versi ketergantungan tertentu dalam sebuah paket secara berurutan, sehingga nomor semver (versi semantik) yang santai tidak merusak kode produksi.star
: Apakah Anda benar-benar menyukai paket yang Anda gunakan? Gunakan perintah ini untuk menunjukkan penghargaan Anda langsung dari terminal, yang kemudian tercermin pada halaman paket di registri npm.update
: Ini biasanya mengikuti perintah yangoutdated
untuk memperbarui paket yang sudah ketinggalan zaman.version
: Ini memberi Anda singkatan untuk menabrak properti versipackage.json
, dan melakukan tag git semuanya dalam satu.
Perhatikan bahwa sebagian besar perintah ini dapat mengambil sub-perintah dan/atau konfigurasi, dan daftar ini sama sekali bukan diskusi akhir dari CLI.
npm-config
Konfigurasi adalah bagian utama dari npm, dan ada beberapa cara untuk mengatur variabel konfigurasi.
Konfigurasi melalui CLI dan Variabel Lingkungan
Pertama, konfigurasi dapat diatur melalui CLI dari terminal.
Biasanya akan terlihat seperti ini: npm <command> --<configuration option> [<optional value>]
.
Jika nilainya tidak ditentukan, opsi akan disetel ke true secara default.
Sebagai contoh, katakanlah Anda sedang mengerjakan paket npm cakupan (pribadi), dan Anda memutuskan untuk menerbitkannya sebagai paket publik.
Ini mudah dilakukan dengan menambahkan --access=public
ke perintah publish
Anda. Jika kami tidak menentukan properti menjadi publik, defaultnya akan dibatasi (pribadi).
Konfigurasi yang ditambahkan ke perintah lain seperti ini tidak bertahan di mana-mana, sehingga dapat melelahkan untuk mengatur array konfigurasi melalui CLI.
Dalam kasus tersebut, mungkin lebih baik untuk mengatur konfigurasi menggunakan variabel lingkungan.
Setiap variabel lingkungan yang disetel dengan awalan npm_config_
akan digunakan untuk mengonfigurasi npm.
Misalnya: export npm_config_registry=localhost:4321
akan menyetel opsi konfigurasi registri secara global, dan ketika npm dijalankan, ia akan menggunakan registri npm yang terletak di localhost pada port 4321.
Konfigurasi melalui file npmrc
Anda juga dapat mengatur opsi konfigurasi menggunakan file .npmrc
khusus, yang dapat diatur pada tingkat yang berbeda tergantung pada kebutuhan Anda:
- Tingkat proyek: Di akar kode proyek bersama dengan file
package.json
-nya, biasanyapath/to/project/.npmrc
- Tingkat pengguna: Direktori yang mengonfigurasi akun pengguna tertentu, biasanya
~/.npmrc
- Level global: Direktori tempat npm mencari konfigurasi global, biasanya
$PREFIX/etc/npmrc
- Tingkat bawaan: Berhati-hatilah. Konfigurasi ini tidak hanya global tetapi juga merupakan bagian dari kode sumber npm, dan praktik terbaik merekomendasikan (sebenarnya menuntut) agar kami tidak mengubah kode yang bukan tanggung jawab kami untuk dipelihara. Biasanya dapat ditemukan di
/path/to/npm/npmrc
.
Pengaturan konfigurasi dalam file .npmrc
dapat dimodifikasi dan dipertahankan menggunakan CLI dengan menjalankan perintah dalam format ini: npm config set <key> <value>
.
Misalnya, Anda dapat menjalankan npm config set access public
untuk membuat konfigurasi penerbitan paket scoped (pribadi) tetap publik.
Secara default, perintah ini akan mempertahankan konfigurasi secara lokal (konfigurasi tingkat pengguna seperti yang dijelaskan di atas), tetapi Anda dapat menambahkan -g
untuk mempertahankannya secara global.
Ketika konfigurasi yang bertahan perlu terjadi pada level proyek, atau pada level bawaan, file .npmrc
harus dimodifikasi menggunakan editor teks.
Konfigurasi melalui package.json
Terakhir, konfigurasi dapat diatur dari file package.json
. Namun, ini jarang digunakan (dan hanya boleh digunakan jika diperlukan secara eksplisit), karena file .npmrc
tingkat proyek adalah tempat yang lebih disukai secara konvensional untuk mengatur konfigurasi paket.
Pengaturan Konfigurasi Terkemuka
access
: Seperti dibahas di atas, ini digunakan untuk mengatur izin.always-auth
: Penting untuk dicatat bahwa pengaturan ini default ke false. Jika disetel ke true, npm akan selalu memerlukan autentikasi saat menghubungi registri.ca
: Default ke otoritas sertifikat npm (CA). Itu dapat diubah menjadi nol untuk mengizinkan akses hanya ke pendaftar yang dikenal, atau ke sertifikat CA tertentu untuk hanya memberikan akses ke yang spesifik itu. Pengaturan ini, bersama dengancafile
,cert
danstrict-ssl
, jarang digunakan, tetapi berbicara tentang aspek keamanan dan keandalan npm, memungkinkan ketenangan pikiran mengetahui bahwa paket yang Anda instal berasal dari sumber yang Anda harapkan.color
: Ini default ke true, memberi Anda jeda dari kesuraman standar terminal dengan mewarnaistdout
yang diizinkan oleh deskriptor file tty. Jika disetel ke false, terminal tetap tumpul. Ketika disetel kealways
, itu selalu menghasilkan warna.depth
: Pengaturan ini memungkinkan kontrol granular atas apa yang Anda lihat dengan perintah rekursif, sepertils
danoutdated
, dengan menetapkan seberapa dalam mereka dieksekusi. Nilai 0 hanya akan mengevaluasi tingkat dependensi pertama sedangkan infinity (default) akan menyebabkan semua tingkat dependensi dievaluasi. Pengecualian untuk aturan ini adalah saat menggunakannya denganoutdated
; dalam hal ini, infinity diinterpretasikan sebagai 0 untuk memastikan output yang lebih relevan.dev
: Ini disetel ke false secara default, tetapi ketika disetel ke true (saat melakukannpm install
) semua dependensi pengembangan dalam filepackage.json
akan diinstal bersama dengan dependensi normal.dry-run
: Ketika pengaturan ini disetel ke true, npm tidak akan membuat perubahan apa pun pada paket Anda tetapi sebaliknya akan memberi tahu Anda apa yang akan dilakukan. Ini bisa sangat berguna saat menjalankan perintah tertentu, sepertidedupe
atauupdate
.git-tag-version
: Ini disetel ke true secara default. Pengaturan ini menandai versi di git saat menjalankan perintahnpm version
. Jika Anda menggunakan npm sebagai manajer paket untuk proyek besar yang telah menandai versi di git, ini dapat menghemat waktu Anda, dan ingat untuk memperbarui filepackage.json
untuk Anda.loglevel
: Secara default, ini diatur ke warning , yang memberikan error dan outputwarn
saat menjalankan perintah npm. Pengaturan lainnya termasuksilent
, yang tidak memberikan output;error
, yang hanya mencatat kesalahan ke output;http
, yang hanya mengumumkan kesalahan permintaan http;info
, untuk output yang ingin informatif);verbose
, yang mencatat hampir semuanya; dansilly
, yang, seperti namanya, memberikan jumlah keluaran yang konyol dan kemudian beberapa.production
: Ketika ini disetel ke true, npm bertindak sesuai dan menjalankan semua perintah dalam mode produksi. Ini berarti bahwa pengembangan atau dependensi opsional tidak akan diinstal, juga tidak akan ada tugas terkait pengembangan yang dijalankan.rollback
: Jika disetel ke true, semua pemasangan yang gagal akan dihapus. Ini berguna ketika instalasi dependensi gagal. Bergantung pada level logging Anda, Anda seharusnya dapat melihat instalasi apa yang gagal, mencatatnya, dan menjalankan perintahnpm install
dengan opsi rollback disetel ke true. Kemudian dengan catatan Anda dan instalasi dry-run (seperti yang dijelaskan di atas), Anda kemudian dapat men-debug masalahnya.save
: When installing a package directly from the registry, you can append
–saveto the command which will add the installed package to the dependencies option in the
file. For example,
file. For example,
npm install lodash` akan menambahkan lodash ke dependensi Anda.save-dev
: Mirip dengan opsi simpan konfigurasi, tambahkan--save-dev
saat menginstal sebuah paket, dan kemudian akan ditambahkan ke opsi devDependencies di filepackage.json
.save-optional
: Serupa dengan opsi konfigurasi simpan, tambahkan--save-optional
saat menginstal sebuah paket, dan kemudian akan ditambahkan ke opsi optionalDependencies dalam filepackage.json
.save-exact
: Saat menginstal paket, opsisave
,save-dev
dansave-optional
memodifikasi filepackage.json
dengan memasukkan paket yang diinstal ke properti masing-masing dengan operator rentang semver. Saat menjalankan pengaturan konfigurasi 'save-exact' dengan nilai true, bersama dengan salah satu pengaturan yang disebutkan di atas, nomor versi tertentu digunakan, mengabaikan rentang semver.save-prefix
: Ini mengatur operator jangkauan semver saat menggunakansave
,save-dev
atausave-optional
. Standarnya adalah^
, memungkinkan peningkatan kecil pada paket terjadi saat penginstalan. Ini dapat diatur ke operator rentang semver awalan yang valid.tag-version-prefix
: Default konvensional adalahv
, menentukan apa yang ditambahkan ke versi tag git saat menjalankannpm version
.
Memperbarui npm Menggunakan npm
Anda juga dapat menggunakan npm untuk memperbarui sendiri.
Cukup jalankan npm install -g npm@latest
, dan npm akan diperbarui ke rilis stabil terbaru. Penting untuk dicatat bahwa setiap versi Node.js dikirimkan dengan versi npm tertentu, dan menurut pengalaman saya, Anda tidak boleh terlalu mengacaukan pasangan itu.
Pada akhirnya, rekomendasi saya adalah tetap menggunakan pasangan seperti yang dimaksudkan.
Saat menggunakan npm sebagai alat mandiri, pastikan Anda memahami implikasi penggunaan versi apa pun yang Anda pilih. Ada alat yang hebat untuk mengelola versi Node.js yang berbeda (dan pada gilirannya versi npm) pada sistem yang sama yang disebut nvm.
File package.json
File package.json
adalah elemen penting yang menghubungkan semuanya bersama-sama.
Ini adalah persyaratan untuk menerbitkan paket ke registri npm, dan di situlah bagian manajemen dependensi menjadi hidup.
Ini memiliki dua bidang wajib, yaitu "nama" dan "versi", dan bersama-sama properti ini harus menjadi pengidentifikasi unik.
Bidang nama harus mematuhi aturan tertentu, seperti yang didefinisikan oleh dokumentasi npm tentang penamaan, dan bidang versi tunduk pada spesifikasi semver.
Selain itu, Anda dapat memiliki daftar dependensi sepanjang satu mil, dan menentukan versi spesifik yang akan digunakan untuk masing-masing dependensi, menggunakan versi semver dan operator jangkauan. Berikut daftar properti penting lainnya.
"utama"
“main” mendefinisikan titik masuk ke aplikasi Anda, yang defaultnya adalah index.js
. Bergantung pada konvensi atau kerangka kerja Anda, mungkin app.js
atau main.js
. Anda dapat, tentu saja, membuat apa pun yang Anda inginkan.
"skrip"
Ini adalah properti yang diremehkan.
Pertama, dapat digunakan untuk melakukan hal-hal di prapublikasi.
Kedua, ini menyediakan tempat di mana Anda bisa alias array perintah yang sering digunakan, mulai dari membangun tugas (didefinisikan dalam gulp atau grunt), memicu instalasi dependensi lain (dengan sesuatu seperti bower), memulai server pengembangan dengan webpack, atau menjalankan satu set perintah bash.
"ketergantungan"
Properti ini adalah daftar paket yang dibutuhkan oleh aplikasi Anda, bersama dengan nomor semver yang kompatibel. Ini adalah properti penting karena dapat dimodifikasi dari terminal saat Anda menginstal paket lokal.
Ini dilakukan dengan menambahkan --save
(atau singkatan -S
) di akhir perintah npm install
.
Saat Anda melakukan ini, paket yang baru diinstal akan ditambahkan ke daftar dependensi dalam file package.json
Anda.
Demikian pula ketergantungan juga dapat dihapus dengan menambahkan --save
saat menjalankan perintah npm uninstall
.
Penting untuk mengetahui pola versi semver dari masing-masing dependensi dan apa artinya.
Jika aturan semver terlalu ketat, Anda kehilangan fitur dan peningkatan baru, sedangkan jika aturan semver terlalu longgar, versi paket yang rusak dapat diinstal di sepanjang baris.
Penginstalan paket yang rusak terbukti cukup sulit untuk diselesaikan, terutama ketika versi paket yang diperkecil digunakan.
“devDependencies”
Terpisah dari properti dependensi, properti "devDependencies" memungkinkan Anda untuk menentukan dependensi yang hanya digunakan selama fase pengembangan dan tidak diperlukan untuk pembangunan produksi (seperti ESLint, paket grunt-contrib, dan busur derajat). Sama seperti dependensi, properti ini dapat dimodifikasi dari terminal dengan menambahkan --save-dev
(atau singkatan -D
) di akhir perintah npm install
atau perintah npm uninstall
. Perhatian yang sama berlaku untuk pembuatan versi seperti yang disebutkan di bawah dependensi.
"tempat sampah"
Di sinilah Anda dapat menentukan file yang dapat dieksekusi paket Anda, seperti jalur ke utilitas CLI. Properti ini memberitahu npm untuk membuat symlink lokal atau global ke executable Anda ketika paket Anda diinstal.
"konfigurasi"
Seperti yang telah dibahas sebelumnya, ini adalah tempat Anda menentukan pengaturan konfigurasi melalui file package.json
Anda.
"pribadi"
Jika disetel ke true, npm akan menolak untuk memublikasikan paket.
Ini tidak boleh dikacaukan dengan pengaturan konfigurasi akses.
Ini adalah pengaturan yang berguna ketika Anda memiliki proyek yang menggunakan npm bersama dengan package.json
-nya tetapi tidak dimaksudkan untuk dipublikasikan ke registri npm, baik lingkup atau publik.
Jika niat Anda berubah, cukup ubah pengaturan ke false, dan Anda akan dapat mempublikasikan paket Anda.
Properti Khusus
File package.json
juga menerima properti kustom, selama namanya belum ditentukan atau dicadangkan.
Mengembangkan Paket npm Anda Sendiri
Ekosistem npm dipenuhi dengan paket, yang ditulis oleh ribuan pengembang berbeda di seluruh dunia. Masing-masing memecahkan beberapa jenis masalah, memberikan abstraksi, atau menyajikan implementasi sesuatu.
Kemungkinannya adalah, pada titik tertentu, Anda juga ingin mengembangkan paket Anda sendiri untuk dibagikan.
Pertama, Anda perlu membuat file package.json
dengan properti minimum yang diperlukan "nama" dan "versi", dan kemudian properti "utama" untuk menentukan titik masuk, misalnya index.js.
Tulis kode Anda di file index.js itu, login dengan akun pengguna npm Anda, atau buat pengguna baru dari terminal, dan Anda siap untuk memublikasikannya ke registri npm.
Paket dapat bersifat publik atau pribadi.
Paket publik bebas untuk dipublikasikan dan tersedia untuk digunakan semua orang.
Paket pribadi, yang disebut paket tercakup, hanya dapat dipublikasikan jika Anda membayar pengguna modul pribadi, dan paket tersebut dapat diidentifikasi dengan @username/
yang berbeda yang ditambahkan ke nama paket.
Paket tercakup juga dapat dipublikasikan secara publik dengan memanggil perintah publish
dengan --access=public
.
Selanjutnya, jika Anda menghabiskan lebih banyak waktu untuk memperluas dan meningkatkan basis kode paket Anda, dan sekarang saatnya untuk menerbitkan versi baru, Anda cukup mengubah versi (sesuai aturan dan konvensi semver) paket di package.json
file dan ketik npm publish
.
Anda juga dapat menggunakan antarmuka baris perintah dan memanggil npm version <update_type>
, di mana update_type adalah patch
, minor
, atau major
, seperti yang dijelaskan oleh semver, dan ini kemudian secara otomatis menambah nomor versi dalam file package.json
.
Organisasi npm
Sekali lagi, dokumentasi npm untuk ini sangat bagus, dan akan sia-sia jika hanya mengulangi kata-kata mereka.
Apa yang dapat dikatakan tentang organisasi dalam konteks npm adalah bahwa itu sangat halus, dan ketika dikelola dengan benar, tim dan individu besar, bekerja pada paket cakupan atau publik di bawah satu nama, dapat dikelola dan dibatasi dengan sangat baik.
Meskipun rumit untuk dikuasai, ini sangat bermanfaat.
Kekuatan npm
Pada akhirnya dokumentasi yang disediakan npm sangat luas dan harus dikonsultasikan secara spesifik, tetapi artikel ini memberikan gambaran umum yang berguna tentang fungsionalitas dasar dan lebih lanjut, yang terlibat, menyampaikan kehebatan npm.
Seperti halnya semua hal, pendapat yang kuat ada dan banyak kesalahan dapat ditemukan. Tetapi jika Anda belum pernah mencoba npm (atau node, dalam hal ini), selami, dan jelajahi sendiri. Kemungkinan Anda akan menikmatinya lebih dari yang Anda pikirkan.
Untuk artikel menarik lainnya tentang npm, pertimbangkan untuk membaca Menggunakan Scala.js dengan npm dan Browserify.