Trình quản lý gói Node bị hỏng theo một cách nào đó, bây giờ không thể cài đặt được


13

Tôi gặp phải một vấn đề ngày hôm nay khi tôi quyết định sử dụng npm update -gtrong thư mục ứng dụng nodejs. Đây là một quyết định tồi tệ, vì nó khiến tôi gặp phải một vấn đề phổ biến và tai hại với npm .

Giải pháp là cài đặt lại nodejs và npm. Thật không may khi tôi đi cài đặt npm bằng sudo apt-get install npmnó không hoạt động.

Lỗi đầy đủ trong thiết bị đầu cuối là đây:

Some packages could not be installed. This may mean that you have requested
an impossible situation or if you are using the unstable distribution that 
some required packages have not yet been created or been moved out of Incoming.
The following information may help to resolve the situation:
The following packages have unmet dependencies:
 npm : Depends: nodejs but it is not going to be installed
   Depends: node-abbrev (>= 1.0.4) but it is not going to be installed
   Depends: node-ansi but it is not going to be installed
   Depends: node-archy but it is not going to be installed
   Depends: node-block-stream but it is not going to be installed
   Depends: node-fstream (>= 0.1.22) but it is not going to be installed
   Depends: node-fstream-ignore but it is not going to be installed
   Depends: node-github-url-from-git but it is not going to be installed
   Depends: node-glob (>= 3.1.21) but it is not going to be installed
   Depends: node-graceful-fs (>= 2.0.0) but it is not going to be installed
   Depends: node-inherits but it is not going to be installed
   Depends: node-ini (>= 1.1.0) but it is not going to be installed
   Depends: node-lockfile but it is not going to be installed
   Depends: node-lru-cache (>= 2.3.0) but it is not going to be installed
   Depends: node-minimatch (>= 0.2.11) but it is not going to be installed
   Depends: node-mkdirp (>= 0.3.3) but it is not going to be installed
   Depends: node-gyp (>= 0.10.9) but it is not going to be installed
   Depends: node-nopt (>= 2.1.1) but it is not going to be installed
   Depends: node-npmlog but it is not going to be installed
   Depends: node-once but it is not going to be installed
   Depends: node-osenv but it is not going to be installed
   Depends: node-read but it is not going to be installed
   Depends: node-read-package-json (>= 1.1.0) but it is not going to be installed
   Depends: node-request (>= 2.25.0) but it is not going to be installed
   Depends: node-retry but it is not going to be installed
   Depends: node-rimraf (>= 2.2.2) but it is not going to be installed
   Depends: node-semver (>= 2.1.0) but it is not going to be installed
   Depends: node-sha but it is not going to be installed
   Depends: node-slide but it is not going to be installed
   Depends: node-tar (>= 0.1.18) but it is not going to be installed
   Depends: node-which but it is not going to be installed
E: Unable to correct problems, you have held broken packages.

Tôi có thể làm gì để cài đặt npm đúng cách và chạy lại?

Cảm ơn.

Câu trả lời:


29

Cập nhật

Về nhận xét của William Entriken bên dưới câu trả lời này, có một cách tốt hơn để cài đặt Node.js nguyên bản trong Ubuntu dưới dạng một gói snap.

Node.js có sẵn dưới dạng gói snap trong tất cả các phiên bản Ubuntu hiện được hỗ trợ. Cụ thể với Node.js, nhà phát triển có thể chọn từ một hoặc nhiều bản phát hành hiện được hỗ trợ và nhận cập nhật tự động thường xuyên trực tiếp từ NodeSource. Các phiên bản Node.js 6, 8, 9, 10, 11, 12 và 13 hiện đang có sẵn, với Snap Store được cập nhật trong vài giờ hoặc vài phút sau khi phát hành Node.js.

Nút có thể được cài đặt bằng một lệnh duy nhất, ví dụ:

sudo snap install node --classic --channel 9/stable 

Nút snap có thể được truy cập bằng lệnh node, ví dụ:

$ nút -v  
v9.9.0

Một phiên bản cập nhật của npm sẽ được cài đặt như một phần của nút chụp. npm nên được chạy bên ngoài nút thay thế, trong vỏ bình thường của bạn. Sau khi cài đặt nút snap, chạy lệnh sau để cho phép kiểm tra cập nhật npm:

sudo chown -R $ USER: $ (id -gn $ USER) / home / your-username /.config

Thay thế your-usernametrong lệnh trên bằng tên người dùng của riêng bạn. Sau đó chạy npm -vđể kiểm tra xem phiên bản của npm có được cập nhật hay không. Như một ví dụ tôi đã kiểm tra rằng npm đã được cập nhật, kiểm tra phiên bản của gói đã được cài đặt có tên là sợi bằng lệnh npm list yarnvà sau đó cập nhật gói sợi hiện có lên phiên bản mới nhất bằng lệnhnpm update yarn

Người dùng có thể chuyển đổi giữa các phiên bản của Node.js bất cứ lúc nào mà không cần liên quan đến các công cụ bổ sung như nvm (Trình quản lý phiên bản nút), ví dụ:

sudo snap refresh node --channel=8/stable

Người dùng có thể kiểm tra các phiên bản cạnh của Node.js có thể được cài đặt từ kênh cạnh mới nhất hiện đang theo dõi Node.js phiên bản 12 bằng cách chuyển đổi bằng:

sudo snap switch node --edge

Cách tiếp cận này chỉ được khuyến nghị cho những người dùng sẵn sàng tham gia thử nghiệm và báo cáo lỗi ngược dòng.


Câu trả lời gốc

Để cài đặt các phiên bản LTS mới nhất của Node.js (nodejs) và Trình quản lý gói cho Node.js (npm) trong tất cả các phiên bản Ubuntu được hỗ trợ hiện tại, hãy mở thiết bị đầu cuối và chạy các lệnh sau:

sudo apt-get remove nodejs npm ## remove existing nodejs and npm packages
sudo apt-get install curl  
curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -
sudo apt-get install -y nodejs  

Nếu bạn đang sao chép ba lệnh này, đừng bỏ qua dấu gạch nối ở cuối lệnh thứ hai.

Các nodejsgói chứa nodejsnhị phân cũng như npm, do đó bạn không cần phải cài đặt npmriêng rẽ. Tuy nhiên, để một số npmgói hoạt động (chẳng hạn như các gói yêu cầu xây dựng từ nguồn), bạn sẽ cần phải cài đặt build-essentialgói:

sudo apt-get install build-essential  

Kế hoạch LTS

Các bản phát hành chính của Node.js mới được cắt giảm sau mastermỗi sáu tháng. Các phiên bản số chẵn mới (ví dụ v6, v8, v10, v.v.) được cắt giảm vào tháng Tư. Các phiên bản số lẻ mới (ví dụ v5, v7, v9) sẽ bị cắt vào tháng Mười.

Khi một bản phát hành chính được đánh số lẻ mới bị cắt, phiên bản chính được đánh số chẵn trước đó chuyển sang gói Hỗ trợ dài hạn.

Mỗi phiên bản chính được bảo hiểm bởi kế hoạch LTS sẽ được duy trì tích cực trong thời gian 18 tháng kể từ ngày được đưa vào bảo hiểm LTS. Sau 18 tháng hỗ trợ tích cực, phiên bản chính sẽ chuyển sang chế độ "bảo trì" trong 12 tháng nữa.

cài đặt không LTS

Hiện tại đến tháng 3 năm 2017, các lệnh để cài đặt phiên bản Node.js không phải LTS mới nhất (v8 tại thời điểm này được đăng) như sau:

sudo apt-get remove nodejs npm ## remove existing nodejs and npm packages
sudo apt-get install curl  
curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
sudo apt-get install -y nodejs  

Lịch trình LTS của Node.js

Phát hành LTS Status Codename LTS Bắt đầu bảo trì Bắt đầu bảo trì Kết thúc
6.x Boron hoạt động 2016-10-18 tháng 4 năm 2018 tháng 4 năm 2019
7.x Không có LTS              
8.x Active Carbon 2017-10-31 tháng 4 năm 2019 tháng 12 năm 2019
9.x Không có LTS              
10.x Hoạt động Dubnium tháng 10 năm 2018 tháng 4 năm 2020 tháng 4 năm 2021  
11.x Không LTS 2019-04-01 2019-06-30
12.x 2019-10-22 2021-04-01 2022-04-01
13.x Không LTS 2020-04-20 2020-06-01


sử dụng "sudo apt-get install -y nodejs" làm việc cho tôi
Davinder Kumar

Phương pháp này yêu cầu tin tưởng NHIỀU bên và sau đó cấp quyền truy cập đầy đủ vào máy tính của bạn cho deb.nodesource.com, một thực thể thậm chí không thể cập nhật trang web của họ mỗi phiên bản để bao gồm hàm băm cho bảo mật của bạn. Không, cám ơn!
William Entriken

@WilliamEntriken Node.js hiện là gói snap trong Ubuntu không yêu cầu chạy curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -lệnh. Thay vào đó, Node.js có thể được cài đặt dưới dạng gói snap. Tôi đã thêm một phần Cập nhật mới vào câu trả lời của mình, trong đó có hướng dẫn cài đặt gói snap Node.js.
karel
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.