2 manual tentang tegukan mengatakan bahwa saya harus menginstal tegukan pertama secara global (dengan -g flag) dan kemudian sekali lagi secara lokal. Mengapa saya membutuhkan ini?
javascript
gulp
Stepan Suvorov
sumber
sumber
Jawaban:
Saat memasang alat secara global, itu akan digunakan oleh pengguna sebagai utilitas baris perintah di mana saja, termasuk di luar proyek simpul. Pemasangan global untuk proyek simpul buruk karena membuat penempatan lebih sulit.
npm 5.2+
The
npx
utilitas dibundel dengannpm
5.2
memecahkan masalah ini. Dengan itu Anda dapat memanggil utilitas yang diinstal secara lokal seperti utilitas yang diinstal secara global (tetapi Anda harus memulai perintah dengannpx
). Misalnya, jika Anda ingin menjalankan yang diinstal secara lokaleslint
, Anda dapat melakukan:npm <5.2
Ketika digunakan dalam
script
bidang package.json Anda,npm
carinode_modules
alat tersebut serta modul yang diinstal secara global, sehingga pemasangan lokal cukup.Jadi, jika Anda senang (dalam paket Anda. Json):
dll dan berjalan dengan
npm run test
maka Anda tidak perlu menginstal global sama sekali.Kedua metode ini berguna untuk membuat orang menyiapkan proyek Anda karena
sudo
tidak diperlukan. Ini juga berarti bahwagulp
akan diperbarui ketika versi bertemu di package.json, jadi semua orang akan menggunakan versi tegukan yang sama ketika mengembangkan dengan proyek Anda.Tambahan:
Tampaknya tegukan memiliki beberapa perilaku yang tidak biasa ketika digunakan secara global. Ketika digunakan sebagai instalasi global, tegukan mencari tegukan yang diinstal secara lokal untuk memberikan kontrol. Oleh karena itu instal global tegukan membutuhkan instal lokal untuk bekerja. Namun jawaban di atas masih ada. Pemasangan lokal selalu lebih disukai daripada pemasangan global.
sumber
./node_modules/.bin/gulp
.gulp
dancoffee
perintah tersebut bekerja dari root proyek simpul saya (mis.alias gulp="node_modules/.bin/gulp"
). Dengan cara ini, perintah mudah digunakan jika diperlukan dan konflik versi global / lokal tidak terjadi.gulp
, itu memberi saya pesan kesalahan berikutLocal gulp not found in ...
. Sejauh yang saya mengerti, pertama-tama harus melihat node_modules lokal dan jika tidak ditemukan maka harus melihat ke modul yang terinstal secara global, bukan? Terima kasih!TLDR; Inilah alasannya :
Pada dasarnya, ketika Anda menginstal
gulp
secara lokal skrip tidak ada dalam AndaPATH
sehingga Anda tidak bisa mengetikgulp
dan mengharapkan shell untuk menemukan perintah. Dengan menginstalnya secara globalgulp
skrip masuk ke AndaPATH
karenanode/bin/
direktori global kemungkinan besar ada di jalur Anda.Untuk menghormati ketergantungan lokal Anda,
gulp
akan menggunakan versi yang Anda instal sendiri untuk menjalankangulpfile.js
.sumber
gulp
paket Anda yang terinstal secara global diperlukan untuk menjalankannyanode_modules/.bin/gulp
. Penyimpanan murah tetapi membuang MB untuk mensimulasikan symlink adalah kecerobohan IMO murni.Anda dapat menghubungkan tautan yang diinstal
gulp
secara global dengansumber
npm link
.Pertanyaan " Mengapa kita perlu menginstal tegukan secara global dan lokal? " Dapat dipecah menjadi dua pertanyaan berikut:
Mengapa saya harus menginstal gulp secara lokal jika saya sudah menginstalnya secara global?
Mengapa saya harus menginstal gulp secara global jika saya sudah menginstalnya secara lokal?
Beberapa yang lain telah memberikan jawaban yang sangat baik untuk pertanyaan-pertanyaan tesis ini secara terpisah, tetapi saya pikir akan bermanfaat untuk menggabungkan informasi dalam jawaban yang terpadu.
Mengapa saya harus menginstal gulp secara lokal jika saya sudah menginstalnya secara global?
Alasan untuk menginstal gulp secara lokal terdiri dari beberapa alasan:
Mengapa saya harus menginstal gulp secara global jika saya sudah menginstalnya secara lokal?
Untuk menghindari menginstal secara lokal, Anda dapat menggunakan
npm link [package]
, tetapi perintah tautan sertainstall --global
perintah tersebut tampaknya tidak mendukung--save-dev
opsi yang berarti tampaknya tidak ada cara yang mudah untuk menginstal gulp secara global dan kemudian dengan mudah menambahkan versi apa pun untuk file package.json lokal Anda.Pada akhirnya, saya percaya lebih masuk akal untuk memiliki opsi menggunakan modul global untuk menghindari duplikasi pemasangan alat-alat umum di semua proyek Anda, terutama dalam hal alat pengembangan seperti gerutuan, tegukan, jshint, dll. Sayangnya itu tampaknya Anda akhirnya sedikit memperjuangkan alat ketika Anda melawan arus.
sumber
Secara teknis Anda tidak perlu menginstalnya secara global jika
node_modules
folder di instalasi lokal Anda ada di folder AndaPATH
. Biasanya ini bukan ide yang baik.Atau jika
npm test
referensigulp
maka Anda cukup mengetiknpm test
dan itu akan menjalankan tegukan lokal.Saya tidak pernah menginstal tegukan global - saya pikir itu bentuk yang buruk.
sumber
Saya tidak yakin apakah masalah kami secara langsung terkait dengan menginstal tegukan hanya secara lokal. Tapi kami harus menginstal banyak dependensi sendiri. Ini mengarah ke package.json "besar" dan kami tidak yakin apakah itu benar-benar ide bagus untuk menginstal gulp hanya secara lokal. Kami harus melakukannya karena lingkungan binaan kami. Tetapi saya tidak akan merekomendasikan untuk menginstal gulp tidak secara global jika tidak mutlak diperlukan. Kami menghadapi masalah serupa seperti yang dijelaskan dalam posting blog berikut
Tidak ada masalah yang muncul untuk pengembang kami di mesin lokal mereka karena mereka semua menginstal gulp secara global. Pada sistem build kami memiliki masalah yang dijelaskan. Jika seseorang tertarik, saya bisa menyelam lebih dalam ke masalah ini. Tetapi saat ini saya hanya ingin menyebutkan bahwa itu bukan jalan yang mudah untuk menginstal tegukan hanya secara lokal.
sumber
Hanya karena saya belum melihatnya di sini, jika Anda menggunakan MacOS atau Linux, saya sarankan Anda menambahkan ini ke PATH Anda (di bashrc Anda dll):
Dengan entri jalur relatif ini, jika Anda duduk di folder root dari setiap proyek node, Anda dapat menjalankan alat baris perintah apa pun (eslint, tegukan, dll.) Tanpa khawatir tentang "instalasi global" atau
npm run
dll.Setelah saya melakukan ini, saya tidak pernah menginstal modul secara global.
sumber