Точної відповіді на це немає.
Взагалі кажучи, композитор не повинен робити те, що має бути зроблена система збирання, і ви не повинні ставити composer.lock у VCS. Композитор може, як не дивно, мати це назад. Кінцеві користувачі, а не виробники, не повинні використовувати файли блокування. Зазвичай ваша система збирання зберігає знімки, бруски для багаторазового використання, а не порожній dir щоразу. Люди, які виходять із композитора, можуть захотіти, щоб ця шапка використовувала замок, щоб залежність, яку навантажували ліб, була протестована.
З іншого боку, що значно збільшує тягар управління версіями, де ви майже напевно хочете, щоб кілька версій кожної бібліотеки, оскільки залежності будуть суворо заблоковані. Якщо кожна бібліотека, ймовірно, має дещо іншу версію, тоді вам потрібна підтримка декількох бібліотечних версій, і ви також можете швидко побачити потрібний розмір залежностей, тому радимо зберігати її на аркуші.
Враховуючи це на борту, я дійсно не знаходжу файли блокування, щоб бути корисними ні бібліотекам, ні вашим власним робочим каталогам. Для мене це лише користь у моїй платформі зборки / тестування, яка зберігає будь-які зовнішні активи, лише оновлюючи їх за потреби, надаючи повторювані збірки для тестування, збирання та розгортання. Хоча це може бути збережено у VCS, воно не завжди зберігається з деревом-джерелом, але дерева збірки будуть або в іншому місці структури VCS, або керуватися іншою системою десь в іншому місці. Якщо він зберігається у VCS, дискусійним є питання про те, чи потрібно тримати його в тому ж репо, що і вихідні дерева, тому що в іншому випадку кожен потяг може принести масу активів нарощування. Мені дуже подобається, щоб все було в добре організованому репо, за винятком виробничих / чутливих даних та можливостей.
SVN може зробити це краще, ніж git, оскільки він не змушує вас придбати всю репо-репортаж (хоча я підозрюю, що насправді для git теж не потрібна, але підтримка цього обмежена, і вона не використовується зазвичай). Прості репозити збірки, як правило, є лише накладеною гілкою, в яку ви зливаєте / експортуєте дерево збірки. Деякі люди поєднують ресурси, використовувані у своєму вихідному дереві, або відокремлюють далі, зовнішні, будівельні та вихідні дерева. Зазвичай він служить двом цілям, кешування збірок і повторюваних збірок, але іноді тримаючи його окремо хоча б на якомусь рівні, також дозволяється створювати свіжі / порожні збірки та безліч збірок.
Для цього існує низка стратегій, і жодна з них не справляється із збереженням списку джерел, якщо ви не зберігаєте зовнішнє джерело у своєму дереві джерел.
У них також є такі речі, як хеші у файлі, як це злитися, коли двоє людей оновлюють пакети? Це одне повинно змусити вас думати, можливо, це неправильно пояснено.
Аргументи, які люди висувають для файлів блокування, - це випадки, коли вони сприйняли дуже специфічний та обмежуючий погляд на проблему. Хочете повторюваних і послідовних збірок? Включіть папку постачальника у VCS. Тоді ви також прискорите отримання активів, а також не потрібно залежати від потенційно порушених зовнішніх ресурсів під час збирання. Жоден із створених мною трубопроводів побудови та розгортання не вимагає зовнішнього доступу, якщо це абсолютно не потрібно. Якщо вам доведеться оновити зовнішній ресурс, це один раз і лише один раз. Те, що композитор намагається досягти, має сенс для розподіленої системи, за винятком випадків, про які говорилося раніше, немає сенсу, оскільки це закінчиться пеклами залежностей бібліотеки для оновлень бібліотек із загальними сутичками та оновленнями, які проходять так само повільно, як найповільніші оновлення пакету.
Додатково я люто оновлююсь. Кожен раз, коли я розвиваюсь, я все оновлюю і тестую. Існує дуже крихітне вікно для проникнення значних версій. Реально також, коли підтримується семантична версія, яка, як правило, призначена для композитора, у вас, мабуть, не так багато проблем із сумісністю чи зривами.
У composer.json ви ставите потрібні вам пакунки та їх версії. Ви можете заблокувати версії там. Однак ці пакети також мають залежність від динамічних версій, які не будуть заблоковані composer.json (хоча я не розумію, чому ви також не могли їх розмістити там, якщо ви хочете, щоб вони були заблоковані), щоб хтось інший, хто працює із композитором, встановив виходить щось інше без блокування. Вас може не хвилювати з цього приводу або, можливо, все одно, це залежить. Ви повинні турбуватися? Напевно, хоч трохи, щоб переконатися, що ви знаєте про це в будь-якій ситуації та потенційному впливі, але це може бути не проблемою, якщо ви завжди матимете час просто СУХИЙ запустити першим і виправити все, що оновилося.
Композитор клопоту намагається уникати іноді просто не там, і клопоту з файлами блокування композитора можуть зробити важливі. Вони абсолютно не мають права говорити користувачам, що вони повинні чи не повинні робити у відношенні побудови проти вихідних активів (чи приєднатись до окремих в VCS), оскільки це не їхня справа, вони не є начальником вас чи мене. "Композитор каже:" це не влада, вони не є вашим старшим офіцером, і вони нікому не дають переваги з цього приводу. Тільки ви знаєте своє реальне становище і що для цього найкраще. Однак вони можуть порадити звичайний спосіб дій користувачам, які не розуміють, як все працює, і в такому випадку ви можете дотримуватися цього, але особисто я не думаю, що " справжній замінник того, щоб знати, як все працює, і вміти правильно тренувати ваші вимоги. Зрештою, їх відповідь на це питання - найкраща здогадка. Люди, які складають композитора, не знають, де слід тримати ваш composer.lock, а також не слід. Їх єдина відповідальність - сказати вам, що це таке і що робить. Поза цим вам потрібно вирішити, що краще для вас.
Збереження файлу блокування є проблематичним для зручності використання, оскільки композитор дуже секретно стосується того, використовує він замок або JSON і не завжди добре використовувати обидва разом. Якщо ви запустите встановити, він використовує лише файл блокування, він з’явиться, тому якщо ви додасте щось до composer.json, він не буде встановлений, оскільки він не знаходиться у вашому блокуванні. Зовсім не інтуїтивно зрозуміло, що насправді виконують операції та що вони роблять щодо файлу json / lock, а іноді, здається, навіть не має сенсу (довідка каже, що встановлення займає назву пакета, але при спробі його використання говорить, що ні ).
Щоб оновити блокування або в основному застосувати зміни з json, вам доведеться використовувати оновлення, і ви, можливо, не захочете все оновлювати. Замок має перевагу у виборі того, що слід встановити. Якщо є файл блокування, це те, що використовується. Можна дещо обмежити оновлення, але система все ще просто безлад.
Оновлення займає вік, концерти оперативної пам’яті. Я також підозрюю, що якщо ви підбираєте проект, який не чіпали на деякий час, що він виглядав із версій, які у нього з'явилися, яких з часом буде більше, і він, мабуть, не робить цього ефективно, що просто задушить його.
Вони дуже примхливі, якщо мова йде про секретні складені команди, яких ви не могли розраховувати на складання. За замовчуванням команда видалення композитора відображається на картах для оновлення композитора, наприклад, видалення композитора.
Питання, яке вам справді потрібно задати, полягає не в тому, чи слід тримати замок у вашому вихідному дереві, або, чи потрібно продовжувати його десь якимось чином чи ні, а краще запитати, що він насправді робить, тоді ви можете вирішити для себе коли вам потрібно це наполегливо і де.
Я зазначу, що можливість заблокувати замовлення - це велика зручність, коли у вас є надійна стратегія збереження зовнішньої залежності, оскільки вона відстежує вам інформацію, корисну для відстеження цього (витоків) та оновлення, але якщо ви цього не зробите значить, ні тут, ні там. Це не корисно, коли його змушують опустити горло як обов'язковий варіант, щоб він забруднив ваші дерева-джерела. Дуже часто зустрічається у застарілих кодових базах, де люди вносили багато змін у composer.json, які насправді не застосовувались та порушуються, коли люди намагаються використовувати композитор. Немає composer.lock, немає проблеми з десинхронізацією.