Npm kullanarak package.json bağımlılıklarını geçerli dizine nasıl yüklerim


203

Bir web uygulamam var: fooapp . Kökümde bir tane var package.json. Tüm bağımlılıkları belirli bir yere yüklemek istiyorum node_modules directory. Bunu nasıl yaparım?

İstediğim

Diyelim ki iki widgetbağımlılığım var. Böyle bir dizin yapısı ile sonuçlandırmak istiyorum:

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

Ne alırım

koştuğumda bunu npm install fooapp/ alıyorum:

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

npm, node_modules dizinindeki uygulama dizinimin bir kopyasını oluşturur ve paketleri başka bir node_modules dizinine yükler .

Bunun bir paket kurmak için anlamlı olduğunu anlıyorum. Ama require()web uygulamamı başka bir şeyin içinde yapmıyorum , doğrudan çalıştırıyorum. Bağımlılıklarımı belirli bir node_modules dizinine yüklemek için basit bir yol arıyorum.

Yanıtlar:


390

Koşu:

npm install

uygulama dizininde içinden (yani package.json bulunduğu) bağımlılıklarını kuracak için uygulamanıza yerine, bir modül olarak yüklemek burada açıklandığı gibi . Bunlar package.json dosyanıza göre ./node_modules içine yerleştirilecektir (aslında bundan biraz daha karmaşıktır, bu nedenle npm belgelerini buradan kontrol edin ).

Düğümün 'zorunlu' mekanizması bunu anladığından, node_modules dir'ü uygulamanızın üst dizinine taşıyabilirsiniz. Bununla birlikte, uygulamanızın bağımlılıklarını install / update ile güncellemek istiyorsanız, npm, taşınan 'node_modules' öğesini görmeyecek ve bunun yerine package.json'a göre yeni bir dizin oluşturacaktır.

Bunu önlemek için, uygulama dizininizden yeniden konumlandırılan node_modules'e bir sembolik bağlantı oluşturun:

ln -s ../node_modules node_modules

Fantastik! Ben denemek ve eğer çalışırsa bu cevabı kabul edilmiş olarak işaretleyeceğim.
Daniel Beardsley

9
Çalışan bir çözüm olmasına rağmen, npm linkmodülleri başka bir
dizinden

14

Benim durumumda yapmam gerek

sudo npm install  

projem / var / www içinde bu yüzden uygun izinleri de ayarlamam gerekiyor.


15
nudo kurulumu için sudo gerekli olmayabilir.
Allen Koo

2
Kurulu js dosyasını ve bağımlılıkları yürütmesi gereken kullanıcıya bağlı olarak çalıştırabilirsiniz sudo -u [username] npm install. Sadece daha iyi npm installve chowngerçeği sonra node_modules dizin özyinelemeli.
TheLonelyGhost

5
kullanmadığınız sürece spm ile asla npm çalıştırmayın -g.
tkone

1
Cevabınız için teşekkürler, ama neden böyle? açıklayabilir misin? Demek istediğim, -g olmadan kök izinleri ve yükleme bağımlılıkları olan bir klasörü tutmak istediğim veya tutmam gereken bir projem varsa? belki iyi bir neden var, ama sudo npm install (-g olmadan) birkaç kez yaptım ve hiçbir sorun yaşamadım. Şerefe!
aesede

1
@RredCat Bu tür şeyleri yapmanın doğru yolunu kabul ediyorum, ancak bir süre sonra bu tartışmanın Ubuntu'ya taşındığını fark ettim, bazı izinleri ve klasörleri yönetme biçiminde bir sorun var gibi görünüyor, bu da kullanıcıları kullanmaya zorlanıyor sudo npm. Yine, sadece Ubuntu'da.
aesede

0

Sadece yürüt

sudo npm i --save

Bu kadar

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.