Bagaimana cara menginstal dependensi package.json di direktori saat ini menggunakan npm

202

Saya punya aplikasi web: fooapp . Saya punya package.jsondi root. Saya ingin menginstal semua dependensi secara spesifik node_modules directory. Bagaimana saya melakukan ini?

Apa yang saya inginkan

Katakanlah saya memiliki dua widgetdependensi. Saya ingin berakhir dengan struktur direktori seperti ini:

node_modules/
  widgetA
  widgetB
fooapp/
  package.js
  lib
  ..

Apa yang saya dapatkan

ketika saya menjalankan npm install fooapp/ saya mendapatkan ini:

node_modules/
  fooapp/
    node_modules/
      widgetA
      widgetB
    package.js
    lib/
    ..
fooapp/
  package.js
  lib/
  ..

npm membuat salinan direktori aplikasi saya di dir node_modules dan menginstal paket di dalam direktori node_modules lain .

Saya mengerti ini masuk akal untuk menginstal paket. Tetapi saya tidak require()menggunakan aplikasi web saya di dalam sesuatu yang lain, saya menjalankannya secara langsung. Saya mencari cara sederhana untuk menginstal dependensi saya ke direktori node_modules tertentu.

Daniel Beardsley
sumber

Jawaban:

389

Berlari:

npm install

dari dalam direktori aplikasi Anda (yaitu di mana package.json berada) akan menginstal dependensi untuk aplikasi Anda, daripada menginstalnya sebagai modul, seperti dijelaskan di sini . Ini akan ditempatkan di ./node_modules relatif terhadap file package.json Anda (sebenarnya sedikit lebih kompleks dari ini, jadi periksa npm docs di sini ).

Anda bebas untuk memindahkan dir node_modules ke dir induk aplikasi Anda jika Anda mau, karena mekanisme 'wajib' simpul memahami hal ini. Namun, jika Anda ingin memperbarui dependensi aplikasi Anda dengan install / update, npm tidak akan melihat 'node_modules' yang dipindahkan dan sebaliknya akan membuat direktori baru, sekali lagi relatif terhadap package.json.

Untuk mencegah hal ini, cukup buat symlink ke node_modules yang dipindahkan dari dir aplikasi Anda:

ln -s ../node_modules node_modules
ireddick
sumber
Fantastis! Saya akan mencobanya dan menandai jawaban ini sebagai diterima jika berhasil.
Daniel Beardsley
9
Meskipun itu adalah solusi yang berfungsi, saya menemukan npm linklebih nyaman dalam situasi seperti itu di mana Anda perlu mengambil modul dari direktori lain (lihat stackoverflow.com/a/14387210/820520 )
melekes
14

Dalam kasus saya yang perlu saya lakukan

sudo npm install  

proyek saya ada di dalam / var / www jadi saya juga perlu mengatur izin yang tepat.

aesede
sumber
15
sudo mungkin tidak diperlukan untuk instalasi npm.
Allen Koo
2
Bergantung pada pengguna yang perlu mengeksekusi file js dan dependensi yang diinstal, Anda dapat menjalankan sudo -u [username] npm install. Lebih baik hanya npm installdan chowndirektori node_modules secara rekursif setelah fakta.
TheLonelyGhost
5
jangan pernah menjalankan npm dengan sudo kecuali jika Anda menggunakan -g- dan itupun ada cara yang lebih baik untuk mengatasinya.
tkone
1
Terima kasih atas jawaban Anda, tetapi mengapa begitu? dapatkah kamu menjelaskan Maksud saya, bagaimana jika saya memiliki proyek di mana saya ingin atau perlu menyimpan folder dengan izin root dan menginstal dependensi tanpa -g di sana? mungkin ada alasan yang bagus, tetapi saya melakukan sudo npm menginstal (tanpa -g) beberapa kali dan tidak pernah mendapat masalah. Bersulang!
Aesede
1
@RredCat Saya setuju tentang cara yang benar dalam melakukan hal-hal semacam ini, tetapi setelah beberapa saat saya perhatikan bahwa diskusi ini bermigrasi ke Ubuntu, sepertinya ada masalah dalam cara mengelola beberapa izin dan folder, yang memaksa pengguna untuk menggunakan sudo npm. Sekali lagi, hanya di Ubuntu.
Aesede
0

Eksekusi saja

sudo npm i --save

Itu saja

HA
sumber