Подтвердить что ты не робот

Должен ли я передать файлы narn.lock и package-lock.json?

Мы используем пряжу для всех наших детерминированных установок pkg, но не мешаем пользователю использовать npm - я предполагаю, что оба эти файла будут вызывать проблемы. Должен ли быть добавлен в ваш .gitignore dir?

4b9b3361

Ответ 1

Всегда фиксируйте файлы блокировки зависимостей в целом

Как описано в другом месте, файлы блокировки зависимостей, которые поддерживаются многими системами управления пакетами (например, composer и bundler), должны быть привязаны к базе кода в проектах конца цепочки - так, чтобы каждый, кто пытается запустить этот проект, делал так с точно проверенным набором зависимостей.

Менее ясно, должны ли файлы блокировки всегда фиксироваться в пакетах, которые предназначены для включения в другие проекты (где желательны более свободные зависимости). Однако и Yarn, и NPM (как описано в @Cyrille) интеллектуально игнорируют yarn.lock и package-lock.json соответственно, где это необходимо, что делает безопасным всегда фиксировать эти файлы блокировки.

Поэтому вы всегда должны фиксировать хотя бы один из yarn.lock или package-lock.json зависимости от того, какой менеджер пакетов вы используете.

Должны ли вы зафиксировать как yarn.lock, так и package-lock.json?

В настоящее время у нас есть две разные системы управления пакетами, которые устанавливают один и тот же набор зависимостей из package.json, но генерируют и читают из двух разных файлов блокировки. NPM 5 генерирует package-lock.json, тогда как Yarn генерирует yarn.lock.

Если вы package-lock.json вы создаете поддержку для людей, устанавливающих ваши зависимости с помощью NPM 5. Если вы yarn.lock, вы создаете поддержку для людей, устанавливающих зависимости с помощью Yarn.

yarn.lock ли вы коммит yarn.lock или package-lock.json или оба, зависит от того, используют ли разработчики в вашем проекте только Yarn или NPM 5 или оба. Если ваш проект с открытым исходным кодом, наиболее дружественным для сообщества будет, вероятно, сделать коммит и иметь автоматизированный процесс, обеспечивающий постоянную синхронизацию yarn.lock и package-lock.json.

Обновление: Yarn теперь ввел команду import которая сгенерирует файл yarn.lock из файла package-lock.json. Это может быть полезно для синхронизации двух файлов. (Спасибо, слабый)


Эти вопросы подробно обсуждались на проекте пряжи в:

Оба сейчас закрыты.

Ответ 2

Вы должны зафиксировать 1 файл блокировки дерева зависимостей, но вы не должны совершать оба. Это также требует стандартизации ни пряжи, ни npm (не для обоих) для создания + разработки проекта с помощью.

Здесь прямая статья о том, почему yarn.lock должен быть зафиксирован, если вы стандартизируете пряжу.

Если вы фиксируете как файл yarn.lock, так и файлы package-lock.json, существует много способов, которыми эти два файла могут предоставлять разные деревья зависимостей (даже если алгоритмы разрешения нитей и npm-деревьев идентичны), и это не - чтобы они обеспечивали точно такой же ответ. Поскольку это нетривиально, маловероятно, что одно и то же дерево зависимостей будет поддерживаться в обоих файлах, и вы не хотите различного поведения в зависимости от того, была ли построена с использованием пряжи или npm.

Если и когда пряжа переключается с yarn.lock на package-lock.json (здесь), то выбор файла блокировки для фиксации становится легко, и нам больше не нужно беспокоиться о пряже и npm, что приводит к разным сборкам. Основываясь на этом сообщении в блоге, это изменение не следует ожидать в ближайшее время (в блоге также описываются различия между yarn.lock и package-lock.json.

Ответ 3

Здесь мое эмпирическое правило: если вы работаете над приложением, зафиксируйте файл блокировки. Если вы поддерживаете библиотеку, добавьте ее в свой игнорируемый список. В любом случае вы должны использовать точные диапазоны semver в package.json. Yehuda Katz (cached) написал большое объяснение когда нужно зафиксировать Gemfile.lock (файл блокировки Ruby), а когда - нет. По крайней мере, прочитайте раздел tl; dr.

Ответ 4

Я думал о том же вопросе. Вот мои мысли, надеюсь, это поможет:

В документации 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 установит последнюю версию, которая удовлетворяет диапазонам всех ваших зависимостей. Это означает, что вы всегда хотите протестировать свой модуль с этими вариантами ваших зависимостей, а не с тем, который вы установили, когда начали писать свой модуль. Так что в этом случае package-lock.json явно бесполезен. Более того, это может раздражать.

Ответ 5

Эти файлы управляются вашими инструментами, поэтому, предполагая, что использование пряжи эффективно обновит package-lock.json -I, предположим, что оба файла отлично работают.

Я думаю, что наиболее важным для вашего пользователя является package-lock.json (я, например, не использую пряжу), поэтому это нужно сделать.

Для yarn.lock это зависит от того, работаете ли вы в одиночку или в команде. Если соло, то я полагаю, что нет необходимости его совершать. Если вы (планируете) работать в команде, то вы, вероятно, должны ее совершить, по крайней мере до тех пор, пока пряжа не поддерживает

Я полагаю, что команда нитей в конечном итоге перестанет использовать yarn.lock и вместо этого использовать package-json.lock, в это время она станет проще 😛

Ответ 6

Вы правы! Разрешение использования npm и yarn может вызвать проблемы. Посмотрите на эту статью.

В настоящее время планировалось добавить несколько предупреждений пользователям, которые используют yarn и npm в одном и том же хранилище для установки пакетов.

Мы настоятельно рекомендуем вам удалить файл package-lock.json если вы решите использовать пряжу, чтобы избежать путаницы в будущем и возможных проблем с согласованностью.

Возможно, вы не захотите использовать npm и yarn качестве менеджера пакетов.

Ответ 7

Нет, одновременное использование обоих файлов блокировки чаще всего приведет к несоответствиям в вашем дереве зависимостей, особенно при совместной работе в команде. Игнорирование одного или другого замка - простое решение. Просто убедитесь, что ваша команда понимает и согласна с этим изменением.