Tại sao package-lock.json lại thay đổi hàm băm toàn vẹn từ sha1 thành sha512?


121

Tôi vừa tạo một tệp khóa npm mới, package-lock.json, như một phần của quy trình làm việc điển hình của tôi. Nhưng tôi nhận thấy rằng lần này tất cả các băm toàn vẹn đã được thay đổi từ sha1 thành sha512. Chuyện gì đang xảy ra ở đây?

nhập mô tả hình ảnh ở đây

"chalk": {
    "version": "2.0.1",
    "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.0.1.tgz",
-   "integrity": "sha1-ce5R+nvkyuwaY4OffmgtgTLTDK8=",
+   "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
    […]
}

1
Đó là sự cố với npm: github.com/npm/npm/issues/17749
Vlad Minaev

1
Sự cố được đề cập ở trên đã được đóng và hiện một bài viết được tạo để hướng dẫn cách giải quyết vấn đề này: npm.community/t/shasum-check-or-integrity-eintegrity-errors/153
Kyle Burkett

Câu trả lời:


105

Từ những gì tôi có thể thấy, npm đã thay đổi tổng kiểm tra toàn vẹn từ sha1 thành sha512.

Nếu các thay đổi git của bạn chuyển từ sha1 sang sha512, bạn nên thực hiện cập nhật đó một lần và nó sẽ tốt sau đó.

Nếu ai đó đang làm việc với codebase và thấy git thay đổi từ sha512 xuống sha1 (đó là vấn đề tôi đang gặp phải), bạn có thể khắc phục bằng cách chạy như sau:

Bỏ các thay đổi trong git cho package-lock.json

npm i -g npm
rm -rf node_modules/
npm i

Thao tác này sẽ cập nhật npm và cài đặt lại tất cả các gói của bạn để có tổng kiểm tra mới (sha512).


1
Có lý do gì để sử dụng sha512 thay vì sha1 không? Máy tính của tôi hiện đang thay đổi thành sha1 cho môi trường của chúng tôi.
Elijah1210

@ Elijah1210 Tôi sẽ đoán ít khả năng 'làm giả' hàm băm với va chạm hơn?
Pureferret

20
Điều này không đủ trong trường hợp của tôi. Ngoài việc xóa node_modulesthư mục, tôi cũng cần npm cache clear --force.
Lorenz Meyer

37

Dựa trên những gì Dave đã trả lời. Cách khắc phục tôi tìm thấy là làm như sau:

npm i -g npm

cd {working directory}
rm -rf node_modules/
rm package-lock.json
npm cache clear --force
npm i

Chúng tôi đã làm điều này cho tất cả các nhà phát triển của chúng tôi cùng một lúc và điều này đã ngăn chặn sự cố sha-512 so với sha-1 đang gây ra xung đột hợp nhất khó chịu.


6

Xem thêm https://github.com/npm/npm/issues/17749 , mặc dù tuyên bố sự cố đã được 'khắc phục' nhưng không phải vậy. Loại bỏnode_modules là một giải pháp thay thế.

Có thể có một mối quan hệ với hệ điều hành. Chúng tôi đang giải quyết vấn đề này ngay bây giờ với các nhà phát triển trên nền tảng Linux và Windows.


3
Đã nhiều tháng kể từ khi điều này được đăng, và tôi vẫn đang phải chịu đựng điều này. nó là GIẾT TÔI
Chad Ruppert

2
Cuối cùng thì chúng tôi đã chuyển sang sợi.

1
Mọi vấn đề NPM dường như đã được giải quyết bằng cách chuyển sang Yarn
Solvitieg

2

Với tư cách là @Daniel Cumings, tôi cũng phải xóa package-lock.json để loại bỏ các băm sha1. Đây là các lệnh CLI của Windows để tham khảo, hoạt động giống như tập lệnh của Daniel:

npm i -g npm
rd /s /q "node_modules"
del package-lock.json
npm cache clear --force
npm i

2

Tôi đang làm việc trong một đội lớn. Việc buộc mọi nhà phát triển buộc phải dọn dẹp npmbộ nhớ cache là rất khó và không đáng tin cậy. Ngoài ra, điều này không giúp ích gì mọi lúc. Vì vậy, đối với bất kỳ ai vẫn gặp phải vấn đề npm này (giống như tôi) và không có gì khác giúp được - hãy thử công cụ dựa trên git này mà tôi đã xây dựng gần đây: https://github.com/kopach/lockfix . Nó sha512 -> sha1hoàn nguyên các thay đổi về tính toàn vẹn của các tệp khóa của npm. Nếu bạn thêm điều này vào postshrinkwraptập lệnh của mình package.json- cuối cùng bạn sẽ đặt tất cả các thuộc tính toàn vẹn sha512và có tệp khóa nhất quán.

npm install --save-dev lockfix
"scripts": {
    "postshrinkwrap": "lockfix",
},

0

Tiếp tục xây dựng dựa trên các nhận xét và đề xuất trước đó, đối với tôi, tôi cần xóa thư mục node_modules hiện có, bộ nhớ cache, rồi lấy tệp sha512 package-lock.json từ git (được cam kết từ một máy tính khác) và cuối cùng thực hiện một npm i . Một cái gì đó như thế này:

npm i -g npm
rm -rf node_modules/
npm cache clear --force
git reset --hard
npm i

Sau khi package-lock.json này sử dụng sha512 và các thay đổi khác đã ổn định.

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.