Package.json içinde node_modules yolunu belirtin


96

Bir uygulamada node_modules dizinini, bower'ın bowerrc dosyasıyla yaptığı gibi / vendor / node_modules diyelim ki taşımanın bir yolu var mı? Package.json içinde belirtilebileceğini düşündüm ama bir çözüm bulamıyorum. Yardımınız çok takdir ediliyor.



@blunderboy bağlantı için teşekkürler. Bunu yapmanın daha kolay bir yolu olmaması delilik. Oh iyi.
sturoid

26
Sorunuza cevap vermeyen bir cevabı neden kabul ettiğinizden emin değilim. Sen yolunu nasıl ayarlanacağı sormak node_modules içindepackage.json ve xShirase cevabı basitçe bunu yapmak için bir yol sağlamaz.
Mark Amery

4
Muhtemelen cevabı kabul etti çünkü bu çok açık bir XY problemi ve alternatif bir çözüm "üzgünüm, bu mümkün değil" den daha iyi.
Jake Holzinger

Yanıtlar:


58

evet yapabilirsiniz, sadece NODE_PATH env değişkenini ayarlayın:

export NODE_PATH='yourdir'/node_modules

Dokümana göre:

NODE_PATH ortam değişkeni, iki nokta üst üste ile ayrılmış mutlak yollar listesine ayarlanmışsa, düğüm, başka bir yerde bulunmazlarsa, modüller için bu yolları arayacaktır. (Not: Windows'ta NODE_PATH, iki nokta üst üste yerine noktalı virgülle sınırlandırılmıştır.)

Ek olarak, düğüm aşağıdaki konumlarda arama yapacaktır:

1: $ HOME / .node_modules

2: $ HOME / .node_libraries

3: $ PREFIX / lib / düğüm

$ HOME, kullanıcının ev dizini ve $ PREFIX, düğümün yapılandırılmış node_prefixidir.

Bunlar çoğunlukla tarihi nedenlerle. Bağımlılıklarınızı yerel olarak node_modules klasörlerine yerleştirmeniz şiddetle tavsiye edilir. Daha hızlı ve daha güvenilir bir şekilde yüklenecekler.

Kaynak


1
Bu harika. Öyleyse, oluşturduğum her uygulama için yerel node_modules'in olduğu durumumda, bu dışa aktarımı projedeki bir js dosyasına mı yapmalıyım?
sturoid

3
hayır, bu bir ortam değişkeni, sistem düzeyinde kuruluyor. Yani terminalinize yazmanız gerekiyor. env değişkenlerine bir düğüm uygulaması içinden erişilirprocess.env
xShirase

Hmmm kulağa hoş geliyor. Biraz daha incelemem gerekecek. Yardım için teşekkürler.
2014

112
Bunun gerçekten sorunun cevabı olduğunu sanmıyorum: package.json içinde LOCAL (uygulama seviyesi) npm-Packages için bir yol koymak için bir özellik istiyordu. Bu cevap ona GLOBALLY (-g) kurulu paketleri başka bir klasöre nasıl taşıyabileceğini söyler.
David Losert

2
@IsmailIqbal Üzgünüm az önce yorumunuzu gördüm. NPM dünyasında iki yıl geçti ve önbelleğe alma, iplik ve hatta npm5, web paketi ile epey bir sıçrama yaptık ... Bu günlerde node_module işlemenin çok daha iyi olduğunu söyleyebilirim. Sizin durumda, tüm konumlarda basitçe bir "npm kurulumu" yapardım - npm önceden yüklenmiş paketleri önbelleğe aldığından, ek yük olmadan manuel olarak kopyalamakla aynıdır.
David Losert

28

Kısaca: Mümkün değil ve hiçbir zaman desteklenmeyecek gibi görünüyor (buraya bakın https://github.com/npm/npm/issues/775 ).

CLI veya ENV-Değişkenlerini (şu anda seçili olan cevaba bakın), .npmrc-Config-Files veya npm link- hepsinin ortak noktaları olan bazı karmaşık çalışma alanları vardır : Bunlar hiçbir zaman sadece projeye özel değildir, ancak her zaman bir tür arasında globalSolutions.

Benim için bu çözümlerin hiçbiri gerçekten temiz değil çünkü projenize katkıda bulunanların her zaman bazı özel yapılandırma oluşturmaları veya bazı özel bilgilere sahip olmaları gerekiyor - öyle yapamıyorlar npm installve işe yarıyor.

Yani: Ya package.json'unuzu node_modüllerinizin kurulmasını istediğiniz aynı dizine koymanız gerekecek ya da her zaman projenizin kök dizininde olacakları gerçeğiyle yaşayacaksınız.


16
"Eğer" node_modules "i farklı hecelemek istiyorsanız, üzgünüm, yapamazsınız. Bu düğüm çekirdeğinde yerleşiktir. Bunu değiştirmek, tamamen farklı bir paket yöneticisi oluşturmakla aynı şeydir." <== değişkenleri kullanarak iyi iş çıkardın sanırım.
stevedbrown

2019'dan bir yorum: İplik, modüller dizinini geçersiz kılan destekler gibi görünüyor. Sanırım iplik yeni bir ambalaj yöneticisi.
Vanuan

10

İplik bu özelliği destekler:

# .yarnrc file in project root
--modules-folder /node_modules

Ancak deneyiminiz hangi paketleri kullandığınıza bağlı olarak değişebilir. O tavşan deliğine girmek isteyeceğinden emin değilim.


6

Aklınızdan geçenlerin bu olup olmadığından emin değilim, ancak bu soruyu aklımda tuttum çünkü node_modulessembolik bağlantıları desteklemeyen bir dosya sistemine (bir VM "paylaşılan" klasörüne monte edildiği için proje dizimin içine yükleyemedim) ).

Aşağıdaki geçici çözümü buldum:

  1. Kopya package.jsonfarklı bir dosya sisteminde geçici bir klasöre dosya
  2. npm installOraya koş
  3. Ortaya çıkan node_modulesdizini, cp -r --dereferencesembolik bağlantıları kopyalara genişletmek için kullanarak proje dizinine geri kopyalayın.

Umarım bu node_modules, farklı bir dosya sistemine geçmenin bir yolunu ararken, bu soruyla sonuçlanan başka birine yardımcı olur .

Diğer seçenekler

@Charminbear'ın bağlantılı olduğu github sorununda bulduğum başka bir geçici çözüm var , ancak bu, https://github.com/browserify/resolve/issues/136 uyarınca gruntdesteklemediği için işe yaramıyor :NODE_PATH

/media/sf_sharedsembolik bağlara sahip olduğunuzu ve oraya kuramayacağınızı söyleyelim, bu da, /media/sf_shared/myprojectbazı modüller sembolik bağlar kullandığı için aslında npm kurulumunu yapamayacağınız anlamına gelir .

  • $ mkdir /home/dan/myproject && cd /home/dan/myproject
  • $ ln -s /media/sf_shared/myproject/package.json (bu yönde sembolik bağ kurabilirsiniz, sadece / media / sf_shared içinde bir tane oluşturamazsınız)
  • $ npm install
  • $ cd /media/sf_shared/myproject
  • $ NODE_PATH=/home/dan/myproject/node_modules node index.js
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.