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?
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?
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.
The npx
utilitas dibundel dengan npm
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 dengan npx
). Misalnya, jika Anda ingin menjalankan yang diinstal secara lokal eslint
, Anda dapat melakukan:
npx eslint .
Ketika digunakan dalam script
bidang package.json Anda, npm
cari node_modules
alat tersebut serta modul yang diinstal secara global, sehingga pemasangan lokal cukup.
Jadi, jika Anda senang (dalam paket Anda. Json):
"devDependencies": {
"gulp": "3.5.2"
}
"scripts": {
"test": "gulp test"
}
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 bahwa gulp
akan diperbarui ketika versi bertemu di package.json, jadi semua orang akan menggunakan versi tegukan yang sama ketika mengembangkan dengan proyek Anda.
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.
./node_modules/.bin/gulp
.
gulp
dan coffee
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 berikut Local 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 :
Alasan ini berhasil adalah karena
gulp
mencoba menjalankan Andagulpfile.js
menggunakan versi yang diinstal secara lokalgulp
, lihat di sini . Karenanya alasan untuk menginstal tegukan global dan lokal.
Pada dasarnya, ketika Anda menginstal gulp
secara lokal skrip tidak ada dalam Anda PATH
sehingga Anda tidak bisa mengetik gulp
dan mengharapkan shell untuk menemukan perintah. Dengan menginstalnya secara global gulp
skrip masuk ke Anda PATH
karena node/bin/
direktori global kemungkinan besar ada di jalur Anda.
Untuk menghormati ketergantungan lokal Anda, gulp
akan menggunakan versi yang Anda instal sendiri untuk menjalankan gulpfile.js
.
gulp
paket Anda yang terinstal secara global diperlukan untuk menjalankannya node_modules/.bin/gulp
. Penyimpanan murah tetapi membuang MB untuk mensimulasikan symlink adalah kecerobohan IMO murni.
Anda dapat menghubungkan tautan yang diinstal gulp
secara global dengan
npm link gulp
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 serta install --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.
Secara teknis Anda tidak perlu menginstalnya secara global jika node_modules
folder di instalasi lokal Anda ada di folder Anda PATH
. Biasanya ini bukan ide yang baik.
Atau jika npm test
referensi gulp
maka Anda cukup mengetik npm test
dan itu akan menjalankan tegukan lokal.
Saya tidak pernah menginstal tegukan global - saya pikir itu bentuk yang buruk.
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.
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):
node_modules/.bin
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.