Ми використовуємо пряжу для всіх наших детермінованих установок на кг, але не перешкоджаємо користувачу використовувати npm - я думаю, що обидва ці файли можуть викликати проблеми. Чи слід додати його до вашого .gitignore dir?
Ми використовуємо пряжу для всіх наших детермінованих установок на кг, але не перешкоджаємо користувачу використовувати npm - я думаю, що обидва ці файли можуть викликати проблеми. Чи слід додати його до вашого .gitignore dir?
Відповіді:
Як описано в іншому місці, файли блокування залежностей, які підтримуються багатьма системами управління пакетами (наприклад: композитор і постачальник ), повинні бути задіяні в кодовій базі в кінцевих ланцюжкових проектах, так що кожен окремий чоловік, який намагається запустити цей проект, робить так із точно перевіреним набором залежностей.
Менш зрозуміло, чи слід завжди блокувати файли блокування в пакети, які призначені для включення до інших проектів (де бажані більш слабкі залежності). Однак і Пряжа, і NPM (як охоплюється @Cyrille) розумно ігнорують yarn.lock
і, package-lock.json
відповідно, там, де це необхідно, роблячи безпечним завжди робити ці замкові файли.
Тому ви завждиyarn.lock
package-lock.json
повинні скористатися хоча б одним або залежно від того, який менеджер пакунків ви використовуєте.
В даний час ми маємо дві різних системи управління пакетами, які , як встановити один і той же набір залежностей від package.json
, але які генерують і зчитується з двох різних файлів блокування. NPM 5 генерує package-lock.json
, тоді як пряжа генерує yarn.lock
.
Якщо ви берете на себе зобов’язання, package-lock.json
ви створюєте підтримку для людей, які встановлюють ваші залежності за допомогою NPM 5. Якщо ви берете на себе зобов’язання yarn.lock
, ви створюєте підтримку для людей, які встановлюють залежності за допомогою Пряжі.
Незалежно від того, чи ви вирішите взяти на себе зобов’язання, yarn.lock
чи те package-lock.json
чи інше, залежить від того, чи користувачі, що розробляють ваш проект, використовують лише пряжу, NPM 5 або те й інше. Якщо ваш проект є відкритим кодом, найімовірніше, що потрібно зробити, це, мабуть, зробити зобов’язання здійснити обоє та мати автоматизований процес, щоб забезпечити yarn.lock
та package-lock.json
завжди бути синхронізованим.
Оновлення: Пряжа тепер ввела в import
команду , яка буде генерувати yarn.lock
файл з package-lock.json
файлу. Це може бути корисно для синхронізації двох файлів. (Спасибі @weakish)
Ці питання були детально обговорені в рамках проекту Пряжа в:
Обидва зараз закриті.
yarn import
була представлена в 2018 році. yarnpkg.com/blog/2018/06/04/yarn-import-package-lock
Ви повинні вчинити 1 файл блокування дерева залежності, але ви не повинні робити обох. Це також вимагає стандартизації або пряжі, або npm (не обох) для складання + розробки проекту.
Ось стаття про пряжу про те, чому yarn.lock слід вчинити, якщо ви стандартизуєте їх на пряжу.
Якщо ви здійснюєте обидва yarn.lock
файл, і package-lock.json
файли, існує багато способів, щоб два файли могли забезпечити різні дерева залежностей (навіть якщо алгоритми роздільної здатності дерева пряжі та npm є однаковими), і це нетривіально, щоб гарантувати, що вони забезпечують саме те така ж відповідь. Оскільки це нетривіально, навряд чи збережеться одне дерево залежностей в обох файлах, і ви не хочете різної поведінки залежно від того, чи було складено за допомогою пряжі чи npm.
Якщо і коли пряжа переходить з використання yarn.lock
на package-lock.json
( випуск тут ), то вибір файлу блокування для фіксації стає простим, і нам більше не доведеться турбуватися про пряжу та npm, що призводить до різних збірок. Виходячи з цієї публікації в блозі , цю зміну не слід очікувати найближчим часом (у публікації блогу також описані відмінності між yarn.lock
та package-lock.json
.
Я думав над тим же питанням. Ось мої думки, сподіваюся, що це допомагає:
Документація npm package-lock.json говорить про таке:
package-lock.json автоматично генерується для будь-яких операцій, де npm модифікує або дерево node_modules, або package.json. Він описує точне дерево, яке було сформовано таким чином, що наступні установки можуть генерувати однакові дерева, незалежно від проміжних оновлень залежності.
Це чудово, тому що заважає ефект "працює на моїй машині".
Без цього файлу, якщо ви npm install --save A
, npm додасте "A": "^1.2.3"
до свого package.json
. Коли хто - то ще працює npm install
над проектом, цілком можливо , що версія 1.2.4
про A
була випущена. Оскільки це остання доступна версія, яка задовольняє діапазон semver, вказаний у вашому package.json
, вона встановить цю версію. Але що робити, якщо в цій версії є нова помилка? У цієї людини виникне проблема, яку ви не зможете відтворити, оскільки у вас була попередня версія, без помилок.
Виправляючи стан вашого node_modules
каталогу, package-lock.json
файл запобігає цій проблемі, оскільки всі матимуть однакові версії кожного пакету.
Але що робити, якщо ви пишете та публікуєте модуль npm? У документації зазначено наступне:
Однією з ключових деталей пакета-lock.json є те, що він не може бути опублікований, і він буде ігнорований, якщо знайдеться в будь-якому іншому місці, крім пакету топлевелю.
Отже, навіть якщо ви зробите це, коли користувач встановить ваш модуль, він / вона не отримає package-lock.json
файл, а лише package.json
файл. Тож npm встановить останню версію, яка задовольняє діапазони semver усіх ваших залежностей. Це означає, що ви завжди хочете перевірити свій модуль на основі цих залежностей, а не той, який ви встановили під час написання модуля. Тож у цьому випадку package-lock.json
явно марно. Більше того, це може дратувати.
Ось моє правило: якщо ви працюєте над додатком, введіть файли блокування. Якщо ви підтримуєте бібліотеку, додайте її до свого ігнорованого списку. У будь-якому випадку ви повинні використовувати точні діапазони semver в package.json
. Єгуда Катц ( кешований ) написав чудове пояснення, коли потрібно виконати Gemfile.lock
(файл блокування Рубі), а коли - ні. Принаймні прочитайте розділ tl; dr.
.gitignore
, і, як правило, в корені проекту.
Ви маєте рацію! Якщо дозволити і те npm
й інше, yarn
це спричинить проблеми. Погляньте на цю статтю .
Наразі ми плануємо додати деякі попередження користувачам, які використовують як
yarn
іnpm
в одному сховищі для встановлення пакетів.Ми настійно рекомендуємо видалити
package-lock.json
файл, якщо ви вирішили використовувати пряжу, щоб уникнути подальшої плутанини та можливих проблем з консистенцією.
Ви можете не хотіти обох npm
і yarn
як вашого менеджера пакунків.
Ці файли керуються вашими інструментами, тож - якщо припустити, що використання пряжі ефективно оновлюватиме - package-lock.json
я вважаю, що введення обох файлів працює добре.
Я вважаю , що найважливіше для користувача є package-lock.json
(я, наприклад, не використовувати пряжу) , так це один має бути вчинена.
Для цього yarn.lock
, залежить, працюєте ви один або в команді. Якщо соло, то, гадаю, немає необхідності робити це. Якщо ви (плануєте) працювати в команді, то, ймовірно, вам слід це зробити, принаймні, поки пряжа не підтримає її 🙂
Я припускаю, що команда пряжі з часом перестане користуватися yarn.lock
та використовувати package-json.lock
, в цей час це стане простішим 😛
Ні, використання обох файлів блокування одночасно найчастіше призведе до невідповідностей у вашому дереві залежностей, особливо при співпраці в команді. Ігнорування одного або іншого замка - це просте рішення. Просто переконайтесь, що ваша команда розуміє та погоджується з цією зміною.