Menggunakan npm kita dapat menginstal modul secara global menggunakan -g
opsi. Bagaimana kita bisa melakukan ini di file package.json?
Misalkan, ini adalah dependensi saya dalam file package.json
"dependencies": {
"mongoose": "1.4.0",
"node.io" : "0.3.3",
"jquery" : "1.5.1",
"jsdom" : "0.2.0",
"cron" : "0.1.2"
}
Ketika saya menjalankan npm install
, saya hanya ingin node.io
diinstal secara global, sisanya harus diinstal secara lokal. Apakah ada opsi untuk ini?
"preferGlobal": true
di dalam package.json untuk modul."preferGlobal":true
... saya tidak benar-benar tahu di mana harus meletakkan ini di package.json. npmjs.org/doc/json.html Dokumentasi NPM mengatakan bahwa preferGlobal adalah untuk paket Anda sendiri dan pengaturan itu akan membuatnya menginstal paket Anda sendiri sebagai global. sepertinya lebih dari panduan.Jawaban:
Catatan Baru: Anda mungkin tidak ingin atau perlu melakukan ini. Apa yang Anda mungkin ingin lakukan adalah hanya menempatkan jenis-jenis dependensi perintah untuk build / test dll di
devDependencies
bagian package.json Anda. Setiap kali Anda menggunakan sesuatu dariscripts
dalam package.json perintah devDependencies Anda (dalam node_modules / .bin) bertindak seolah-olah mereka berada di jalur Anda.Sebagai contoh:
Kemudian di package.json:
Kemudian pada command prompt Anda, Anda dapat menjalankan:
Tetapi jika Anda benar - benar ingin menginstal secara global, Anda dapat menambahkan pra-instal di bagian skrip dari package.json:
Jadi sebenarnya instal npm saya mengeksekusi instal npm lagi .. yang aneh tapi sepertinya berfungsi.
Catatan: Anda mungkin memiliki masalah jika Anda menggunakan pengaturan paling umum untuk
npm
tempat paket Node global diinstalsudo
. Salah satu opsi adalah mengubahnpm
konfigurasi Anda jadi ini tidak perlu:npm config set prefix ~/npm
, tambahkan $ HOME / npm / bin ke $ PATH dengan menambahkanexport PATH=$HOME/npm/bin:$PATH
ke~/.bashrc
.sumber
npm i -g underscore-cli
. itu memberi peringatan tentang kesalahan. wd berarti direktori yang berfungsi, saya kira. ketika saya secara manual melakukan ini pada baris perintah maka semuanya berjalan dengan baik, namun saya lebih suka jika pengguna dapat menangani menginstal kode saya dengan sederhananpm install
npm list module -g || npm install module -g
karena npm akan mengembalikan nilai keluar yang tepat."preinstall" : "scripts/preinstall.sh"
).&&
, misalnyanpm install -g bower && npm install -g grunt-cli
Karena kerugian yang dijelaskan di bawah ini, saya akan merekomendasikan mengikuti jawaban yang diterima:
Jawaban asli saya tetapi tidak disarankan berikut.
Alih-alih menggunakan instalasi global, Anda bisa menambahkan paket ke
devDependencies
(--save-dev
) Anda dan kemudian menjalankan biner dari mana saja di dalam proyek Anda:Dalam kasus Anda:
Insinyur ini menyediakan
npm-exec
alias sebagai pintasan. Insinyur ini menggunakan shellscript bernamaenv.sh
. Tapi saya lebih suka menggunakan$(npm bin)
secara langsung, untuk menghindari file atau pengaturan tambahan.Meskipun itu membuat setiap panggilan sedikit lebih besar, itu hanya akan berfungsi , mencegah:
sudo
Kekurangan:
$(npm bin)
tidak akan berfungsi di Windows.npm bin
folder. (Instal npm-run atau npm-yang untuk menemukannya.)Tampaknya solusi yang lebih baik adalah menempatkan tugas-tugas umum (seperti membangun dan mengecilkan) di bagian "skrip" Anda
package.json
, seperti yang diperlihatkan Jason di atas.sumber
.bashrc
untuk dengan mudah menambahkanbin/
direktori untuk AndaPATH
variabel lingkungan:alias nodebin='export PATH=$(npm bin)/:$PATH'
. Jalankannodebin
dan kemudian Anda bisa mengetik perintah Anda seperti biasa.Ini agak tua tapi saya berlari ke persyaratan jadi di sini adalah solusi yang saya buat.
Masalah:
Tim pengembang kami mengelola banyak produk aplikasi web .NET yang kami migrasi ke AngularJS / Bootstrap. VS2010 tidak cocok dengan proses pembuatan kustom dan pengembang saya secara rutin bekerja pada beberapa rilis produk kami. VCS kami adalah Subversion (saya tahu, saya tahu. Saya sedang mencoba untuk pindah ke Git tetapi staf pemasaran saya sangat menuntut) dan solusi VS tunggal akan mencakup beberapa proyek terpisah. Saya membutuhkan staf saya untuk memiliki metode umum untuk menginisialisasi lingkungan pengembangan mereka tanpa harus menginstal paket Node yang sama (tegukan, bower, dll.) Beberapa kali pada mesin yang sama.
TL; DR:
Perlu "npm install" untuk menginstal lingkungan pengembangan Node / Bower global serta semua paket yang diperlukan secara lokal untuk produk .NET.
Paket global harus diinstal hanya jika belum diinstal.
Tautan lokal ke paket global harus dibuat secara otomatis.
Solusinya:
Kami sudah memiliki kerangka pengembangan bersama yang dibagikan oleh semua pengembang dan semua produk, jadi saya membuat skrip NodeJS untuk menginstal paket global bila diperlukan dan membuat tautan lokal. Script berada di ".... \ SharedFiles" relatif terhadap folder basis produk:
Sekarang jika saya ingin memperbarui alat global untuk pengembang kami, saya memperbarui objek "paket" dan memeriksa skrip baru. Pengembang saya memeriksanya dan menjalankannya dengan "node npm-setup.js" atau dengan "npm install" dari salah satu produk yang sedang dikembangkan untuk memperbarui lingkungan global. Semuanya membutuhkan waktu 5 menit.
Selain itu, untuk mengonfigurasi lingkungan untuk pengembang baru, mereka harus terlebih dahulu hanya menginstal NodeJS dan GIT untuk Windows, reboot komputer mereka, periksa folder "File Bersama" dan produk apa pun yang sedang dikembangkan, dan mulai bekerja.
"Package.json" untuk produk .NET memanggil skrip ini sebelum menginstal:
Catatan
Perhatikan referensi skrip memerlukan garis miring maju bahkan di lingkungan Windows.
"npm ls" akan memberikan "npm ERR! extraneous:" pesan untuk semua paket yang terhubung secara lokal karena mereka tidak terdaftar dalam "package.json" "dependensi".
Edit 1/29/16
npm-setup.js
Skrip yang diperbarui di atas telah dimodifikasi sebagai berikut:Paket "versi" di
var packages
sekarang menjadi nilai "paket" yang diteruskan kenpm install
baris perintah. Ini diubah untuk memungkinkan menginstal paket dari tempat lain selain dari repositori terdaftar.Jika paket sudah diinstal tetapi bukan yang diminta, paket yang ada dihapus dan yang benar diinstal.
Untuk alasan yang tidak diketahui, npm akan secara berkala melempar kesalahan EBUSY (-4082) saat melakukan pemasangan atau tautan. Kesalahan ini terjebak dan perintah dijalankan kembali. Kesalahan jarang terjadi untuk kedua kalinya dan sepertinya selalu beres.
sumber
Anda dapat menggunakan file terpisah, seperti
npm_globals.txt
, bukanpackage.json
. File ini akan berisi setiap modul pada baris baru seperti ini,Kemudian di baris perintah jalankan,
Pastikan mereka diinstal dengan benar,
Adapun apakah Anda harus melakukan ini atau tidak, saya pikir itu semua tergantung pada use case. Untuk sebagian besar proyek, ini tidak perlu; dan memiliki proyek Anda
package.json
merangkum alat-alat ini dan dependensi bersama lebih disukai.Tetapi saat ini saya menemukan bahwa saya selalu menginstalcreate-react-app
dan CLI lain secara global ketika saya menggunakan mesin baru. Sangat menyenangkan memiliki cara mudah untuk menginstal alat global dan dependensinya ketika versi tidak terlalu penting.Dan saat ini, saya menggunakan
npx
, pelari paket npm , bukannya menginstal paket secara global.sumber
Semua modul dari package.json diinstal ke ./node_modules/
Saya tidak dapat menemukan ini secara eksplisit tetapi ini adalah referensi package.json untuk NPM .
sumber
Buat skrip Anda sendiri untuk menginstal dependensi global. Tidak butuh banyak. package.json cukup diperluas.
Dengan menggunakan di atas, Anda bahkan dapat membuatnya sejajar, di bawah!
Lihat pra-instal di bawah ini:
Penulis simpul mungkin tidak mengakui package.json adalah file proyek. Tapi itu benar.
sumber