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.