Sửa lỗi 'npm ERR! code EINTEGRITY' Khi Cài Đặt Package npm

beginner💚 Node.js2026-04-28| Node.js / npm — tất cả phiên bản, Windows / macOS / Linux

Error Message

npm ERR! code EINTEGRITY npm ERR! Verification failed while extracting...
#npm#integrity#checksum

Chuyện Gì Đang Xảy Ra

Bạn chạy npm install và bị đập ngay vào mặt lỗi này:

npm ERR! code EINTEGRITY
npm ERR! Verification failed while extracting lodash@4.17.21:
npm ERR! sha512-... integrity checksum failed when using sha512: wanted sha512-ABC... but got sha512-XYZ...

npm tải package về, rồi so sánh checksum của nó với giá trị lưu trong package-lock.json. Hai bên không khớp. npm dừng lại ngay — nó không thể biết file bị hỏng trong quá trình tải, bị giả mạo, hay chỉ là cache cũ trả về. Vậy là nó bail.

Nguyên Nhân Gốc Rễ

  • Cache npm bị hỏng — thủ phạm trong hầu hết các trường hợp. Một tarball được cache bị hỏng do lỗi đĩa, tải dở chừng, hoặc phần mềm antivirus scan giữa lúc đang ghi.
  • package-lock.json — lock file chứa hash từ phiên bản package cũ không còn khớp với những gì registry đang phục vụ hiện tại.
  • Tải xuống không hoàn chỉnh — mạng bị ngắt giữa chừng. npm cache lại file bị hỏng và tiếp tục dùng lại nó mỗi lần install sau đó.
  • Registry không khớp — bạn chuyển qua lại giữa registry công khai npmjs.org và mirror Nexus hoặc Artifactory nội bộ. Hash đơn giản là không khớp giữa các registry.
  • node_modules còn sót lại — các artifact cài đặt cũ từ lần chạy package manager trước gây xung đột với lần resolve hiện tại.

Cách Sửa Từng Bước

Bước 1 — Xóa cache npm

Bắt đầu từ đây. Cách này giải quyết lỗi trong khoảng 90% trường hợp.

npm cache các tarball đã tải tại ~/.npm trên Linux/macOS, hoặc %APPDATA%\npm-cache trên Windows. Chỉ cần một entry bị hỏng là đầu độc mọi lần install cho đến khi bạn xóa sạch.

npm cache clean --force

Sau đó xác minh cache đã thực sự trống:

npm cache verify

Xóa thành công sẽ trông như thế này:

Cache verified and compressed (~/.npm/_cacache):
Content verified: 0 (0 bytes)
Index entries: 0
Finished in 0.234s

Giờ thử lại npm install. Nếu chạy được, xong.

Bước 2 — Xóa node_modules và lock file

Cache đã sạch nhưng lỗi vẫn còn? Xóa toàn bộ trạng thái cài đặt cục bộ.

# Linux / macOS
rm -rf node_modules package-lock.json

# Windows (PowerShell)
Remove-Item -Recurse -Force node_modules
Remove-Item package-lock.json

Sau đó cài lại từ đầu:

npm install

npm tải mọi thứ trực tiếp từ registry và ghi một package-lock.json mới tinh với hash chính xác. Không còn dữ liệu cũ, không còn không khớp.

Bước 3 — Cài đặt với --prefer-online

Cần giữ lại lock file — chẳng hạn vì team bạn commit nó? Bỏ qua cache mà không cần xóa gì cả:

npm install --prefer-online

Lệnh này bảo npm luôn lấy từ registry thay vì cache cục bộ. Là fallback cho các phiên bản npm cũ hơn:

npm install --cache /tmp/empty-cache

Bước 4 — Kiểm tra registry

Gần đây chuyển qua lại giữa registry công ty và registry công khai? Hash không khớp là chuyện bình thường — mỗi registry ký package theo cách khác nhau.

npm config get registry

Đang trỏ vào chỗ không mong muốn? Đặt lại:

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

Nếu setup của bạn yêu cầu dùng registry nội bộ, hãy liên hệ với team infra. Họ cần publish đúng integrity hash trên mirror đó.

Bước 5 — Nhắm vào đúng package bị lỗi

Thông báo lỗi nêu tên package gây ra vấn đề. Nếu chỉ một package, đừng xóa hết — chỉ cần cài lại package đó:

npm install lodash@4.17.21 --prefer-online

Hoặc gỡ rồi cài lại sạch:

npm uninstall lodash
npm install lodash

Bước 6 — Cập nhật npm

Các phiên bản npm dưới 8 có lỗi đã biết trong việc kiểm tra integrity. Kiểm tra phiên bản trước:

npm --version

Dưới 8? Cập nhật:

npm install -g npm@latest

Xác Nhận Đã Sửa Xong

Chạy cài đặt sạch:

npm install

Thấy added 847 packages (hoặc con số của bạn) mà không có lỗi? Ổn rồi. Kiểm tra lại cây dependency xem có sạch không:

npm ls --depth=0

Không có cảnh báo, không có package thiếu — xong.

Xác Minh Hash Thủ Công (Tùy Chọn)

Muốn xem npm đang kiểm tra hash nào? Mở package-lock.json và tìm entry của package:

"lodash": {
  "version": "4.17.21",
  "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
  "integrity": "sha512-v2kDE..."
}

Trường integrity đó là hash SHA-512 được mã hóa base64. Để xác minh tarball thủ công, Hash Generator trên ToolCraft tính MD5, SHA-256 và SHA-512 ngay trên trình duyệt — không có gì rời khỏi máy bạn. Rất tiện khi debug một mirror artifact nội bộ và cần so sánh hash mà không cần mở CLI.

Phòng Ngừa

  • Luôn commit package-lock.json — mọi developer và mọi lần chạy CI đều cài đúng phiên bản với hash đã được xác minh.
  • Dùng npm ci trong CI thay vì npm install. Nó nghiêm ngặt hơn: báo lỗi nếu lock file bị thiếu hoặc không đồng bộ, và luôn cài từ đầu. Không bất ngờ.
  • Đừng trộn lẫn package manager — chạy yarn rồi lại npm trong cùng một project sẽ làm hỏng lock file rất nhanh.
  • Thêm npm cache verify như một bước preflight trong CI — nếu pipeline của bạn cache npm giữa các lần build, một bước verify nhanh sẽ phát hiện hỏng hóc trước khi nó phá vỡ quá trình cài đặt.

Tham Khảo Nhanh

# Cách 1: Xóa cache (thử cái này trước — hiệu quả 90% trường hợp)
npm cache clean --force && npm install

# Cách 2: Cài lại hoàn toàn từ đầu
rm -rf node_modules package-lock.json && npm install

# Cách 3: Bỏ qua cache, lấy trực tiếp từ registry
npm install --prefer-online

# Cách 4: Đặt lại về registry công khai
npm config set registry https://registry.npmjs.org/ && npm install

# Cách 5: Cập nhật npm
npm install -g npm@latest

Related Error Notes