Hari ini, di bagian kelima dari terjemahan manual Node.js, kami akan menyelesaikan analisis fitur npm, khususnya, kami akan membahas masalah-masalah seperti mengetahui versi paket npm yang diinstal, menginstal paket versi lama, memperbarui dependensi, penghapusan instalan paket lokal dan global. Di sini kita berbicara tentang npx.

[Kami menyarankan Anda untuk membaca] Bagian lain dari siklus iniBagian 1: 
Informasi Umum dan MemulaiBagian 2: 
JavaScript, V8, beberapa trik pengembanganBagian 3: 
Hosting, REPL, bekerja dengan konsol, modulBagian 4: 
npm, package.json dan file package-lock.jsonBagian 5: 
npm dan npxBagian 6: 
loop acara, tumpukan panggilan, timerBagian 7: 
Pemrograman AsinkronBagian 8: 
Panduan Node.js, Bagian 8: HTTP dan Protokol WebSocketBagian 9: 
Panduan Node.js, bagian 9: bekerja dengan sistem fileBagian 10: 
Panduan Node.js, Bagian 10: Modul Standar, Streaming, Database, NODE_ENVPDF lengkap dari Node.js Guide Mencari tahu versi paket npm yang diinstal
Untuk mengetahui versi semua paket npm yang terinstal di folder proyek, termasuk dependensinya, jalankan perintah berikut:
npm list 
Sebagai hasilnya, misalnya, yang berikut ini dapat terjadi:
 > npm list /Users/flavio/dev/node/cowsay βββ¬ cowsay@1.3.1 βββ get-stdin@5.0.1 βββ¬ optimist@0.6.1 β βββ minimist@0.0.10 β βββ wordwrap@0.0.3 βββ¬ string-width@2.1.1 β βββ is-fullwidth-code-point@2.0.0 β βββ¬ strip-ansi@4.0.0 β  βββ ansi-regex@3.0.0 βββ strip-eof@1.0.0 
Anda dapat menemukan hal yang sama dengan melihat file 
package-lock.json proyek, tetapi struktur pohon yang ditampilkan oleh perintah di atas lebih nyaman untuk dilihat.
Untuk mendapatkan daftar paket serupa yang diinstal secara global, Anda dapat menggunakan perintah berikut:
 npm list -g 
Anda hanya dapat menampilkan informasi tentang paket tingkat atas lokal (yaitu paket yang Anda instal sendiri dan yang terdaftar di 
package.json ) sebagai berikut:
 npm list  
Akibatnya, jika, misalnya, Anda hanya menginstal paket cowsay, yang berikut ini akan ditampilkan:
 > npm list  
Untuk mengetahui versi paket tertentu, gunakan perintah berikut:
 npm list cowsay 
Sebagai hasil penerapannya, kami mendapatkan kira-kira yang berikut:
 > npm list cowsay /Users/flavio/dev/node/cowsay βββ cowsay@1.3.1 
Perintah ini juga cocok untuk mengetahui versi dependensi dari paket yang Anda instal. Dalam hal ini, nama paket dependensi bertindak sebagai nama paket yang diteruskan ke sana, dan output dari perintah akan terlihat seperti ini:
 > npm list minimist /Users/flavio/dev/node/cowsay βββ¬ cowsay@1.3.1 βββ¬ optimist@0.6.1   βββ minimist@0.0.10 
Entri tentang paket dependensi dalam struktur ini akan disorot.
Jika Anda ingin tahu berapa jumlah versi terbaru dari sebuah paket yang tersedia di repositori npm, Anda akan memerlukan perintah dari formulir berikut:
 npm view [package_name] version 
Sebagai tanggapan, ia mengeluarkan nomor versi paket:
 > npm view cowsay version 1.3.1 
Menginstal versi lama paket npm
Menginstal versi lama paket npm mungkin diperlukan untuk menyelesaikan masalah kompatibilitas. Anda dapat menginstal versi paket yang diperlukan dari npm menggunakan konstruksi berikut:
 npm install <package>@<version> 
Dalam hal paket cowsay yang kami gunakan sebagai contoh, perintah 
install cowsay npm 
install cowsay menginstal versi terbarunya (1.3.1 pada saat penulisan ini). Jika Anda perlu menginstal versinya 1.2.0, gunakan perintah ini:
 npm install cowsay@1.2.0 
Anda dapat menentukan versi dengan menginstal paket global:
 npm install -g webpack@4.16.4 
Jika Anda perlu mencari tahu versi paket apa yang tersedia di npm, Anda dapat melakukannya dengan bantuan konstruksi ini:
 npm view <package> versions 
Berikut adalah contoh hasil karyanya:
 > npm view cowsay versions [ '1.0.0', '1.0.1', '1.0.2', '1.0.3', '1.1.0', '1.1.1', '1.1.2', '1.1.3', '1.1.4', '1.1.5', '1.1.6', '1.1.7', '1.1.8', '1.1.9', '1.2.0', '1.2.1', '1.3.0', '1.3.1' ] 
Memperbarui dependensi proyek ke versi terbaru mereka
Ketika Anda menginstal paket dengan perintah dari tipe 
npm install <packagename> , versi terbaru diunduh dari repositori dan ditempatkan di folder 
node_modules . Dalam hal ini, entri yang sesuai ditambahkan ke file 
package.json dan 
package-lock.json terletak di folder proyek.
Selain itu, dengan menginstal paket, npm menemukan dan menginstal dependensinya.
Misalkan kita menginstal paket cowsay yang sudah dikenal dengan menjalankan 
npm install cowsay . Paket akan diinstal di folder 
node_modules proyek, dan entri berikut akan berada di file 
package.json :
 { "dependencies": {   "cowsay": "^1.3.1" } } 
package-lock.json juga akan menyertakan informasi tentang paket ini. Ini adalah bagiannya:
 { "requires": true, "lockfileVersion": 1, "dependencies": {   "cowsay": {     "version": "1.3.1",     "resolved": "https://registry.npmjs.org/cowsay/-/cowsay-1.3.1.tgz",     "integrity": "sha512-3PVFe6FePVtPj1HTeLin9v8WyLl+VmM1l1H/5P+BTTDkMAjufp+0F9eLjzRnOHzVAYeIYFF5po5NjRrgefnRMQ==",     "requires": {       "get-stdin": "^5.0.1",       "optimist": "~0.6.1",       "string-width": "~2.1.1",       "strip-eof": "^1.0.0"     }   } } } 
Dari dua file ini Anda dapat mengetahui bahwa kami menginstal cowsay versi 1.3.1, dan aturan pembaruan paket ditentukan sebagai 
^1.3.1 . Pada bagian keempat dari rangkaian materi ini, kita telah berbicara tentang aturan-aturan versi semantik. Ingatlah bahwa entri ini berarti npm dapat memperbarui paket ketika versi minor dan tambalannya dirilis.
Jika, misalnya, versi minor baru dari sebuah paket keluar dan kami menjalankan perintah 
npm update , maka versi yang terinstal dari paket diperbarui dan informasi tentang paket yang diinstal diperbarui dalam file 
package-lock.json , dan file 
package.json tetap tidak berubah.
Untuk mengetahui apakah versi baru dari paket yang digunakan dalam proyek telah dirilis, Anda dapat menggunakan perintah berikut:
 npm outdated 
Berikut ini adalah hasil dari perintah ini untuk proyek yang ketergantungannya belum diperbarui untuk waktu yang lama:
Analisis ketergantungan proyek yang ditinggalkanBeberapa pembaruan paket yang tersedia adalah rilis utama mereka, pembaruan yang tidak akan terjadi ketika perintah 
npm update dijalankan. Upgrade ke rilis utama oleh tim ini tidak dilakukan, karena mereka (menurut definisi) dapat berisi perubahan besar yang tidak dibedakan dengan kompatibilitas ke belakang dengan rilis utama sebelumnya, dan npm berupaya menyelamatkan pengembang dari masalah yang dapat menyebabkan penggunaan paket-paket tersebut.
Untuk meningkatkan ke versi utama baru dari semua paket yang digunakan, instal secara global paket 
npm-check-updates :
 npm install -g npm-check-updates 
Kemudian jalankan utilitas yang disediakan olehnya:
 ncu -u 
Perintah ini akan memperbarui file 
package.json , membuat perubahan pada instruksi untuk versi paket yang sesuai di bagian 
dependencies dan 
devDependencies . Ini akan memungkinkan npm untuk memperbarui paket yang digunakan dalam proyek ke versi utama baru setelah menjalankan perintah 
npm update .
Jika Anda ingin menginstal versi paket terbaru untuk proyek yang baru saja Anda unduh, yang belum memiliki folder 
node_modules , maka alih- 
npm update , jalankan perintah 
npm install .
Penghapusan paket secara lokal atau global
Untuk menghapus paket yang sebelumnya diinstal secara lokal (menggunakan perintah 
install <package-name> ), jalankan perintah yang terlihat seperti ini:
 npm uninstall <package-name> 
Jika paket diinstal secara global, Anda harus menggunakan flag 
-g (--global ) untuk menghapusnya. Misalnya, perintah serupa mungkin terlihat seperti ini:
 npm uninstall -g webpack 
Saat menjalankan perintah seperti itu, folder saat ini tidak masalah.
Tentang memilih antara instalasi paket global dan lokal
Kapan dan mengapa paket terbaik dipasang secara global? Untuk menjawab pertanyaan ini, mari kita ingat bagaimana perbedaan instalasi paket lokal dan global:
- Paket-paket lokal diinstal di direktori tempat mereka menjalankan perintah dari form npm install <package-name>. Paket-paket tersebut terletak di foldernode_modulesterletak di direktori ini.
- Paket global dipasang di folder khusus (yang tergantung pada pengaturan spesifik sistem Anda), di mana pun mereka menjalankan perintah dari form npm install -g <package-name>.
Menghubungkan paket lokal dan global dalam kode adalah sama:
 require('package-name') 
Jadi apa cara terbaik untuk menginstal paket?
Secara umum, semua paket harus diinstal secara lokal. Karena ini, bahkan jika Anda memiliki lusinan proyek Node.js, Anda dapat memastikan, jika perlu, penggunaan berbagai versi paket yang sama.
Memperbarui paket global mengarah pada kenyataan bahwa semua proyek yang diterapkan akan menggunakan rilis barunya. Sangat mudah untuk memahami bahwa ini, dalam hal dukungan proyek, dapat menyebabkan mimpi buruk nyata, karena rilis baru dari beberapa paket mungkin tidak kompatibel dengan versi lama mereka.
Jika setiap proyek memiliki versi lokal paketnya sendiri, meskipun ini mungkin tampak seperti pemborosan sumber daya, ini adalah biaya yang sangat kecil untuk kesempatan untuk menghindari konsekuensi negatif yang mungkin disebabkan oleh ketidakcocokan paket versi baru yang diperbarui secara terpusat dengan kode proyek.
Paket harus diinstal secara global ketika mereka adalah beberapa utilitas yang dipanggil dari baris perintah yang digunakan di banyak proyek.
Paket seperti itu juga dapat diinstal secara lokal dengan menjalankan utilitas baris perintah yang mereka sediakan menggunakan npx, tetapi beberapa paket masih diinstal dengan lebih baik secara global. Paket-paket seperti yang mungkin Anda kenal termasuk, misalnya, yang berikut:
- npm
- buat-reaksi-aplikasi
- vue-cli
- grunt-cli
- moka
- bereaksi asli-cli
- gatsby-cli
- selamanya
- nodemon
Mungkin saja sistem Anda sudah memiliki paket yang diinstal secara global. Untuk mengetahuinya, gunakan perintah berikut:
 npm list -g --depth 0 
Tentang ketergantungan proyek
Kapan sebaiknya sebuah paket dianggap sebagai ketergantungan rutin proyek yang diperlukan untuk memastikan fungsinya, dan kapan - sebagai ketergantungan pembangunan?
Saat memasang paket menggunakan perintah seperti 
npm install <package-name> itu diinstal sebagai dependensi reguler. Catatan paket semacam itu dibuat di bagian 
dependencies dari file 
package.json (sebelum npm 5, catatan semacam itu dibuat hanya menggunakan flag 
--save , sekarang tidak perlu menggunakannya).
Menggunakan flag 
--save-dev memungkinkan Anda untuk menginstal paket sebagai dependensi pengembangan. Pada saat yang sama, catatan itu dibuat di bagian 
devDependencies dari file 
devDependencies .
Ketergantungan pengembangan adalah paket yang diperlukan dalam proses pengembangan proyek, selama berfungsi normal, mereka tidak diperlukan. Paket tersebut termasuk, misalnya, alat pengujian, Webpack, Babel.
Ketika sebuah proyek dikerahkan menggunakan perintah 
npm install di foldernya, di mana ada folder yang berisi file 
package.json , ini akan mengarah pada instalasi semua dependensi, karena npm mengasumsikan bahwa instalasi seperti itu dilakukan untuk tujuan mengerjakan proyek.
Oleh karena itu, jika paket perlu digunakan dalam produksi, maka, ketika menggunakannya, Anda perlu menggunakan perintah npm 
install --production --production. Berkat flag 
--production , dependensi 
--production tidak akan diinstal.
Utilitas Npx
Sekarang kita akan berbicara tentang satu tim yang sangat kuat, 
npx , yang muncul di npm 5.2. Salah satu kemampuannya adalah menjalankan file yang dapat dieksekusi yang termasuk dalam paket npm. Kami telah mempertimbangkan untuk menggunakan npx untuk menjalankan file serupa dari paket cowsay. Sekarang mari kita bicarakan ini secara lebih rinci.
βGunakan npx untuk menyederhanakan menjalankan perintah lokal
Pengembang Node.js menerbitkan banyak file yang dapat dieksekusi (utilitas) dalam bentuk paket yang seharusnya diinstal secara global, yang menyediakan akses mudah ke kapabilitas mereka, karena Anda dapat menjalankannya dari baris perintah hanya dengan memasukkan nama perintah yang sesuai. Namun, bekerja di lingkungan seperti itu sangat tidak nyaman jika diharuskan menginstal versi berbeda dari paket yang sama.
Menggunakan perintah dari form 
npx commandname secara otomatis mencari file yang diinginkan di folder proyek 
node_modules . Ini menghilangkan kebutuhan untuk mengetahui jalur yang tepat untuk file seperti itu. Ini juga membuat instalasi global paket tidak diperlukan, menyediakan akses ke sana dari mana saja dalam sistem file melalui penggunaan variabel sistem 
PATH .
β Menjalankan utilitas tanpa harus menginstalnya
Npx memiliki fitur menarik lainnya, berkat utilitas yang dapat diluncurkan tanpa menginstalnya terlebih dahulu. Ini berguna terutama karena alasan berikut:
- Tidak diperlukan instalasi utilitas.
- Anda dapat menjalankan berbagai versi dari utilitas yang sama dengan menentukan versi yang diinginkan menggunakan konstruksi versi @version.
Mari kita lihat bagaimana menggunakan mekanisme ini, menggunakan utilitas 
cowsay yang sudah Anda ketahui. Jadi, jika paket cowsay terinstal secara global, mengeksekusi perintah 
cowsay "Hello" pada baris perintah akan menampilkan cow "berbicara" di konsol:
 _______ < Hello > -------       \ ^__^        \ (oo)\_______           (__)\ )\/\               ||----w |               || || 
Jika paket cowsay tidak diinstal secara global, perintah yang sama akan menimbulkan kesalahan.
Utilitas npx memungkinkan Anda untuk menjalankan perintah seperti itu tanpa menginstalnya. Tampaknya, dalam kerangka contoh kita, seperti ini:
 npx cowsay "Hello" 
Perintah seperti itu akan berhasil, tetapi meskipun sapi yang βberbicaraβ, pada umumnya, tidak membawa banyak manfaat, pendekatan yang sama dapat digunakan untuk menjalankan perintah yang jauh lebih berguna. Berikut ini beberapa contohnya:
- Ada alat baris perintah yang dirancang untuk membuat dan menjalankan aplikasi Vue. Menggunakan npx dapat disebut seperti ini: npx vue create my-vue-app.
- Anda dapat menggunakan utilitas create-react-appuntukcreate-react-appBereaksi aplikasi. Panggilannya melalui npx terlihat seperti ini:npx create-react-app my-react-app.
Setelah mengunduh dan menggunakan kode npx yang sesuai, itu akan dihapus.
β Meluncurkan kode JavaScript menggunakan berbagai versi Node.js
Untuk menjalankan beberapa kode menggunakan versi Node.js yang berbeda, Anda dapat, menggunakan npx, mengakses 
node paket npm, yang menunjukkan versinya. Ini terlihat seperti ini:
 npx node@6 -v  
Ini menghilangkan kebutuhan untuk alat-alat seperti nvm atau manajer versi lain dari Node.js.
β Mulai fragmen kode arbitrer yang tersedia di alamat tertentu
Npx memungkinkan Anda untuk menjalankan tidak hanya kode yang diterbitkan dalam npm. Khususnya, jika Anda memiliki tautan ke bagian kode tertentu (katakanlah, intisari yang diterbitkan di 
GitHub ), Anda dapat menjalankannya seperti ini:
 npx https: 
Tentu saja, ketika menjalankan kode seperti itu, Anda tidak boleh lupa tentang keamanan. Npx memberi peluang besar bagi pengembang, tetapi juga berarti tanggung jawab besar.
β Hasil
Hari ini kita berbicara tentang beberapa mekanisme npm yang berguna dan penggunaan npx. Pada titik ini, Anda harus memiliki pemahaman dasar tentang perangkat npm dan cara bekerja dengan manajer paket ini. Jika Anda ingin melihat lebih dalam pada npm, periksa 
halaman dokumentasi proyek dan coba lagi.
Lain kali kita akan membahas beberapa mekanisme Node.js dasar, pemahaman yang diperlukan untuk pengembangan aplikasi yang sukses untuk platform ini.
Pembaca yang budiman! Apakah Anda menggunakan npx?
