Composer.lock có nên được cam kết kiểm soát phiên bản?


529

Tôi hơi bối rối với việc composer.locksử dụng trong một ứng dụng với kho lưu trữ.

Tôi thấy nhiều người nói rằng chúng ta không nên .gitignore composer.locktừ kho lưu trữ.

Nếu tôi cập nhật các thư viện của mình trong môi trường dev, tôi sẽ có một thư viện mới composer.locknhưng tôi sẽ không thể cập nhật chúng vào sản xuất, phải không?

Nó sẽ không tạo ra xung đột trên tập tin này?


1
Liên kết tại là @markus chết
Kyrre

Câu trả lời:


674

Nếu bạn cập nhật libs của mình, bạn cũng muốn cam kết lockfile. Về cơ bản, nó nói rằng dự án của bạn bị khóa với các phiên bản cụ thể của các lib bạn đang sử dụng.

Nếu bạn cam kết các thay đổi của mình và ai đó lấy mã của bạn và cập nhật các phụ thuộc, tệp khóa sẽ không được sửa đổi. Nếu nó được sửa đổi, điều đó có nghĩa là bạn có một phiên bản mới của một cái gì đó.

Có nó trong kho lưu trữ đảm bảo với bạn rằng mỗi nhà phát triển đang sử dụng các phiên bản giống nhau.


5
Ok nhưng hãy tưởng tượng nếu tôi cập nhật các thư viện từ môi trường sản xuất, composer.lock sẽ bị ghi đè để một lần kéo tiếp theo từ sản xuất sẽ yêu cầu tôi hợp nhất tệp này ...
Pierre de LESPINAY

7
Nếu composer.lock bị sửa đổi, bạn cần đẩy các sửa đổi trở lại kho lưu trữ. Nếu bạn muốn buộc phần mềm vào các phiên bản đã cho của các thư viện, thì hãy làm rõ ràng trong cấu hình. Bằng cách đó, khóa sẽ không bao giờ thay đổi. Hãy nghĩ về tập tin khóa như là một chỉ báo về vấn đề quản lý phụ thuộc cần được giải quyết bằng cách này hay cách khác.
meza

361
Trong sản xuất, bạn không nên cập nhật các phụ thuộc của mình, bạn nên chạy composer installnó sẽ đọc từ tệp khóa và không thay đổi bất cứ điều gì.
Seldaek

112
"Trong sản xuất, bạn không nên cập nhật sự phụ thuộc của mình" nên được viết bằng tất cả các chữ hoa
Joaquín L. Robles

75
@ JoaquínL.Robles TRONG SẢN XUẤT BẠN KHÔNG NÊN CẬP NHẬT CÁC KHOẢN PHỤ THUỘC CỦA BẠN! :)
ЕЕннн

201

Đối với các ứng dụng / dự án : Chắc chắn là có.

Các tài liệu hướng dẫn soạn nhạc nói về vấn đề này (với sự nhấn mạnh):

Cam kết composer.lock của ứng dụng của bạn (cùng với composer.json) vào kiểm soát phiên bản.

Giống như @meza đã nói: Bạn nên cam kết tệp khóa để bạn và cộng tác viên của bạn làm việc trên cùng một bộ phiên bản và ngăn bạn nói những câu như "Nhưng nó hoạt động trên máy tính của tôi". ;-)

Đối với thư viện : Có lẽ là không.

Tài liệu tổng hợp ghi chú về vấn đề này:

Lưu ý: Đối với các thư viện, không nhất thiết phải cam kết tệp khóa (...)

Và tuyên bố ở đây :

Đối với thư viện của bạn, bạn có thể cam kết tệp composer.lock nếu bạn muốn. Điều này có thể giúp nhóm của bạn luôn kiểm tra các phiên bản phụ thuộc tương tự. Tuy nhiên, tệp khóa này sẽ không có bất kỳ ảnh hưởng nào đến các dự án khác phụ thuộc vào nó. Nó chỉ có ảnh hưởng đến dự án chính.

Đối với các thư viện, tôi đồng ý với câu trả lời của @Josh Johnson.


Tại sao đối xử với các dự án tại nơi làm việc khác với "thư viện"?
Josh Johnson

4
Có lẽ việc sử dụng từ "đồng nghiệp" đã gây nhầm lẫn ở đây, tôi đã đổi nó thành cộng tác viên. Sự khác biệt chính là "dự án chính" so với thư viện, trong đó một dự án chính bao gồm một hoặc nhiều thư viện và mã để tích hợp chúng. Khi chạy trình soạn thảo từ dự án chính, nó không sử dụng tệp composer.lock của thư viện, do đó, nó sẽ cài đặt các phụ thuộc của nó ở phiên bản mới nhất. Tôi nghĩ rằng điều này sẽ tương tự khi kiểm tra thư viện của bạn.
Jeroen Fiege

2
Cam kết tệp khóa với thư viện có lẽ là một điều tốt - các tài liệu tệp khóa mà phiên bản phụ thuộc đã được cài đặt khi bộ kiểm thử được chạy. Điều đó đặc biệt quan trọng trong một nhóm và đặc biệt là trong môi trường tích hợp liên tục.
mindplay.dk

Xung đột không tầm thường có thể phát sinh khi tái hòa nhập trong các nhánh 2 thân cây mà cả hai đều có các gói mới được cài đặt thông qua trình soạn thảo. Đã xảy ra ngay bây giờ :)
g4b0

2
@tonix, tôi có thể trả lời điều này với một số cơ quan có thẩm quyền! Lý do tôi không cam kết composer.lock cho các thư viện của mình là CI của tôi xây dựng thành thạo mỗi đêm bất kể điều gì. Nó đảm bảo rằng nếu bất kỳ sự phụ thuộc nào của thư viện có vấn đề nâng cấp thì người dùng của thư viện sẽ gặp phải, rằng CI thất bại. Hoạt động tốt!
Theodore R. Smith

86

Sau khi thực hiện cả hai cách cho một vài dự án, lập trường của tôi là composer.lockkhông nên cam kết là một phần của dự án.

composer.locklà xây dựng siêu dữ liệu không phải là một phần của dự án. Trạng thái phụ thuộc phải được kiểm soát thông qua cách bạn tạo phiên bản cho chúng (theo cách thủ công hoặc là một phần của quy trình xây dựng tự động của bạn) và không được nhà phát triển cuối cùng tùy ý cập nhật chúng và cam kết tệp khóa.

Nếu bạn lo lắng về sự phụ thuộc của mình thay đổi giữa các bản cập nhật của nhà soạn nhạc thì bạn thiếu tự tin trong sơ đồ phiên bản của mình. Các phiên bản (1.0, 1.1, 1.2, v.v.) nên không thay đổi và bạn nên tránh các ký tự đại diện "dev-" và "X. *" bên ngoài phát triển tính năng ban đầu.

Cam kết tệp khóa là một hồi quy cho hệ thống quản lý phụ thuộc của bạn vì phiên bản phụ thuộc giờ đã quay trở lại được xác định ngầm.

Ngoài ra, dự án của bạn không bao giờ phải được xây dựng lại hoặc có các phụ thuộc của nó được đáp ứng trong từng môi trường, đặc biệt là prod. Việc phân phối của bạn (tar, zip, phar, một thư mục, v.v.) sẽ không thay đổi và được quảng bá qua các môi trường mà không thay đổi.


19
Đã đồng ý. Tôi cảm thấy có ý nghĩa hơn khi chỉ định các phiên bản phụ thuộc trong composer.jsonđó các phiên bản bắt buộc được nêu rõ ràng hơn. Nhưng nếu bạn không đặt các phiên bản cụ thể, tốt hơn là cam kết composer.lock. Thật khó hiểu nếu các phiên bản được chỉ định trong composer.jsonkhác với các phiên bản được cài đặt theo a composer.lock. Ngoài ra, nó phụ thuộc vào ứng dụng (phát hành nội bộ hoặc phát hành chung) và chu kỳ phát triển của nó. Tất nhiên, các tài liệu của nhà soạn nhạc nói , in đậm, "Cam kết composer.lock của ứng dụng của bạn (cùng với composer.json) vào kiểm soát phiên bản" . Chọn một cách khôn ngoan =)
Quinn Comendant

10
Sau nhiều lần tìm kiếm linh hồn, tôi đã quyết định, về điểm này, các tài liệu của nhà soạn nhạc đã sai :) Tôi có một quy tắc là tôi không thêm tài liệu được tạo vào VCS; Tôi cho phép quá trình xây dựng để xử lý điều đó.
Josh Johnson

10
Không phải mã được tạo bằng cách sử dụng máy ép phím sinh học "vật liệu được tạo" của bạn sao? Tôi không chắc chắn đó là một tiêu chí vững chắc để dựa trên chính sách. =)
Quinn Comendant

5
@borfast Tôi biết rằng tôi hơi muộn để trò chuyện vì vậy bạn có thể đã thấy điều này vào thời điểm này, nhưng, bạn có thể chỉ định một hàm băm trong composer.json. Trong requirephần này, bạn có thể đặt : "repo": "dev-master#2633721877cae79ad461f3ca06f3f77fb4fce02e". Điều này sẽ 1) đi đến chi nhánh, 2) kiểm tra băm đó, 3) nếu không tìm thấy băm trên chi nhánh, tuy nhiên, nó sẽ kiểm tra phần đầu của chi nhánh được chỉ định (chính trong trường hợp này).
CEPA

5
@CEPA - Thật kỳ quặc. Tôi đã dự kiến ​​nó sẽ thất bại nếu không thể tìm thấy hàm băm. Có vẻ nguy hiểm.
Nathan JB

31
  1. Bạn không nên cập nhật phụ thuộc trực tiếp vào Sản xuất.
  2. Phiên bản bạn nên kiểm soát tệp composer.lock của bạn .
  3. Phiên bản bạn không nên kiểm soát các phụ thuộc thực tế của bạn.

1. Bạn không nên cập nhật phụ thuộc trực tiếp vào Sản xuất , vì bạn không biết điều này sẽ ảnh hưởng đến sự ổn định của mã của bạn như thế nào. Có thể có các lỗi được giới thiệu với các phụ thuộc mới, nó có thể thay đổi cách mã hoạt động ảnh hưởng đến chính bạn, nó có thể không tương thích với các phụ thuộc khác, v.v. Bạn nên làm điều này trong môi trường dev, sau khi kiểm tra hồi quy và kiểm tra hồi quy thích hợp, v.v. .

2. Phiên bản bạn nên kiểm soát tệp composer.lock của mình , vì điều này lưu trữ thông tin về các phụ thuộc của bạn và về các phụ thuộc của các phụ thuộc sẽ cho phép bạn sao chép trạng thái hiện tại của mã. Điều này rất quan trọng, bởi vì, tất cả các thử nghiệm và phát triển của bạn đã được thực hiện đối với mã cụ thể. Không quan tâm đến phiên bản thực tế của mã mà bạn có tương tự như tải lên các thay đổi mã cho ứng dụng của bạn và không kiểm tra chúng. Nếu bạn đang nâng cấp các phiên bản phụ thuộc của mình, đây sẽ là một hành động sẵn sàng và bạn nên cẩn thận để đảm bảo mọi thứ vẫn hoạt động. Mất một hoặc hai giờ trong thời gian trở lại phiên bản phát hành trước đó có thể khiến bạn mất rất nhiều tiền.

Một trong những đối số mà bạn sẽ thấy về việc không cần composer.lock là bạn có thể đặt phiên bản chính xác mà bạn cần trong tệp composer.json và theo cách này, mỗi khi ai đó chạy composer install, nó sẽ cài đặt chúng giống nhau mã. Điều này không đúng, bởi vì, các phụ thuộc của bạn có các phụ thuộc riêng và cấu hình của chúng có thể được chỉ định theo định dạng cho phép cập nhật lên các phần phụ hoặc thậm chí có thể là toàn bộ các phiên bản.

Điều này có nghĩa là ngay cả khi bạn chỉ định rằng bạn muốn Laravel 4.1.31 trong composer.json , thì tệp Laravel trong tệp composer.json của nó có thể có các phụ thuộc riêng được yêu cầu như bộ phân phối sự kiện Symfony: 2. *. Với loại cấu hình này, bạn có thể kết thúc với Laravel 4.1.31 với trình phân phối sự kiện Symfony 2.4.1 và ai đó trong nhóm của bạn có thể có Laravel 4.1.31 với trình phân phối sự kiện 2.6.5, tất cả sẽ phụ thuộc vào khi nào là lần cuối cùng bạn chạy cài đặt trình soạn thảo.

Vì vậy, có tệp composer.lock của bạn trong hệ thống phiên bản sẽ lưu trữ phiên bản chính xác của phụ thuộc phụ này, vì vậy, khi bạn và đồng đội của bạn cài đặt trình soạn thảo (đây là cách bạn sẽ cài đặt các phụ thuộc của mình dựa trên trình soạn thảo. khóa ) cả hai bạn sẽ có được các phiên bản giống nhau.

Nếu bạn muốn cập nhật thì sao? Sau đó, trong môi trường dev của bạn chạy : composer update, điều này sẽ tạo ra một tệp composer.lock mới (nếu có cái gì đó mới) và sau khi bạn kiểm tra nó, và kiểm tra và hồi quy QA kiểm tra nó và các công cụ. Bạn có thể đẩy nó cho mọi người khác tải xuống composer.lock mới , vì nó an toàn để nâng cấp.

3. Bạn không nên kiểm soát phiên bản phụ thuộc thực tế của mình , vì nó không có ý nghĩa. Với composer.lock, bạn có thể cài đặt phiên bản chính xác của các phụ thuộc và bạn không cần phải cam kết chúng. Tại sao bạn lại thêm vào repo 10000 tệp phụ thuộc của mình, khi bạn không cần phải cập nhật chúng. Nếu bạn yêu cầu thay đổi một trong những điều này, bạn nên rẽ nhánh nó và thực hiện các thay đổi của bạn ở đó. Và nếu bạn lo lắng về việc phải tìm nạp các phụ thuộc thực tế mỗi lần xây dựng hoặc phát hành, nhà soạn nhạc có các cách khác nhau để giảm bớt vấn đề này, bộ đệm, tệp zip, v.v.


1
Cảm ơn, tôi nghĩ câu trả lời này giải thích lý do tại sao bạn nên phiên bản composer.lock, và nếu không, hậu quả là gì và nếu bạn có thể sống với chúng.
Jose Lozano Hernandez

8

Sau đó, bạn cam kết composer.jsonvới dự án của mình và mọi người khác trong nhóm của bạn có thể chạy cài đặt trình soạn thảo để cài đặt các phụ thuộc dự án của bạn.

Điểm của tệp khóa là ghi lại các phiên bản chính xác được cài đặt để chúng có thể được cài đặt lại. Điều này có nghĩa là nếu bạn có thông số phiên bản là 1. * và đồng nghiệp của bạn chạy cập nhật trình soạn thảo cài đặt 1.2.4, sau đó cam kết tệp composer.lock, khi bạn cài đặt trình soạn thảo, bạn cũng sẽ nhận được 1.2.4, thậm chí nếu 1.3.0 đã được phát hành. Điều này đảm bảo mọi người làm việc trong dự án đều có cùng một phiên bản chính xác.

Điều này có nghĩa là nếu bất cứ điều gì đã được cam kết kể từ lần cuối cùng cài đặt trình soạn thảo được thực hiện, thì, nếu không có tệp khóa, bạn sẽ nhận được mã của bên thứ ba mới được kéo xuống .

Một lần nữa, đây là một vấn đề nếu bạn lo lắng về việc phá mã của mình. Và đó là một trong những lý do tại sao điều quan trọng là suy nghĩ về Trình soạn thảo là tập trung xung quanh tệp composer.lock.

Nguồn: Nhà soạn nhạc: Đó là tất cả về tập tin khóa .


Cam kết composer.lock của ứng dụng của bạn (cùng với composer.json) vào kiểm soát phiên bản. Điều này rất quan trọng vì lệnh cài đặt sẽ kiểm tra xem có tệp khóa hay không và nếu có, nó sẽ tải xuống các phiên bản được chỉ định ở đó (bất kể composer.json nói gì). Điều này có nghĩa là bất cứ ai thiết lập dự án sẽ tải xuống cùng một phiên bản chính xác của các phụ thuộc. Máy chủ CI, máy sản xuất, nhà phát triển khác trong nhóm của bạn, mọi thứ và mọi người đều chạy trên cùng một phụ thuộc, điều này làm giảm khả năng xảy ra lỗi chỉ ảnh hưởng đến một số phần của việc triển khai. Ngay cả khi bạn phát triển một mình, trong sáu tháng khi cài đặt lại dự án, bạn có thể cảm thấy tự tin rằng các phụ thuộc được cài đặt vẫn hoạt động ngay cả khi phụ thuộc của bạn phát hành nhiều phiên bản mới kể từ đó.

Nguồn: Nhà soạn nhạc - Cách sử dụng cơ bản .


1

Nếu bạn lo lắng về việc phá mã của mình, bạn nên cam kết composer.lock với hệ thống kiểm soát phiên bản của mình để đảm bảo tất cả các cộng tác viên dự án của bạn đang sử dụng cùng một phiên bản mã. Nếu không có tệp khóa, bạn sẽ nhận được mã bên thứ ba mới được kéo xuống mỗi lần.

Ngoại lệ là khi bạn sử dụng một ứng dụng meta, thư viện nơi các phụ thuộc sẽ được cập nhật khi cài đặt (như Ứng dụng Zend Framework 2 Skeleton ). Vì vậy, mục đích là để lấy các phụ thuộc mới nhất mỗi khi bạn muốn bắt đầu phát triển.

Nguồn: Nhà soạn nhạc: Đó là tất cả về tập tin khóa

Xem thêm: Sự khác biệt giữa cập nhật của nhà soạn nhạc và cài đặt của nhà soạn nhạc là gì?


1

Không có câu trả lời chính xác cho điều này.

Nói chung, nhà soạn nhạc không nên làm những gì hệ thống xây dựng có nghĩa là làm và bạn không nên đưa composer.lock vào VCS. Nhà soạn nhạc kỳ lạ có thể có nó ngược. Người dùng cuối thay vì sản xuất không nên sử dụng tệp khóa. Thông thường hệ thống xây dựng của bạn giữ các ảnh chụp nhanh, các thư mục có thể tái sử dụng, v.v. chứ không phải là một thư mục trống mỗi lần. Mọi người kiểm tra lib từ nhà soạn nhạc có thể muốn lib đó sử dụng khóa để các phụ thuộc mà tải lib đã được kiểm tra.

Mặt khác, điều đó làm tăng đáng kể gánh nặng quản lý phiên bản, nơi bạn gần như chắc chắn muốn có nhiều phiên bản của mọi thư viện vì các phụ thuộc sẽ bị khóa chặt. Nếu mỗi thư viện có thể có một phiên bản hơi khác nhau thì bạn cần một số hỗ trợ nhiều phiên bản thư viện và bạn cũng có thể nhanh chóng thấy kích thước của các phụ thuộc cần thiết xuất hiện, do đó lời khuyên nên giữ nó trên lá.

Mang nó lên máy bay, tôi thực sự không thấy các tệp khóa trở nên hữu ích trong các thư viện hoặc các công việc của riêng bạn. Nó chỉ được sử dụng cho tôi trong nền tảng xây dựng / thử nghiệm của tôi, nó vẫn tồn tại bất kỳ tài sản nào được mua bên ngoài chỉ cập nhật chúng khi được yêu cầu, cung cấp các bản dựng lặp lại để thử nghiệm, xây dựng và triển khai. Mặc dù có thể được giữ trong VCS nhưng không phải lúc nào nó cũng được giữ bằng cây nguồn, các cây xây dựng sẽ ở nơi khác trong cấu trúc VCS hoặc được quản lý bởi một hệ thống khác ở nơi khác. Nếu nó được lưu trữ trong một VCS, điều gây tranh cãi là có nên giữ nó trong cùng một repo như cây nguồn hay không bởi vì nếu không, mỗi lần kéo có thể mang lại một khối lượng tài sản xây dựng. Tôi khá thích có tất cả mọi thứ trong một repo được sắp xếp tốt, ngoại trừ thông tin sản xuất / nhạy cảm và phình to.

SVN có thể làm điều đó tốt hơn git vì nó không buộc bạn phải mua toàn bộ repo (mặc dù tôi nghi ngờ rằng nó không thực sự cần thiết cho git nhưng hỗ trợ cho điều đó bị hạn chế và nó không được sử dụng phổ biến). Repos xây dựng đơn giản thường chỉ là một nhánh lớp phủ mà bạn hợp nhất / xuất cây xây dựng vào. Một số người kết hợp các nguồn lực bên ngoài trong cây nguồn của họ hoặc tách riêng hơn nữa, bên ngoài, xây dựng và cây nguồn. Nó thường phục vụ hai mục đích, xây dựng bộ nhớ đệm và các bản dựng lặp lại nhưng đôi khi giữ nó tách biệt ở ít nhất một số cấp độ cũng cho phép các bản dựng mới / trống và nhiều bản dựng dễ dàng.

Có một số chiến lược cho việc này và không có chiến lược nào đặc biệt hiệu quả với việc duy trì danh sách nguồn trừ khi bạn giữ nguồn bên ngoài trong cây nguồn của mình.

Họ cũng có những thứ như băm trong tệp, làm thế nào để hợp nhất khi hai người cập nhật các gói? Điều đó một mình sẽ khiến bạn nghĩ rằng có lẽ điều này là hiểu sai.

Các đối số mà mọi người đưa ra cho các tệp khóa là những trường hợp họ đã đưa ra một cái nhìn rất cụ thể và hạn chế về vấn đề. Muốn xây dựng lặp lại và xây dựng nhất quán? Bao gồm thư mục nhà cung cấp trong VCS. Sau đó, bạn cũng tăng tốc tìm nạp tài sản cũng như không phải phụ thuộc vào các tài nguyên bên ngoài có khả năng bị hỏng trong quá trình xây dựng. Không có đường ống xây dựng và triển khai nào tôi tạo yêu cầu truy cập bên ngoài trừ khi thực sự cần thiết. Nếu bạn phải cập nhật tài nguyên bên ngoài thì đó là một lần và chỉ một lần. Những gì nhà soạn nhạc đang cố gắng đạt được có ý nghĩa đối với một hệ thống phân tán trừ khi được đề cập trước đó là vô nghĩa bởi vì nó sẽ kết thúc với địa ngục phụ thuộc thư viện để cập nhật thư viện với các xung đột và cập nhật chậm nhất là chậm nhất để cập nhật gói.

Ngoài ra, tôi cập nhật dữ dội. Mỗi khi tôi phát triển, tôi cập nhật và kiểm tra mọi thứ. Có một cửa sổ rất nhỏ để phiên bản đáng chú ý trôi vào. Thực tế, khi phiên bản ngữ nghĩa được duy trì, có xu hướng dành cho nhà soạn nhạc, bạn không cho rằng có nhiều vấn đề tương thích hoặc phá vỡ.

Trong composer.json, bạn đặt các gói bạn yêu cầu và các phiên bản của chúng. Bạn có thể khóa các phiên bản ở đó. Tuy nhiên, các gói đó cũng có các phụ thuộc với các phiên bản động không bị khóa bởi composer.json (mặc dù tôi không hiểu tại sao bạn cũng không thể đặt chúng ở đó nếu bạn muốn chúng bị khóa phiên bản) để người khác chạy cài đặt trình soạn thảo nhận được một cái gì đó khác nhau mà không có khóa. Bạn có thể không quan tâm rất nhiều về điều đó hoặc bạn có thể quan tâm, nó phụ thuộc. Bạn có nên quan tâm? Có lẽ ít nhất là một chút, đủ để đảm bảo bạn biết về nó trong mọi tình huống và tác động tiềm năng, nhưng nó cũng không phải là vấn đề nếu bạn luôn có thời gian để DRY chạy trước và sửa mọi thứ đã được cập nhật.

Trình soạn thảo rắc rối đang cố gắng tránh đôi khi không có ở đó và rắc rối có các tệp khóa của trình soạn thảo có thể gây ra là rất đáng kể. Họ hoàn toàn không có quyền nói với người dùng những gì họ nên hoặc không nên làm liên quan đến tài sản xây dựng so với tài sản nguồn (có nên tham gia riêng biệt trong VCS không) vì đó không phải là việc của họ, họ không phải là ông chủ của bạn hoặc tôi. "Nhà soạn nhạc nói" không phải là người có thẩm quyền, họ không phải là sĩ quan cấp trên của bạn cũng như họ không dành cho ai bất kỳ ưu thế nào về chủ đề này. Chỉ có bạn biết tình hình thực tế của bạn và những gì tốt nhất cho điều đó. Tuy nhiên, họ có thể khuyên một quá trình hành động mặc định cho người dùng không hiểu cách mọi thứ hoạt động trong trường hợp bạn có thể muốn theo dõi nhưng cá nhân tôi không nghĩ rằng ' thay thế thực sự để biết cách mọi thứ hoạt động và có thể thực hiện đúng yêu cầu của bạn. Cuối cùng, câu trả lời của họ cho câu hỏi đó là một phỏng đoán tốt nhất. Những người làm nhà soạn nhạc không biết bạn nên giữ nhà soạn nhạc của mình ở đâu. Cũng không nên. Trách nhiệm duy nhất của họ là cho bạn biết nó là gì và nó làm gì. Ngoài ra, bạn cần phải quyết định những gì tốt nhất cho bạn.

Giữ tập tin khóa là vấn đề về khả năng sử dụng vì nhà soạn nhạc rất bí mật về việc nó sử dụng khóa hay JSON và không phải lúc nào cũng sử dụng tốt cả hai cùng nhau. Nếu bạn chạy cài đặt, nó chỉ sử dụng tệp khóa, nó sẽ xuất hiện, vì vậy nếu bạn thêm một cái gì đó vào composer.json thì nó sẽ không được cài đặt vì nó không nằm trong khóa của bạn. Nó không trực quan ở tất cả các hoạt động thực sự làm và những gì chúng đang làm liên quan đến tệp json / lock và đôi khi dường như không có ý nghĩa gì (trợ giúp nói cài đặt có tên gói nhưng khi cố gắng sử dụng thì nó nói không ).

Để cập nhật khóa hoặc về cơ bản áp dụng các thay đổi từ json, bạn phải sử dụng cập nhật và bạn có thể không muốn cập nhật mọi thứ. Khóa được ưu tiên để chọn những gì nên được cài đặt. Nếu có một tập tin khóa, đó là những gì được sử dụng. Bạn có thể hạn chế cập nhật phần nào nhưng hệ thống vẫn chỉ là một mớ hỗn độn.

Cập nhật mất một tuổi, hợp đồng RAM. Tôi cũng nghi ngờ nếu bạn chọn một dự án không được chạm vào trong một thời gian mà nó trông giống như các phiên bản mà nó đã phát hành, sẽ có nhiều thời gian hơn và nó có thể không làm điều đó một cách hiệu quả mà chỉ bóp nghẹt nó.

Họ rất lén lút khi có các lệnh tổng hợp bí mật mà bạn không thể ngờ là hợp thành. Theo mặc định, lệnh xóa trình soạn thảo xuất hiện trên bản đồ để cập nhật trình soạn thảo và xóa trình soạn thảo chẳng hạn.

Câu hỏi bạn thực sự cần đặt ra không phải là liệu bạn có nên giữ khóa trong cây nguồn của mình hay thay vào đó là bạn có nên duy trì nó ở đâu đó trong một số thời trang hay không mà là bạn nên hỏi nó thực sự làm gì, sau đó bạn có thể tự quyết định khi bạn cần kiên trì nó và ở đâu.

Tôi sẽ chỉ ra rằng có khả năng có khóa là một sự tiện lợi lớn khi bạn có một chiến lược kiên trì phụ thuộc bên ngoài mạnh mẽ vì nó theo dõi bạn thông tin hữu ích để theo dõi (nguồn gốc) và cập nhật nó nhưng nếu bạn không sau đó không có ở đây không có. Nó không hữu ích khi nó buộc cổ họng bạn là một lựa chọn bắt buộc để làm ô nhiễm cây nguồn của bạn. Đó là một điều rất phổ biến để tìm thấy trong các cơ sở mã di sản, nơi mọi người đã thực hiện nhiều thay đổi cho composer.json chưa thực sự được áp dụng và bị phá vỡ khi mọi người cố gắng sử dụng trình soạn thảo. Không có composer.lock, không có vấn đề desync.


0

Vâng rõ ràng.

Đó là bởi vì một nhà soạn nhạc được cài đặt cục bộ sẽ ưu tiên đầu tiên cho tệp composer.lock so với composer.json.

Nếu tệp khóa không có sẵn trong vcs, trình soạn thảo sẽ trỏ đến tệp composer.json để cài đặt các phiên bản hoặc phụ thuộc mới nhất.

Tệp composer.lock duy trì sự phụ thuộc sâu hơn, nghĩa là nó chỉ ra cam kết thực tế của phiên bản của gói mà chúng tôi đưa vào phần mềm của chúng tôi, do đó đây là một trong những tệp quan trọng nhất xử lý sự phụ thuộc tốt hơn.

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.