Tại sao cài đặt npm nói rằng tôi có phụ thuộc chưa được đáp ứng?


404

Tôi có một gói nút. Khi tôi chạy npm installtừ gói gốc, nó sẽ cài đặt rất nhiều thứ, nhưng sau đó in một số thông báo lỗi trông như thế này:

npm WARN phụ thuộc chưa được đáp ứng / Người dùng / seanmackesey / google_drive / code / explorer / Generator / node_modules / findup-sync / node_modules / global yêu cầu Graceful-fs@'~1.2.0 'nhưng sẽ tải

Tôi phải bối rối về những gì chính xác npm installlàm. Nếu nó phát hiện ra một phụ thuộc, không nên cài đặt nó? Trong những điều kiện nào nó cung cấp cho tôi các thông báo lỗi như thế này và làm thế nào tôi có thể giải quyết các phụ thuộc?

Câu trả lời:


397

Tôi tin rằng đó là vì độ phân giải phụ thuộc hơi bị hỏng, xem https://github.com/npm/npm/issues/1341#issuecomment-20634338

Sau đây là giải pháp có thể:

  1. Cần thủ công để cài đặt các mô-đun cấp cao nhất, chứa các phụ thuộc chưa được đáp ứng: npm install findup-sync@0.1.2

  2. Cấu trúc lại gói.json của bạn. Đặt tất cả các mô-đun cấp cao (đóng vai trò phụ thuộc cho các mô-đun khác) ở phía dưới.

  3. Chạy lại npm installlệnh.

Vấn đề có thể do lỗi của npm không thể tải xuống tất cả các gói do hết thời gian hoặc một cái gì đó khác.

Lưu ý: Bạn cũng có thể cài đặt các gói không thành công bằng cách sử dụng npm install findup-sync@0.1.2.

Trước khi chạy npm install, thực hiện các bước sau có thể giúp:

  • loại bỏ node_modules bằng cách sử dụng rm -rf node_modules/
  • chạy npm cache clean

Tại sao đôi khi 'loại bỏ node_modules' là cần thiết? Khi một mô-đun lồng nhau không cài đặt được trong thời gian npm installtiếp theo, npm installsẽ không phát hiện ra các phụ thuộc lồng nhau bị thiếu.

Nếu đó là trường hợp, đôi khi nó đủ để loại bỏ sự phụ thuộc cấp cao nhất của các mô-đun lồng nhau bị thiếu đó và chạy npm installlại. Xem


22
Loại bỏ các mô-đun nút và làm sạch bộ đệm làm cho nó hoạt động với tôi.
MarkoHiel

4
xóa 'node_modules', chạy 'npm cache clean' và sau đó chạy 'npm install' đã khắc phục sự cố của tôi. Tôi đã phải chạy 'npm_install' ba lần, cho đến khi tôi nhận được tất cả các phụ thuộc được tải mà không gặp lỗi.
hendrix

2
Nếu npm cache cleankhông hoạt động vì lý do truy cập, hãy thử sudo npm cache clean.
Soroush

12
@Sioussh chỉ mù quáng thêm sudo vào những thứ không hoạt động đúng mà không sửa chữa chúng một cách kỳ diệu, chỉ có nghĩa là bạn không biết chuyện gì đang xảy ra.
Edgar Aroutiounian

5
Tại sao bao giờ "giải pháp" khác cho npm lại bao gồm rm r node_modules? và tại sao nó thực sự là lựa chọn duy nhất trong hầu hết các trường hợp? đó không hoàn toàn là cách tôi hình dung một người quản lý gói nên làm việc như thế nào
phil294

83

Nó đã xảy ra với tôi khi WIFI bị hỏng trong một npm install. Loại bỏ node_modulesvà chạy lại npm installcố định nó.


26
và thử npm cache clean.
ijse

5
Cài đặt lại nút có thể không cần thiết, nhưng giữa thực hiện điều đó npm cache cleanvà loại bỏ node_modules, lời khuyên này có hiệu quả với tôi.
RichLitt

@RichLitt, Vâng, làm như vậy npm cache cleanlà không đủ đối với tôi, tôi cũng phải gỡ bỏ node_modulesnó để làm cho nó hoạt động sau khi kết nối mạng thất bại trong quá trình "cài đặt".
Đánh dấu Tomlin

Tôi bối rối không biết nên node_modulesxóa thư mục nào? Tôi có một vấn đề tương tự với lỗi/usr/local/lib/node_modules/npm/node_modules/read-installed/node_modules/readdir-scoped-modules requires graceful-fs@'^4.1.2'
wuliwong

1
@wuliwong Cấp cao nhất.
geon

33

Tôi đã khắc phục sự cố bằng cách sử dụng các dòng lệnh này

  • $ rm -rf node_modules/
  • $ sudo npm update -g npm
  • $ npm install

Xong rôi!


5
Sau khi chạy cập nhật sudo npm -g npm, npm của tôi trở nên vô dụng, mọi nỗ lực cài đặt bất kỳ kết quả nào trong "npm ERR! Không thể tìm thấy mô-đun 'read-pack-json'" tôi sẽ phải bỏ phiếu này
MichaelB

Nó làm việc cho tôi và cho những người khác, có thể bạn có một vấn đề khác. Hãy thử cài đặt mô-đun đọc-gói-json trên toàn cầu sudo npm install -g read-package-jsonHoặc cài đặt lại
npm

8
Hãy cẩn thận: bạn không nên sử dụng sudo với npm, thay vào đó, nó được đề xuất để thay đổi quyền hoặc quyền sở hữu của thư mục npm muốn viết.
Sgnl

1
cũng có thể muốn thêm "npm cache clean" vào đó
Alexander Mills

1
Không sử dụng sudovới npm
Cấp

11

Nâng cấp NPM lên phiên bản mới nhất có thể giúp ích rất nhiều cho việc này. Câu trả lời của dule ở trên là đúng khi nói rằng quản lý phụ thuộc hơi bị hỏng, nhưng có vẻ như điều này chủ yếu dành cho các phiên bản cũ hơn của npm.

Lệnh npm listcung cấp cho bạn một danh sách tất cả các cài đặt node_modules. Khi tôi nâng cấp từ phiên bản 1.4.2 lên phiên bản 2.7.4, nhiều mô-đun được gắn cờ trước đó WARN unmet dependencykhông còn được ghi chú như vậy nữa.

Để cập nhật npm, bạn nên gõ npm install -g npmtrên MacOSX hoặc Linux. Trên Windows, tôi thấy rằng tải xuống lại và chạy lại trình cài đặt nodejs là cách hiệu quả hơn để cập nhật npm.


Tôi gặp vấn đề tương tự với phiên bản npm được phân phối trong repos CentOS 7. Tôi đã cài đặt phiên bản npm mới nhất từ ​​node.js và sự cố đã biến mất, vì vậy tôi nghĩ rằng quyền của bạn, đó có thể là sự cố với phiên bản cũ.
Elouan Keryell-Ngay cả

9

Các câu trả lời trên không giúp tôi hoàn toàn ngay cả sau khi xóa node_modulesthư mục.

Lệnh dưới đây đã giúp tôi cuối cùng:

npm config set registry http://registry.npmjs.org/

Lưu ý rằng điều này kéo các mô-đun nút qua kết nối HTTP không an toàn.

Src: https://stackoverflow.com/a/13119867 / 4082503


Điều này giúp tôi cũng như chủ nhà của tôi đang chuyển hướng lưu lượng.
dimiguel

1
@dimgl rất vui được biết :)
Vinay Vemula 30/12/14

1
@Dejel bạn cũng đã thử các câu trả lời khác. Bạn có thể phải chạy npm installnhiều lần và / hoặc cài đặt thủ công một số gói nút từng cái một.
Vinay Vemula

4

Đối với mọi -- UNMET PEER DEPENDENCY, cho ex. -- UNMET PEER DEPENDENCY rxjs@5.0.0-rc.2, cài đặt phụ thuộc đó npm install --save rxjs@5.0.0-rc.2cho đến khi bạn không còn nữaUNMET DEPENDENCIES .

Chúc may mắn.


1
Để lại cho tôi những lỗi tương tự bao gồm một lỗi mới:ERR! code 1
Wouter Vanherck

1
@WouterVanherck bạn có thể vui lòng thử rm -rf node_modules, sau đó npm cache cleannpm install. Nếu nó vẫn không hoạt động, tôi đề nghị bạn một lần nữa rm -rf node_modules, sau đó npm i -g yarnvà sau đó yarn install. Sợi khá tốt để quản lý node_modules. Chúc may mắn.
Akash

1
Vâng, là những gì peerDependenciesdành cho. Để đẩy bạn đến một sự lựa chọn có ý thức của phiên bản.
Kamafeather

3

Tôi chạy npm listvà cài đặt tất cả các gói được liệt kê là UNMET DEPENDENCY

Ví dụ:

├── UNMET DEPENDENCY css-loader@^0.23.1
npm install css-loader@^0.23.1


2

Điều này đã giải quyết nó cho tôi:

  1. Sửa số phiên bản trong package.json, theo các lỗi;
  2. Xóa node_modules( rm -rf node_modules);
  3. Chạy lại npm install.

Lặp lại các bước này cho đến khi không còn lỗi nữa.


1

Một số điều trong tĩnh mạch tương tự, tôi sẽ thêm một bước khác.

Lưu ý rằng trên phiên bản npm> 1.4.9, 'npm install' không cài đặt devDependencies. Trước tiên hãy thử xóa các mô-đun và bộ đệm hiện có:

remove node_modules $ rm -rf node_modules/
run $ npm cache clean

Vậy hãy thử đi:

npm install --dev
npm update --dev

Điều này ít nhất sẽ giải quyết các giải pháp phụ thuộc đệ quy.


6
cờ --dev dùng để làm gì?
Alexander Mills

1

--dev cài đặt devDependencies đệ quy (và nó chạy mãi mãi ..) làm thế nào nó có thể giúp giải quyết sự khác biệt của phiên bản?

Bạn có thể thử xóa thư mục node_moduls, sau đó xóa bộ đệm npm và sau đó chạy lại 'npm i'


1

Tôi gặp vấn đề tương tự khi cài đặt React Native CLI. Tôi không chắc chắn /node_modulestôi nên xóa thư mục nào sau khi đọc câu trả lời ở đây. Cuối cùng tôi cũng chạy

npm update -g

và đã có thể cài đặt gói sau đó.


1

Tôi đã cố gắng làm việc trên một hệ thống triển khai tự động chạy npm install, vì vậy rất nhiều giải pháp này sẽ không hiệu quả với tôi trong một cuộc đấu kiếm tự động. Tôi không ở vị trí để xóa / tạo lại node_modules/và tôi cũng không thể dễ dàng thay đổi các phiên bản Node.js.

Vì vậy, tôi đã kết thúc việc chạy npm shrinkwrap- thêm npm-shrinkwrap.jsontệp vào gói triển khai của mình và chạy cài đặt từ đó. Điều đó đã khắc phục vấn đề cho tôi; với tệp rút gọn là 'người trợ giúp', npm dường như có thể tìm thấy các gói phù hợp và cài đặt chúng cho tôi. (Shrinkwrap cũng có các tính năng khác, nhưng đây là những gì tôi cần nó cho trường hợp cụ thể này).


1

Tôi gặp phải vấn đề này khi tôi đang cài đặt các gói phản ứng và điều này đã làm việc cho tôi: npm install --save <package causing this error>


1

Trong trường hợp của tôi, bản cập nhật của npm đã giải quyết nó.

sudo npm install -g npm

1

npm installsẽ cài đặt tất cả các gói từ npm-shrinkwrap.json, nhưng có thể bỏ qua các gói trong package.json, nếu chúng không được cài đặt trước.

Nếu dự án của bạn có một npm-shrinkwrap.json, hãy đảm bảo bạn chạy npm shrinkwrapđể tạo lại nó, mỗi lần bạn thêm thêm / xóa / thay đổi package.json.



0

Đang cập nhật lên 4.0.0

Cập nhật lên 4 dễ dàng như cập nhật các phụ thuộc Angular của bạn lên phiên bản mới nhất và kiểm tra lại nếu bạn muốn hoạt hình. Điều này sẽ làm việc cho hầu hết các trường hợp sử dụng.

Trên Linux / Mac:

npm install @angular/{common,compiler,compiler-cli,core,forms,http,platform-browser,platform-browser-dynamic,platform-server,router,animations}@latest typescript@latest --save 

Trên Windows:

npm install @angular/common@latest @angular/compiler@latest @angular/compiler-cli@latest @angular/core@latest @angular/forms@latest @angular/http@latest @angular/platform-browser@latest @angular/platform-browser-dynamic@latest @angular/platform-server@latest @angular/router@latest @angular/animations@latest typescript@latest --save

Sau đó chạy bất cứ thứ gì ng phục vụ hoặc lệnh bắt đầu npm bạn thường sử dụng và mọi thứ sẽ hoạt động.

Nếu bạn dựa vào Ảnh động, hãy nhập cái mới BrowserAnimationsModuletừ @angular/platform-browser/animationsgốc của bạn NgModule. Không có điều này, mã của bạn sẽ biên dịch và chạy, nhưng hình ảnh động sẽ gây ra lỗi. Nhập khẩu từ @angular/corekhông được chấp nhận, sử dụng nhập khẩu từ gói mới

import { trigger, state, style, transition, animate } from '@angular/animations';.
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.