Làm thế nào để cài đặt phụ thuộc npm ngang hàng tự động?


274

Ví dụ: khi tôi cài đặt Angular2:

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.

Có một lá cờ ma thuật nào mà tôi có thể chuyển đến npm cũng sẽ cài đặt các phụ thuộc ngang hàng không? Tôi đã không thể tìm thấy một ... Thật tẻ nhạt khi sao chép và dán thủ công các phụ thuộc ngang hàng và đảm bảo tôi có các phiên bản chính xác.

Nói cách khác, tôi không cần phải làm:

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

Cách tốt hơn là gì?


Bạn đã giải quyết vấn đề đó chưa? Tôi có cùng một vấn đề cài đặt angular2. Ngay cả sau khi cài đặt thủ công es6-hứa với cờ -g và thử lại npm cài đặt -g angular2, tôi vẫn nhận được cùng một Lỗi / Cảnh báo về 5 phụ thuộc ngang hàng không đối xứng es6-hứa, es6-shim, phản ánh siêu dữ liệu, rxjs và area.js
nttakr

4
@nttakr - có, cài đặt các phiên bản chính xác mà nó muốn khi phụ thuộc ngang hàng thoát khỏi cảnh báo. Bạn không muốn cài đặt chúng trên toàn cầu (với cờ -g). Bạn muốn cài đặt chúng cục bộ (cờ -S), nhưng như tôi đã nói, chúng cần phải là phiên bản chính xác (nghĩa là: angular2@2.0.0-beta.3yêu cầu es6-promise@^3.0.2). Tuy nhiên, tôi muốn biết nếu có một lệnh / cờ tự động cài đặt các phụ thuộc ngang hàng.
Douglas Ludlow

@DoumundLudlow bạn đang sử dụng phiên bản NPM nào?
peteb

@peteb: npm -v=>3.5.3
Douglas Ludlow

Tôi có cùng một vấn đề, và tôi không tìm thấy năng suất giải pháp ....
youngwind

Câu trả lời:


178

Việc cài đặt tự động các phụ thuộc ngang hàng đã được gỡ bỏ rõ ràng với npm 3, vì nó gây ra nhiều vấn đề hơn nó đã cố gắng giải quyết. Bạn có thể đọc về nó ở đây chẳng hạn:

Vì vậy, không, vì những lý do được đưa ra, bạn không thể cài đặt chúng tự động với npm 3 trở lên.


4
Vâng, tôi đã thấy điều này: github.com/npm/npm/issues/6565 ... Tôi chỉ hy vọng rằng bạn vẫn có thể tùy chọn cài đặt chúng với một lá cờ hoặc một cái gì đó. Đoán tôi sẽ phải mở một vấn đề hoặc một cái gì đó.
Douglas Ludlow

155
Làm thế nào để bạn đối phó với loại vấn đề này? Tôi không phải là chuyên gia về npm nên khi tôi đọc "x yêu cầu một đồng nghiệp của y nhưng không tìm thấy ai", tôi tự hỏi mình, "đồng đẳng nào?" và "làm thế nào tôi có thể làm cho mọi thứ hoạt động trở lại?" Có một quá trình? Bạn có đào sâu vào mã của x và y cho đến khi bạn phát hiện ra những gì còn thiếu không? Một khi bạn tìm ra những gì còn thiếu, bạn sẽ làm gì tiếp theo? Cảm ơn!
Dan Cancro

81
À, đó là một vấn đề tiếng Anh: "x yêu cầu ngang hàng của y nhưng không được cài đặt" nên "x yêu cầu ngang hàng, y, nhưng y chưa được cài đặt". Tôi hiểu nó là "x yêu cầu một trong những đồng nghiệp của bạn nhưng đồng nghiệp đó chưa được cài đặt và chúng tôi sẽ không cho bạn biết bạn cần đồng nghiệp nào".
Dan Cancro

1
Ngoài ra nếu tôi cài đặt thủ công các phụ thuộc ngang hàng được liệt kê, tôi sẽ nhận chúng dưới dạng extraneouscác gói
xin vui lòng

3
Có "ngoại lai" bởi vì bạn cần thêm chúng vào gói phụ thuộc của bạn.
Dinoboff

37

Tôi đã giải quyết nó bằng cách viết lại gói.json với các cảnh báo giá trị chính xác là về:

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

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

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

pack.json: "phản ánh siêu dữ liệu": "0.1.2",

Delete node_modules directory

npm install

15
Có lẽ một npm cache clean, npm installcó thể tốt hơn so với việc xóa node_modules? Tôi luôn kiềm chế việc xóa node_modules, tôi muốn tìm hiểu vấn đề là gì hơn là thổi bay thư mục.
Bruno

Tôi không nghĩ rằng đây là một ý tưởng rất an toàn cho mọi người để làm cho nó hoạt động. Họ có những thay đổi cao hơn làm xấu đi xung đột của họ: có mã không khớp với thư viện của nó.
zoomlar

Có lỗi sau đây trong khi cố gắng chạy bộ nhớ cache npm: npm ERR! Kể từ npm @ 5, bộ đệm npm tự chữa lành khỏi các vấn đề tham nhũng và dữ liệu trích xuất từ ​​bộ đệm được đảm bảo là hợp lệ. Nếu bạn muốn đảm bảo mọi thứ đều nhất quán, thay vào đó hãy sử dụng 'npm cache verify'. Mặt khác, nếu bạn gỡ lỗi một vấn đề với trình cài đặt, bạn có thể sử dụng npm install --cache /tmp/empty-cacheđể sử dụng bộ đệm tạm thời thay vì gỡ bỏ cái thực tế. npm ERR! npm ERR! Nếu bạn chắc chắn muốn xóa toàn bộ bộ đệm, hãy chạy lại lệnh này bằng --force.
Tarun

22

Mã cheat hữu ích trong kịch bản này và một số khác ...

├── UNMET PHỤ THUỘC NHÂN DÂN @ góc / chung @ 4.0.2

├── UNMET PEER DependENCY @ angular / Trình biên dịch @ 4.0.2

├── UNMET PEER DEPENDENCY @ angular / Trình biên dịch-cli @ 4.0.2

├── UNMET PHỤ THUỘC NHÂN DÂN @ angular / core @ 4.0.2

├── UNMET PHỤ THUỘC NHÂN DÂN @ angular / Forms @ 4.0.2

├── UNMET PHỤ THUỘC NHÂN DÂN @ góc / http @ 4.0.2

├── UNMET PEER DependENCY @ angular / platform-browser @ 4.0.2

├── UNMET PEER DependENCY @ angular / platform-browser-Dynamic @ 4.0.2>

  1. sao chép và dán lỗi của bạn vào trình soạn thảo mã của bạn.
  2. Làm nổi bật một phần không mong muốn với con trỏ của bạn. Trong trường hợp này '─── ​​UNMET PEER PHỤ THUỘC'
  3. Nhấn lệnh + d một loạt các lần.
  4. Nhấn xóa hai lần . (Nhấn phím cách nếu bạn vô tình tô sáng '├── UNMET PEER DEPENDENCY'.)
  5. Nhấn lên một lần. Thêm 'cài đặt npm'
  6. Nhấn xuống một lần. Thêm '- lưu
  7. Sao chép nội dung của bạn trở lại vào cli và chạy

npm install @ angular / common @ 4.0.2 @ angular / Trình biên dịch @ 4.0.2 @ angular / Trình biên dịch-cli @ 4.0.2 @ angular / core @ 4.0.2 @ angular / Forms @ 4.0.2 @ angular / http @ 4.0 .2 @ angular / platform-browser @ 4.0.2 @ angular / platform-browser-Dynamic @ 4.0.2 --save


8
Tùy chọn --saverõ ràng là không còn cần thiết kể từ npm 5.0.0: stackoverflow.com/a/19578808/12484
Jon Schneider

12

Dự án npm-install-peerssẽ phát hiện các đồng nghiệp và cài đặt chúng.

v1.0.1nó không hỗ trợ viết lại package.jsontự động, điều này về cơ bản sẽ giải quyết nhu cầu của chúng tôi ở đây.

Vui lòng thêm hỗ trợ của bạn để phát hành trong chuyến bay: https://github.com/spatie/npm-install-peers/issues/4


36
Khi chạy, nó cho tôi tin nhắn này. This package doesn't seem to have any peerDependencies
Thabung

2
Tôi có cùng một thông điệp.
Thibault Boursier

7
Theo tôi hiểu, npm-install-peerssẽ cài đặt peerDependenciesđăng ký package.json. Nó sẽ không cài đặt peerDependenciescác phụ thuộc như angular2.
mưa phùn

Có, để nhận xét @drizzd thứ hai: npm-install-peerschỉ dành cho cài đặt "peerDependencies"được liệt kê trong gói.json của dự án của bạn. Bạn đang cố gắng cài đặt "peerDependencies"danh sách trong mỗi node_modules/<package>/package.jsontệp của bạn , không phải phụ thuộc ngang hàng trực tiếp của bạn.
Will Farley

5

Tôi đã gặp những lỗi này khi tôi đang phát triển gói npm peerDependencies. Tôi phải đảm bảo rằng bất kỳ peerDependenciescũng được liệt kê như devDependencies. Dự án sẽ không tự động sử dụng các gói được cài đặt trên toàn cầu.


Đây là một giải pháp gọn gàng, vì chỉ cần thêm vào 'phụ thuộc' là hơi vụng về!
Ashot

0

Cài đặt sợi và sau đó chạy

sợi toàn cầu thêm cài đặt ngang hàng


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.