Npm paketinin yerel kurulumu için özel konum nasıl ayarlanır?


177

npm installKomut bayrağı veya ortam değişkeni aracılığıyla için özel bir paket hedefi belirtmek mümkün müdür ?

Varsayılan olarak, npm yerel yüklemeleri node_modulesgeçerli dizinde sonuçlanır , ancak node_modulesörneğin farklı bir dizine yüklenmesini istiyorum vendor/node_modules. Bunu nasıl yapabilirim?


ne başarmaya çalışıyorsun? bu burada tartışıldı: stackoverflow.com/questions/13668097/…
Pascal Belloncle

10
@PascalBelloncle: Paketleri alt dizinlerine yüklemek yerine, npm'nin alt dizinlerine ./node_moduleskurmasını istiyorum ./vendor/node_modules. (Veya bunun yapılandırılamaz olduğu söylenmelidir.)
pje

1
Kutunun dışında mümkün olduğunu düşünmediğim, bunu yapmak istediğini anladım. Artı gerektirir de işe yaramaz. Bu yüzden neden bunu yapmak istediğini soruyordum. Belki istediğini yapmak için alternatif bir çözüm var.
Pascal Belloncle

1
Bir paketi yalnızca ikili için yüklüyorum (yani, yalnızca komut satırında kullanılacak ve asla required) ama küresel olarak yüklemek istemiyorum.
pje

Anlıyorum. Aşağıdaki önerime bakın.
Pascal Belloncle

Yanıtlar:


180

TL; DR

Bunu, --prefixbayrağı ve --global* bayrağını kullanarak yapabilirsiniz .

pje@friendbear:~/foo $ npm install bower -g --prefix ./vendor/node_modules
bower@0.7.0 /Users/pje/foo/vendor/node_modules/bower

* Bu "global" bir kurulum olsa da, yüklü kutuları sürece komut satırından erişilebilir olmayacak ~/foo/vendor/node_modulesbulunmaktadır PATH.

TL, R,

'Nin her yapılandırılabilir özelliği npmaltı farklı yerden herhangi birinde ayarlanabilir. Öncelik sırasına göre:

  • Komut Satırı Bayrakları: --prefix ./vendor/node_modules
  • Ortam Değişkenleri: NPM_CONFIG_PREFIX=./vendor/node_modules
  • Kullanıcı Yapılandırma Dosyası: $HOME/.npmrcveya userconfigparam
  • Global Yapılandırma Dosyası: $PREFIX/etc/npmrcveya userconfigparam
  • Dahili Yapılandırma Dosyası: path/to/npm/itself/npmrc
  • Varsayılan Yapılandırma: node_modules / npmconf / config-defs.js

Varsayılan olarak, yerel olarak yüklenmiş paketler devreye girer ./node_modules. global olanlar prefixconfig değişkenine girilir ( /usr/localvarsayılan olarak).

Kaçabilirsiniz npm config listMevcut yapılandırma görmek ve npm config editbunu değiştirmek için.

PS

Genel olarak, npmdokümantasyonu gerçekten faydalıdır. Klasörler bölüm NPM iyi bir yapısal bakıştır ve yapılandırma bölümü bu soruya cevap verir.


2
Testin olarak, yukarıdaki komutu uygulayın aslında, eğer içine kurulacaktır ./vendor/node_modules/lib/bowerkullanaraknpm#3.8.0
E-bulutunu

2
Bunu yaparken hata alıyorumNo version provided in package.json
FooBar

Sen yaz bins won't be accessible through the command line. Program elbette npm install eslint@3.4.0 -g --prefix c:\my_npm` calling c: \ my_npm \ eslint --fix my.js` yolunu kullanarak çağrılabilir
Bernhard Döbler

13
Package.json dosyası ile benzer bir şey elde etmek mümkün mü? yani npm installpackage.json dosyası ile A dizininde çalıştırırsam , paketler B dizinine kurulacaktır.
Ryan-Neal Mes

1
Bu yöntemi kullanarak tüm bağımlılıkları kurmanın bir yolu var mı? npm installbağımlılıkları yerel olarak yükler. npm install X -g -prefix "..."X modülünü önekine, npm install -g -prefix "..."geçerli paketi önekine kurar.
AnnanFay

28

Bunu config içinde istiyorsanız, npm config'i şu şekilde ayarlayabilirsiniz:

npm config set prefix "$(pwd)/vendor/node_modules"

veya

npm config set prefix "$HOME/vendor/node_modules"

Yapılandırmanızı şununla kontrol edin:

npm config ls -l

Veya @pje'nin dediği gibi --prefixbayrağı kullanın


4
Bunun global öneki oluşturduğuna inanıyorum? Bunu yapmak npm installyerel olarak hala kurulur, ./node_modulesancak npm install -gkurulur "$(pwd)/vendor/node_modules". Bu ayarları unutup sonra unutup, daha sonra geri dönerek küresel paketlerimin neden garip davrandığını merak edebilirim.
AnnanFay

13

OSX için, kullanıcınıza $HOME(muhtemelen / Kullanıcılar / adınız /) gidebilir ve zaten yoksa bir .npmrcdosya (npm'nin kullanıcı yapılandırması için kullandığı bir dosya) oluşturabilir ve npm paketleriniz için bir dizin oluşturabilirsiniz. yüklenecek (ör. / Kullanıcılar / adınız / npm). Bu .npmrc dosyasında, "global" kurulu npm paketlerinin kurulacağı yeni npm dizininiz için "prefix" i ayarlayın; bu "global" paketler açıkçası yalnızca kullanıcı hesabınız tarafından kullanılabilecektir.

.Npmrc olarak:

prefix=${HOME}/npm

Ardından bu komutu komut satırından çalıştırın:

npm config ls -l

Hem kendi yerel yapılandırmanızda hem de global npm yapılandırmasında çıktı vermeli ve yerel önek yapılandırmanızın muhtemelen uzun çıktı listesinin en üstüne yakın bir yerde göründüğünü görmelisiniz.

Güvenlik için, /usr/localbaşka bir yerde önerildiğimi gördüğüm, kullanıcı hesabınızın npm davranışını klasörlerinizi seçerek yapılandırmaya önermenizi öneririm.


9

Örneğin Windows 7'de aşağıdaki komutlar / işlemler kümesi kullanılabilir.

Kişisel ortam değişkeni oluşturun, çift ters eğik çizgi zorunludur:

  • Değişken ismi: %NPM_HOME%
  • Değişken değer: C:\\SomeFolder\\SubFolder\\

Şimdi, yapılandırma değerlerini yeni klasörlere (örnek dosya adları) ayarlayın:

  • Npm klasörünü ayarlama

npm config set prefix "%NPM_HOME%\\npm"

  • Npm-cache klasörünü ayarlama

npm config set cache "%NPM_HOME%\\npm-cache"

  • Npm geçici klasörünü ayarlama

npm config set tmp "%NPM_HOME%\\temp"

İsteğe bağlı olarak, yapılandırma değiştirilmeden önce orijinal klasörlerin içeriğini temizleyebilirsiniz .

  • Npm-cache'yi sil npm cache clear

  • Npm modüllerini listele npm -g ls

  • Npm modüllerini silme npm -g rm name_of_package1 name_of_package2


1
Teşekkürler, adımları takip ediyorum. Ama bu bir dizin olarak adlandırılan c oluşturur: /% NPM_HOME% / npm vb yerine c: / npm_home / npm
Jay

6

Bunu kendim aradıktan sonra paylaşılan bağımlılıkları olan birkaç projenin DRYer olmasını istedikten sonra buldum:

  • Yerel olarak yüklemek, üzerinden kullanmak istediğiniz her şey için Düğüm yoludur require()
  • Global yükleme, yolunuzda istediğiniz ikili dosyalar içindir, ancak üzerinden herhangi bir şey için tasarlanmamıştır. require()
  • Bir önek kullanmak, uygun binve manyollar eklemeniz gerektiği anlamına gelir .$PATH
  • npm link( info ) global kurulum için kaynak olarak yerel bir kurulum kullanmanızı sağlar

→ Düğüm yoluna sadık kalın ve yerel olarak kurun

ref:

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.