Manual Node.js, Bagian 5: npm dan npx

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.




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 --depth=0 

Akibatnya, jika, misalnya, Anda hanya menginstal paket cowsay, yang berikut ini akan ditampilkan:

 > npm list --depth=0 /Users/flavio/dev/node/cowsay └── cowsay@1.3.1 

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 ditinggalkan

Beberapa 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 folder node_modules terletak 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-app untuk create-react-app Bereaksi 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 #v6.14.3 npx node@8 -v #v8.11.3 

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://gist.github.com/zkat/4bc19503fe9e9309e2bfaa2c58074d32 

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?

Source: https://habr.com/ru/post/id423705/


All Articles