Chúng tôi đang sử dụng sợi cho tất cả các cài đặt pkg xác định của mình nhưng không ngăn người dùng sử dụng npm - Tuy nhiên, tôi đoán việc có cả hai tệp này sẽ gây ra sự cố. Có nên thêm một cái vào dir .gitignore của bạn không?
Chúng tôi đang sử dụng sợi cho tất cả các cài đặt pkg xác định của mình nhưng không ngăn người dùng sử dụng npm - Tuy nhiên, tôi đoán việc có cả hai tệp này sẽ gây ra sự cố. Có nên thêm một cái vào dir .gitignore của bạn không?
Câu trả lời:
Như đã đề cập ở phần khác, các tệp khóa phụ thuộc, được hỗ trợ bởi nhiều hệ thống quản lý gói (ví dụ: trình soạn nhạc và trình gói ), nên được cam kết với cơ sở mã trong các dự án cuối chuỗi - để mỗi cá nhân cố gắng chạy dự án đó đang thực hiện vì vậy với chính xác tập hợp các phụ thuộc đã được kiểm tra.
Không rõ ràng là liệu các tệp khóa có nên luôn được cam kết thành các gói được dự định đưa vào các dự án khác hay không (nơi mà các phụ thuộc lỏng lẻo hơn là mong muốn). Tuy nhiên, cả Yarn và NPM (như được đề cập bởi @Cyrille) đều bỏ qua một cách thông minh yarn.lock
và package-lock.json
tương ứng khi cần thiết, giúp an toàn khi luôn cam kết các tệp khóa này.
Vì vậy, bạn nên luôn cam kết ít nhất một trong số yarn.lock
hoặcpackage-lock.json
tùy thuộc vào trình quản lý gói bạn đang sử dụng.
Hiện nay chúng ta có hai hệ thống quản lý gói khác nhau, mà cả hai cài đặt cùng một tập các phụ thuộc từ package.json
, nhưng mà tạo ra và đọc từ hai lockfiles khác nhau. NPM 5 tạo ra package-lock.json
, trong khi Yarn tạo ra yarn.lock
.
Nếu bạn cam kết package-lock.json
thì bạn đang xây dựng để hỗ trợ những người cài đặt phần phụ thuộc của bạn với NPM 5. Nếu bạn cam kết yarn.lock
, bạn đang xây dựng để hỗ trợ những người cài đặt phần phụ thuộc với Yarn.
Việc bạn chọn cam kết yarn.lock
hay package-lock.json
cả hai phụ thuộc vào việc những người đang phát triển dự án của bạn chỉ sử dụng Yarn hoặc NPM 5 hay cả hai. Nếu dự án của bạn là mã nguồn mở, điều thân thiện nhất với cộng đồng cần làm là cam kết cả hai và có một quy trình tự động để đảm bảo yarn.lock
và package-lock.json
luôn đồng bộ.
Cập nhật: Yarn hiện đã giới thiệu một import
lệnh sẽ tạo một yarn.lock
tệp từ một package-lock.json
tệp. Điều này có thể hữu ích để giữ hai tệp được đồng bộ hóa. (Cảm ơn @weakish)
Các vấn đề này đã được thảo luận rất nhiều về dự án Yarn trong:
Cả hai hiện đã đóng cửa.
yarn import
đã được giới thiệu vào năm 2018. Sợipkg.com/blog/
Bạn nên cam kết 1 tệp khóa cây phụ thuộc, nhưng bạn không nên cam kết cả hai. Điều này cũng yêu cầu tiêu chuẩn hóa sợi hoặc npm (không phải cả hai) để xây dựng + phát triển dự án.
Đây là bài viết về sợi về lý do nên sử dụng sợi.lock, nếu bạn chuẩn hóa sợi.
Nếu bạn cam kết cả yarn.lock
tệp và tệp VÀ các package-lock.json
tệp, có rất nhiều cách để 2 tệp có thể cung cấp các cây phụ thuộc khác nhau (ngay cả khi các thuật toán phân giải cây của sợi và npm giống hệt nhau) và việc đảm bảo rằng chúng cung cấp chính xác Cùng một câu trả lời. Vì nó không phải là tầm thường, không có khả năng rằng cây phụ thuộc giống nhau sẽ được duy trì trong cả hai tệp và bạn không muốn hành vi khác nhau tùy thuộc vào việc xây dựng được thực hiện bằng sợi hay npm.
Nếu và khi sợi chuyển từ sử dụng yarn.lock
sang package-lock.json
( vấn đề ở đây ), thì việc lựa chọn tệp khóa để cam kết trở nên dễ dàng và chúng ta không còn phải lo lắng về sợi và npm dẫn đến các bản dựng khác nhau. Dựa trên bài đăng trên blog này , đây là một thay đổi mà chúng ta không nên mong đợi sớm (bài đăng trên blog cũng mô tả sự khác biệt giữa yarn.lock
và package-lock.json
.
Tôi đã nghĩ về cùng một câu hỏi. Đây là những suy nghĩ của tôi, hy vọng nó sẽ giúp:
Các tài liệu NPM gói-lock.json nói những điều sau đây:
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. Nó mô tả cây chính xác đã được tạo, sao cho các lần cài đặt tiếp theo có thể tạo ra các cây giống hệt nhau, bất kể cập nhật phụ thuộc trung gian.
Điều này rất tốt vì nó ngăn chặn hiệu ứng "works on my machine".
Nếu không có tệp này, nếu bạn npm install --save A
, npm sẽ thêm "A": "^1.2.3"
vào của bạn package.json
. Khi ai đó khác chạy npm install
trên dự án của bạn, có thể phiên bản 1.2.4
của A
đã được phát hành. Vì nó là phiên bản mới nhất có sẵn đáp ứng phạm vi semver được chỉ định trong của bạn package.json
, nó sẽ cài đặt phiên bản này. Nhưng nếu có một lỗi mới được giới thiệu trong phiên bản này thì sao? Người này sẽ gặp sự cố mà bạn không thể sao chép vì bạn có phiên bản trước đó, không có bất kỳ lỗi nào.
Bằng cách khắc phục trạng thái node_modules
thư mục của bạn , package-lock.json
tệp ngăn chặn sự cố này vì mọi người sẽ có các phiên bản giống nhau của mọi gói.
Nhưng nếu bạn đang viết và xuất bản một mô-đun npm thì sao? Tài liệu cho biết như sau:
Một chi tiết quan trọng về package-lock.json là nó không thể được xuất bản và nó sẽ bị bỏ qua nếu được tìm thấy ở bất kỳ nơi nào khác ngoài gói toplevel.
Vì vậy, ngay cả khi bạn cam kết, khi người dùng cài đặt mô-đun của bạn, họ sẽ không nhận được package-lock.json
tệp mà chỉ nhận được package.json
tệp. Vì vậy, npm sẽ cài đặt phiên bản mới nhất đáp ứng phạm vi semver của tất cả các phụ thuộc của bạn. Điều đó có nghĩa là bạn luôn muốn kiểm tra mô-đun của mình bằng các luận văn xác minh các phần phụ thuộc của bạn, chứ không phải mô-đun bạn đã cài đặt khi bắt đầu viết mô-đun của mình. Vì vậy, trong trường hợp đó, package-lock.json
rõ ràng là vô dụng. Hơn nữa, nó có thể gây khó chịu.
Đây là quy tắc chung của tôi: nếu bạn đang làm việc trên một ứng dụng, hãy xác nhận (các) tệp khóa. Nếu bạn đang duy trì một thư viện, hãy thêm nó vào danh sách bị bỏ qua của bạn. Dù bằng cách nào, bạn nên sử dụng phạm vi semver chính xác trong package.json
. Yehuda Katz (được lưu trong bộ nhớ cache ) đã viết một lời giải thích tuyệt vời về thời điểm nên commit Gemfile.lock
(tệp khóa của Ruby) và khi nào thì không. Ít nhất hãy đọc phần tl; dr.
.gitignore
và thường nằm ở thư mục gốc của dự án.
Bạn hoàn toàn đúng! Cho phép cả hai npm
và yarn
được sử dụng sẽ gây ra vấn đề. Hãy xem bài viết này .
Hiện tại, chúng tôi đang có kế hoạch thêm một số cảnh báo cho người dùng sử dụng cả hai
yarn
vànpm
trong cùng một kho lưu trữ để cài đặt các gói.Chúng tôi thực sự khuyên bạn nên xóa
package-lock.json
tệp nếu bạn quyết định sử dụng sợi để tránh nhầm lẫn trong tương lai và các vấn đề về tính nhất quán có thể xảy ra.
Bạn có thể không muốn cả hai npm
và yarn
với tư cách là người quản lý gói của bạn.
Các tệp này được quản lý bởi các công cụ của bạn, vì vậy - giả sử sử dụng sợi sẽ cập nhật hiệu quả package-lock.json
–Tôi cho rằng việc cam kết cả hai tệp đều hoạt động tốt.
Tôi nghĩ rằng điều quan trọng nhất đối với người dùng của bạn là package-lock.json
(I, ví dụ, không sử dụng sợi) nên cái này có được cam kết.
Đối với yarn.lock
, nó phụ thuộc vào việc bạn làm việc một mình hay trong một nhóm. Nếu solo, thì tôi cho rằng không cần phải cam kết. Nếu bạn (dự định) làm việc theo nhóm, thì bạn có thể nên cam kết, ít nhất là cho đến khi sợi hỗ trợ nó 🙂
Tôi cho rằng nhóm sợi cuối cùng sẽ ngừng sử dụng yarn.lock
và sử dụng package-json.lock
thay thế, lúc này mọi việc sẽ trở nên đơn giản hơn 😛
Không, việc sử dụng đồng thời cả hai tệp khóa thường sẽ dẫn đến sự không nhất quán trong cây phụ thuộc của bạn, đặc biệt là khi cộng tác trong một nhóm. Bỏ qua khóa này hay khóa khác là một giải pháp đơn giản. Chỉ cần đảm bảo rằng nhóm của bạn hiểu và đồng ý với thay đổi này.