Có cách nào để buộc npm tạo package-lock.json không?


132

Tôi đã vô tình xóa nó và đã thực hiện nhiều thay đổi package.jsonkể từ đó. An npm installhoặc npm updatekhông tạo package-lock.jsonnữa. Tôi đã thử xóa bộ nhớ cache npm và bộ nhớ cache nvm của mình, nhưng dường như không có gì hoạt động. Tôi đã thử nó trên một số phiên bản Node.js (6.10.3 Node.js - 3.10.10 npm là những gì tôi muốn nó hoạt động) và nó không hoạt động trên bất kỳ phiên bản nào.

Có cách nào để buộc npm tạo package-lock.jsontệp không?


2
Tôi nghĩ rằng gói-lock.json là cụ thể cho NPM 5
Brett Merrifield

3
package-lock.jsonđược tạo tự động theo mặc định trong npm bắt đầu từ v5, trong các phiên bản trước, tên tệp khóa là npm-shrinkwrap.jsonvà nó được tạo thủ công bằng npm shrinkwraplệnh.
alexmac

@BrettMerrifield Cảm ơn bạn! Đó là vấn đề của tôi. Tôi đã cập nhật node 8.6.0npm 5.3.0và nó hoạt động.
Big Money

Kiểm tra của bạn .gitignore. Tôi vô tình có package-lock.jsontrong một .gitignorecách nào đó và bởi vì package-lock.jsonkhông xuất hiện trong git statusnó đã ném tôi đi.
Joshua Pinter

Câu trả lời:


155

Theo mặc định, package-lock.jsonđược cập nhật bất cứ khi nào bạn chạy npm install. Tuy nhiên, điều này có thể bị tắt trên toàn cầu bằng cách cài đặt package-lock=falsetrong ~/.npmrc.

Khi package-lock=falsecài đặt chung đang hoạt động, bạn vẫn có thể buộc package-lock.jsoncập nhật tệp của dự án bằng cách chạy:

npm install --package-lock

Lệnh này là cách chắc chắn duy nhất để buộc package-lock.jsoncập nhật.


@RonNewcomb Bạn có thể chia sẻ thêm thông tin không? Ý bạn là gì khi nói "nó không hoạt động"? Bạn đang sử dụng phiên bản npm nào?
Mathias Bynens

npm phiên bản 3.10.10 Node 6.10.3 Lệnh bạn liệt kê có vẻ là cấm? Chẳng có gì xảy ra. Không có lỗi, không có thay đổi tệp, không có gì.
Ron Newcomb

2
Nếu bạn đang sử dụng npm v3 cho dự án của mình, bạn sẽ không có package-lock.json. package-lock.jsonchỉ được hỗ trợ bởi npm v5 +.
Mathias Bynens

8
npm v 6.4.1 và điều này không tạo package-lock.json
mjuopperi

1
Nó hoạt động cho tôi, trong 6.4.1. Đặt nó thành false cũng ngăn không cho nó tạo một.
Kevin B

94

Trong npm 6.x, bạn có thể sử dụng

npm i --package-lock-only

Theo https://docs.npmjs.com/cli/install.html

Đối số --package-lock-only sẽ chỉ cập nhật package-lock.json, thay vì kiểm tra node_modules và tải xuống các phụ thuộc.


12
Đây là câu trả lời chính xác bây giờ, những người khác đã cũ và sẽ không hoạt động.
Vaibhav Singh

Bất kỳ manh mối nào về cách tạo package-lock.json mà không có devDependencies? Tôi cần cái này để cài đặt sản xuất sạch. npm i --package-lock-only --only=productiondường như không hoạt động.
Robert

Tôi không nghĩ rằng chỉ có thể tạo package-lock.jsoncho các phụ thuộc sản xuất. Nhưng nếu bạn chạy npm i --only=productionnó chỉ nên cài đặt các phụ thuộc sản xuất. Vì vậy, quy trình xây dựng của bạn có thể trông giống như sau: cài đặt tất cả các phụ thuộc, xây dựng ứng dụng, xóa node_modulesvà chỉ cài đặt các phụ thuộc sản xuất.
Janusz Przybylski

14

Điều này được trả lời trong các ý kiến; package-lock.jsonlà một tính năng trong npmv5 và cao hơn. npm shrinkwraplà cách bạn tạo một tệp khóa trong tất cả các phiên bản của npm.


1
lưu ý, tuy nhiên, đó package-lock.jsonkhông phải là điều chính xác giống như các tệp thu nhỏ.
strugee

7
trong npm 5+, trên thực tế, chúng hoàn toàn giống nhau, đến từng chi tiết, ngoại trừ một điều: npm-shrinkwrap.jsonsẽ được xuất bản lên sổ đăng ký, và package-lock.jsonsẽ không.
LJHarb

6
Vâng. Đó là một sự khác biệt khá quan trọng, đó là lý do tại sao tôi để lại bình luận của mình.
strugee

1
npm shrinkwraptạo ra npm-shrinkwrap.json, nhưng làm thế nào để bạn tạo ra package-lock.json?
Vic

5
Nó tự động trong npm 5+ hoặc bạn có thể buộc nó ở 5+ với--package-lock
LJHarb 31/03/18

1

Như một số câu trả lời đã giải thích bạn nên chạy:

npm i

NHƯNG nếu nó không giải quyết được ...

Kiểm tra phiên bản npmtệp thi hành của bạn . (Đối với tôi, đó là 3.xx không sử dụng package-lock.json(ở tất cả))

npm -v

Nó phải ít nhất là 5.xx (đã giới thiệu tệp package-lock.json.)

Để cập nhật npm trên Lunix, hãy làm theo các hướng dẫn sau.

Để biết thêm chi tiết về gói tập tin, vui lòng đọc truyện vừa này .


0

Nếu phiên bản npm của bạn thấp hơn phiên bản 5 thì hãy cài đặt phiên bản cao hơn để nhận gói-lock.json thế hệ tự động .

Ví dụ: Nâng cấp hiện tại của bạn NPM lên phiên bản 6.14.0

npm i -g npm@6.14.0

Bạn có thể xem danh sách phiên bản npm mới nhất bằng cách

npm view npm versions

-3

package-lock.json được tạo lại bất cứ khi nào bạn chạy npm i.


13
Điều này chỉ đúng với một số phiên bản nhất định của nodenpm. Tôi nghĩ đó là npm> = 5.0node> = 7.0, nhưng tôi không chắc chắn 100% về điều đó. Nó không hoạt động với node 6.11.3tôi.
Thor84no

2
Cũng không đúng nếu gói-lock được đặt thành false trong cấu hình npm. Sử dụng 'danh sách cấu hình npm' để kiểm tra
Damo

package-lock.json được tạo tự động cho bất kỳ hoạt động nào trong đó npm sửa đổi cây node_modules hoặc package.json. Đang chuyển sang docs.npmjs.com/files/package-lock.json . Nhưng phiên bản npm không được chỉ định.
NanoNova
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.