Tôi có cần cả gói-lock.json và pack.json không?


149

Sau khi cập nhật NPM của tôi lên phiên bản mới nhất (từ 3.X đến 5.2.0) và chạy npm installtrên một dự án hiện có, tôi nhận được một package-lock.jsontệp tự động tạo .

Tôi có thể nói package-lock.jsoncho tôi một cây phụ thuộc chính xác trái ngược với package.json.

Chỉ từ thông tin đó, có vẻ như package.jsonlà dư thừa và không cần thiết nữa.

Cả hai đều cần thiết để NPM hoạt động?
Có an toàn hoặc có thể chỉ sử dụng các package-lock.jsontập tin?

Các tài liệu trên gói-lock.json ( doc1 , doc2 ) không đề cập bất cứ điều gì về điều đó.

Chỉnh sửa :

Sau khi suy nghĩ thêm về nó, tôi đã đi đến kết luận rằng nếu ai đó muốn sử dụng dự án của bạn với phiên bản NPM cũ hơn (trước 5.x) thì nó vẫn sẽ cài đặt tất cả các phụ thuộc, nhưng với các phiên bản kém chính xác hơn (phiên bản vá)


Câu trả lời:


103

Bạn có cần cả hai package-lock.jsonpackage.json? Không .

Bạn có cần package.json? .

Bạn có thể có một dự án chỉ với package-lock.json? Không .

Cái package.jsonnày được sử dụng cho nhiều hơn phụ thuộc - như xác định các thuộc tính dự án, mô tả, thông tin tác giả và giấy phép, tập lệnh, v.v ... Chỉ package-lock.jsonđược sử dụng để khóa phụ thuộc vào một số phiên bản cụ thể.


19

package-lock.json: ghi lại phiên bản chính xác của từng gói được cài đặt cho phép bạn cài đặt lại chúng. Các bản cài đặt trong tương lai sẽ có thể xây dựng một cây phụ thuộc giống hệt nhau.

package.json: ghi lại phiên bản tối thiểu bạn cần. Nếu bạn cập nhật các phiên bản của một gói cụ thể, thay đổi sẽ không được phản ánh ở đây.


1
Nếu điều trên là đúng và package.jsonghi lại phiên bản tối thiểu mà ứng dụng và gói-lock.json ghi lại phiên bản chính xác của từng gói được cài đặt, thì tôi gặp tình huống lạ khi mô-đun được đặt ở phiên bản 0.112.1 trong gói .json và 0.110.0 trong gói-lock.json ...
Jean-François Beauchamp

6

Nếu câu hỏi của bạn là nếu tập tin khóa nên được cam kết với kiểm soát nguồn của bạn - nó nên. Nó sẽ bị bỏ qua trong hoàn cảnh nhất định.

Tôi thấy nó yêu cầu kéo đầy và lịch sử cam kết, vì vậy nếu bạn thấy nó thay đổi, hãy thực hiện một cam kết riêng cho nó.


1
Không, tôi đã không hỏi về cam kết kiểm soát nguồn. Chỉ cần NPM cần cả hai cùng một lúc để làm việc. package-lock.jsoncó vẻ như là một phiên bản dài dòng hơn package.json, vì vậy nó có an toàn hay chỉ có thể sử dụng tệp khóa.
Omri Luzon

Tôi thấy, tôi đã để lại pack.json trong các dự án của mình, chủ yếu là để có một vị trí cho các tập lệnh npm.
Stanley Kirdey

1
Bây giờ có một câu hỏi riêng về việc có nên đặt package-lock.jsondưới sự kiểm soát phiên bản hay không.
Adrian W

0

Một lời giải thích chính xác và chi tiết hơn về lý do đằng sau việc giữ gói-lock.json có thể được tìm thấy ở đây

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.