Panduan untuk npm: Manajer Paket Node.js

Diterbitkan: 2022-03-11

JavaScript 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.

npm mungkin adalah pengelola paket paling populer untuk JavaScript.

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 file package.json (lebih lanjut tentang itu nanti).

  • uninstall : Ini juga penting. Ini digunakan untuk membersihkan paket tertentu dari direktori node_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 dengan adduser , 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 subperintah ls untuk melihat daftar paket yang di-cache secara lokal atau dengan subperintah clean 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 menggunakan set , get atau delete subcommands.

  • dedupe atau ddp : 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 yang outdated untuk memperbarui paket yang sudah ketinggalan zaman.

  • version : Ini memberi Anda singkatan untuk menabrak properti versi package.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, biasanya path/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 dengan cafile , cert dan strict-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 mewarnai stdout yang diizinkan oleh deskriptor file tty. Jika disetel ke false, terminal tetap tumpul. Ketika disetel ke always , itu selalu menghasilkan warna.

  • depth : Pengaturan ini memungkinkan kontrol granular atas apa yang Anda lihat dengan perintah rekursif, seperti ls dan outdated , 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 dengan outdated ; 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 melakukan npm install ) semua dependensi pengembangan dalam file package.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, seperti dedupe atau update .

  • git-tag-version : Ini disetel ke true secara default. Pengaturan ini menandai versi di git saat menjalankan perintah npm 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 file package.json untuk Anda.

  • loglevel : Secara default, ini diatur ke warning , yang memberikan error dan output warn saat menjalankan perintah npm. Pengaturan lainnya termasuk silent , 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; dan silly , 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 perintah npm 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 –save to 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 file package.json .

  • save-optional : Serupa dengan opsi konfigurasi simpan, tambahkan --save-optional saat menginstal sebuah paket, dan kemudian akan ditambahkan ke opsi optionalDependencies dalam file package.json .

  • save-exact : Saat menginstal paket, opsi save , save-dev dan save-optional memodifikasi file package.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 menggunakan save , save-dev atau save-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 adalah v , menentukan apa yang ditambahkan ke versi tag git saat menjalankan npm 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.

npm membaca file package.json untuk manajemen ketergantungan.

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.