Npm eş bağımlılıkları otomatik olarak nasıl kurulur?


274

Örneğin, Angular2'yi yüklediğimde:

npm install --save angular2
temp@1.0.0 /Users/doug/Projects/dougludlow/temp
├── angular2@2.0.0-beta.3 
├── UNMET PEER DEPENDENCY es6-promise@^3.0.2
├── UNMET PEER DEPENDENCY es6-shim@^0.33.3
├── UNMET PEER DEPENDENCY reflect-metadata@0.1.2
├── UNMET PEER DEPENDENCY rxjs@5.0.0-beta.0
└── UNMET PEER DEPENDENCY zone.js@0.5.11

npm WARN angular2@2.0.0-beta.3 requires a peer of es6-promise@^3.0.2 but none was installed.
npm WARN angular2@2.0.0-beta.3 requires a peer of es6-shim@^0.33.3 but none was installed.
npm WARN angular2@2.0.0-beta.3 requires a peer of reflect-metadata@0.1.2 but none was installed.
npm WARN angular2@2.0.0-beta.3 requires a peer of rxjs@5.0.0-beta.0 but none was installed.
npm WARN angular2@2.0.0-beta.3 requires a peer of zone.js@0.5.11 but none was installed.

Akran bağımlılıklarını da yükleyecek npm'e iletebileceğim sihirli bir bayrak var mı? Bir tane bulamadım ... Eş bağımlılıklarını elle kopyalayıp yapıştırmak ve doğru sürümlere sahip olduğumdan emin olmak sıkıcı.

Başka bir deyişle, yapmak istemem:

npm install --save angular2@2.0.0-beta.3 es6-promise@^3.0.2 es6-shim@^0.33.3 reflect-metadata@0.1.2 rxjs@5.0.0-beta.0 zone.js@0.5.11

Daha iyi yol nedir?


Bu sorunu zaten çözdün mü? Açısal2'yi yüklerken aynı sorunu yaşıyorum. Es6-promise -g bayrağı ile manuel olarak kurulduktan ve npm install -g angular2'yi yeniden denedikten sonra bile aynı met / 5 eser bağımlılık hatası es6-promise, es6-shim, yansıtma-meta veri, rxjs ve zone.js'yi alıyorum
nttakr

4
@nttakr - evet, akran bağımlılıkları olarak tam istediği sürümleri yüklemek uyarıyı ortadan kaldırır. Bunları global olarak yüklemek istemezsiniz (-g bayrağıyla). Onları yerel olarak yüklemek istiyorsunuz (-S bayrağı), ama dediğim gibi, tam sürümleri olmalılar (yani: angular2@2.0.0-beta.3gerektirir es6-promise@^3.0.2). Ancak, eş bağımlılıklarını otomatik olarak yükleyen bir komut / bayrak olup olmadığını bilmek istiyorum.
Douglas Ludlow

Hangi NPM sürümünü kullanıyorsunuz?
peteb

@peteb: npm -v=>3.5.3
Douglas Ludlow

Aynı sorunu var ve çözüm verimi bulamadım ....
youngwind

Yanıtlar:


178

Eş bağımlılıklarının otomatik kurulumu, npm 3 ile açıkça kaldırıldı, çünkü çözmeye çalıştığından daha fazla soruna neden oldu. Örneğin burada okuyabilirsiniz:

Yani hayır, verilen nedenlerden dolayı, npm 3 ile otomatik olarak kuramazsınız.


4
Evet, şunu gördüm: github.com/npm/npm/issues/6565 ... Sadece isteğe bağlı olarak onları bir bayrak veya başka bir şeyle kurabileceğinizi umuyordum. Sanırım bir konu açmam gerekecek.
Douglas Ludlow

157
Bu tür bir problemle nasıl başa çıkıyorsunuz? Ben bir npm uzman değilim bu yüzden "x y bir eş gerektirir ama hiçbiri bulunamadı" okuduğumda, kendime, "hangi eş?" ve "her şeyin nasıl tekrar çalışmasını nasıl sağlayabilirim?" Bir süreç var mı? Neyin eksik olduğunu bulana kadar x ve y kodunu giriyor musunuz? Neyin eksik olduğunu öğrendikten sonra, ne yapacaksınız? Teşekkürler!
Dan Cancro

81
Ah, bu bir İngilizce problemi: "x, bir eş gerektirir, ancak hiçbiri kurulmadı" olmalı "x, eş gerektirir, y, ancak y kurulmadı". Bunu "x, y'nin akranlarından birini gerektirir, ancak bu akran kurulmamış ve size hangi akranlardan hangisine ihtiyacınız olduğunu söylemiyoruz" diye anladım.
Dan Cancro

1
Ayrıca listelenen eş bağımlılıkları manuel olarak yüklersem, onları extraneouspaket olarak alırım
plsnoban 24:16

3
"Dışsal" vardır çünkü bunları paket bağımlılıklarına eklemeniz gerekir.
Dinoboff

37

Ben tam değerleri uyarıları hakkında package.json yeniden yazarak çözüldü:

npm WARN angular2@2.0.0-beta.3 requires a peer of es6-shim@^0.33.3 but none was installed.

package.json: "es6-shim": "^ 0.33.3",

npm WARN angular2@2.0.0-beta.3 requires a peer of reflect-metadata@0.1.2

package.json: "yansıtma meta verileri": "0.1.2",

Delete node_modules directory

npm install

15
Belki bir npm cache clean, npm installnode_modules silmekten daha iyi olabilir? Her zaman node_modules silmekten kaçının, sorunun dizini uçurmak yerine ne olduğunu öğrenmek istiyorum.
Bruno

Bunun insanların işe yaraması için çok güvenli bir fikir olduğunu düşünmüyorum. Çatışmalarını kötüleştirmede daha yüksek değişiklikleri var: kütüphanesine uymayan koda sahip olma.
zoomlar

Npm temiz önbellek çalıştırmaya çalışırken aşağıdaki hata mesajını aldım: npm ERR! Npm @ 5 itibarıyla, npm önbelleği yolsuzluk sorunlarından kendi kendini iyileştirir ve önbellekten çıkarılan verilerin geçerli olduğu garanti edilir. Her şeyin tutarlı olduğundan emin olmak istiyorsanız, bunun yerine 'npm önbellek doğrulamasını' kullanın. Öte yandan, yükleyici ile ilgili bir sorunu npm install --cache /tmp/empty-cacheayıklarsanız, gerçek olanı nükle etmek yerine geçici bir önbellek kullanabilirsiniz. npm ERR! npm ERR! Önbelleğin tamamını silmek istediğinizden eminseniz, --force ile bu komutu yeniden çalıştırın.
Tarun

22

Hile kodu bu senaryoda ve diğer bazı yardımcı ...

├── UNMET PEER BAĞIMLILIĞI @ açısal / ortak @ 4.0.2

├── UNMET PEER DEPENDENCY @ açısal / derleyici @ 4.0.2

├── UNMET PEER BAĞIMLILIĞI @ açısal / derleyici-cli @ 4.0.2

├── UNMET PEER BAĞIMLILIĞI @ açısal / çekirdek @ 4.0.2

├── UNMET PEER BAĞIMLILIĞI @ açısal / formlar @ 4.0.2

├── UNMET AKAN BAĞIMLILIĞI @ açısal / http @ 4.0.2

├── UNMET PEER DEPENDENCY @ açısal / platform tarayıcı @ 4.0.2

├── UNMET PEER BAĞIMLILIĞI @ açısal / platform-tarayıcı-dinamik @ 4.0.2>

  1. hatayı kopyalayıp kod düzenleyicinize yapıştırın .
  2. İmleçinizle istenmeyen bir bölümü vurgulayın . Bu durumda '├── UNMET AKAN BAĞIMLILIĞI'
  3. Komut + d tuşlarına birkaç kez basın.
  4. Delete tuşuna iki kez basın . (Yanlışlıkla 'MET EŞEMSİZ BAĞIMSIZLIK' seçeneğini vurguladıysanız boşluk tuşuna basın.)
  5. Bir kez basın. 'Npm install' ekle
  6. Bir kez basın. Ekle --save
  7. Eşyalarınızı tekrar klibe kopyalayın ve çalıştırın

npm install @ angular / common @ 4.0.2 @ angular / derleyici @ 4.0.2 @ angular / derleyici-cli @ 4.0.2 @ açısal / çekirdek @ 4.0.2 @ açısal / formlar @ 4.0.2 @ açısal / http @ 4.0 .2 @ açısal / platform-tarayıcı @ 4.0.2 @ açısal / platform-tarayıcı-dinamik @ 4.0.2 - kaydet


8
Seçenek --savenpm 5.0.0 itibarıyla artık gerekli değildir: stackoverflow.com/a/19578808/12484
Jon Schneider

12

Proje npm-install-peers, eşleri tespit edecek ve kuracaktır.

Aslında v1.0.1, package.jsonotomatik olarak geri yazmayı desteklemiyor , bu da burada ihtiyacımızı çözecek.

Lütfen uçuş sırasındaki sorununuzu destekleyin: https://github.com/spatie/npm-install-peers/issues/4


36
Koşarken bana bu mesajı verdi. This package doesn't seem to have any peerDependencies
Thabung

2
Bende aynı mesaj var.
Thibault Boursier

7
Anladığım kadarıyla, kayıtlı olarak npm-install-peersyüklenecek . Gibi bağımlılıkları yüklemez . peerDependenciespackage.jsonpeerDependenciesangular2
drizzd

Evet, ikinci @drizzd yorumuna: npm-install-peersyalnızca "peerDependencies"projenizin paketinde listelenenleri yüklemek için tasarlanmıştır. Json . "peerDependencies"Listelenen node_modules/<package>/package.jsondosyaları doğrudan eş bağımlılıklarınıza değil, her birinize yüklemeye çalışıyorsunuz .
Will Farley

5

Ben bir npm paketi geliştirirken bu hataları yaşadım peerDependencies. Herhangi biri peerDependenciesolarak da listelenmesini sağlamak zorunda kaldı devDependencies. Proje, genel olarak yüklenen paketleri otomatik olarak kullanmaz.


Bu basit bir çözümdür, çünkü 'bağımlılıklara' eklemek biraz sakar!
Ashot

0

İpliği takın ve çalıştırın

küresel iplik eklemek install-peerdeps


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.