2016-08-18 16 views
13
$ npm install 
[email protected] /Users/antpaw/my_module 
├── [email protected] 
└── UNMET PEER DEPENDENCY [email protected]^2.74.0 

npm WARN [email protected] requires a peer of [email protected]^2.74.0 but none was installed. 

Tôi không hiểu làm thế nào điều này có thể chỉ là một cảnh báo. Đó là một thỏa thuận khá lớn đối với ứng dụng của tôi nếu "yêu cầu" không được cài đặt và ứng dụng của tôi sẽ bị lỗi.npm kiểm tra sự phụ thuộc ngang hàng

Làm thế nào tôi có thể làm npm install thoát với 1 nếu một phụ thuộc ngang hàng là chưa được đáp ứng hoặc là có cái gì đó như npm do-i-have-everything-i-need-installed lệnh đó sẽ thoát ra với 1?

+0

Khá nhiều công việc được thiết kế; nếu bạn muốn phụ thuộc được cài đặt khi module của bạn được cài đặt khi sử dụng 'dependency'. Nếu bạn muốn người tiêu dùng quản lý phiên bản 'yêu cầu' nào được cài đặt, thì bạn sử dụng' peerDependency'. Nó chỉ mất hai bước để cài đặt theo cách này; thay vì ba nếu bạn thất bại trong việc cài đặt ... Có lẽ bạn nên tắt 'dependency' thành một phiên bản chính: tức là" 2.x "theo cách đó nó sẽ được cài đặt, nhưng được trừ trên máy tính người tiêu dùng. liên quan chặt chẽ: http://stackoverflow.com/questions/35207380/how-to-install-npm-peer-dependencies-automatically –

Trả lời

4

Dường như tôi đã tìm thấy một cách để thoát khỏi với 1, sau/trước (Tôi nghĩ rằng tự không quan trọng) làm chung npm install tôi cần phải chạy npm install my_module đó sẽ thoát ra với 1. Điều đó có nghĩa là tôi có thể xác định danh sách các mô-đun tôi muốn đảm bảo có chính xác những gì họ cần (được xác định trong peerDependencies) trong tập lệnh CI của tôi, không đẹp nhưng nó tốt hơn là không có gì.

Vì vậy, npm install không phá vỡ bất kể loại phụ thuộc vô nghĩa nào bạn sẽ xác định trong package.json của mình. npm install module_name sẽ bị ngắt nếu bạn vô nghĩa trong số package.json của mình.

3

Có thể bạn đang sử dụng npm @ 3 (phiên bản 3).

Như được chỉ định trong tài liệu, các phiên bản npm 1 và 2 được sử dụng để cài đặt peerDependencies trong hầu hết các trường hợp. Npm phiên bản 3 thay đổi hành vi này và không còn cài đặt peerDependencies mà thay vào đó hãy ném cảnh báo khi peerDependencies chưa được cài đặt.

npm phiên bản 1 và 2 sẽ tự động cài đặt peerDependencies nếu chúng không phụ thuộc rõ ràng vào cao hơn trong cây phụ thuộc. Trong phiên bản chính tiếp theo của npm (npm @ 3), điều này sẽ không còn xảy ra. Bạn sẽ nhận được một cảnh báo rằng peerDependency không được cài đặt thay thế.

Lý do đằng sau những thay đổi chủ yếu là để tránh địa ngục phụ thuộc khi sử dụng peerDependencies hoặc phần lớn thời gian peerDependencies đang được sử dụng sai. Có một số vấn đề trên npm Github liên quan đến peerDependencies như this one giải thích một số vấn đề và điều đã dẫn đến giải pháp không cài đặt thêm peerDependencies nữa.

Nếu ứng dụng của bạn gặp sự cố nếu request chưa được cài đặt, bạn chủ yếu yêu cầu. Tại thời điểm này, trong môi trường NPM, dependencies là gói bạn require(), devDependencies là gói bạn require() chỉ cho sự phát triển, kiểm tra, vv

peerDependencies được thiết kế ban đầu để giải quyết vấn đề với các gói mà chủ yếu là 'plugins' cho các khung công tác hoặc thư viện khác, được thiết kế để được sử dụng với gói 'máy chủ' khác mặc dù chúng không trực tiếp sử dụng hoặc yêu cầu gói 'lưu trữ'.

Ví dụ: Plugin Grunt có nghĩa là được sử dụng với Grunt nhưng không bao giờ require('grunt');. Việc thêm grunt làm dependencies sẽ dẫn đến bản sao gói mới được tải xuống sẽ không bao giờ được sử dụng. Ngay cả khi một số plugin có phụ thuộc trực tiếp vào gói 'máy chủ' và chỉ định gói 'máy chủ' trong dependencies, điều này sẽ dẫn đến nhiều bản sao của gói 'máy chủ'.

Một peerDependencies là một cách khác để nói rằng một gói hoạt động khi cắm vào một phiên bản của một gói 'host', vì vậy nếu bạn cài đặt gói này, bạn cũng nên cài đặt gói này khác tay.

Đó là hành vi hiện tại của bạn, bạn đang cài đặt ứng dụng, liệt kê request làm peerDependencies, vì vậy bạn nên cài đặt nó để hoạt động và xóa cảnh báo, nếu không, bạn sẽ cần phải di chuyển đến số cổ điển dependencies.

+1

"Một peerDependencies là một cách để nói rằng một gói hoạt động khi cắm vào một phiên bản của một 'máy chủ 'gói'. Chính xác. Vì vậy, câu hỏi của tôi vẫn là: làm thế nào điều này có thể là một cảnh báo? NPM biết rằng gói host của tôi bị hỏng và cảnh báo tôi về điều đó (với exit 0)? – antpaw

+1

Điểm * hiện tại của 'peerDependencies' hiện cho phép người dùng cuối quản lý và cài đặt nó để tránh địa chỉ phụ thuộc. Nó sẽ chỉ cảnh báo bạn nếu thiếu 'peerDependencies' và bạn nên cài đặt nó, nó sẽ không được thực hiện cho bạn. Cách duy nhất để cài đặt tự động là di chuyển ra khỏi 'peerDependencies'. – HiDeo

+0

đó là một điểm tuyệt vời, vấn đề là việc thực hiện điểm đó. Tôi không muốn cài đặt tự động thông qua 'dependecies' vì tôi có thể kết thúc với hai hoặc nhiều phiên bản khác nhau của cùng một mô-đun được cài đặt, điều này thực sự tồi tệ là usecase của tôi (có rất nhiều usecase, đây không phải là vấn đề) . Đó là lý do tại sao tôi sử dụng 'peerDependencies'. "... là thiếu và rằng bạn nên cài đặt nó ..." Làm thế nào là "một cái gì đó-tôi-nên-làm" một cảnh báo, nó không có ý nghĩa với tôi? – antpaw

Các vấn đề liên quan