Какова рекомендуемая практика для ограничений версий в rubygem add_dependency?

Что рекомендуется при создании драгоценного камня для ограничения версий зависимостей. Например, я знаю, что мой гем работает с rubyzip версии 2.x, но я также знаю, что он работает и с 1.9. Должен ли я заявить

spec.add_runtime_dependency 'rubyzip', '>1.8'

или если версия rubyzip 1.9 давно устарела, чаще всего «подталкивают» изменения для строки 2.x? Также, если я использую упомянутую строку, то я рискую несовместимостью с будущими версиями, но, с другой стороны, оставляю выбор пользователю.

Примечание: вопросы общие, и зависимость от rubyzip является лишь примером.

Как насчет '>=1.9', '<3'

Stefan 21.05.2019 12:52

Что касается закрытых голосов - я прошу лучшие практики, которые обычно содержат не только мнения, но и такие аргументы, как безопасность, "наименее неожиданно", удобство использования. Этот квест также ценен еще и тем, что ответ НЕ содержится ни в одной существующей документации (мне известно об этом).

gorn 21.05.2019 16:44
Пошаговое руководство по созданию собственного Slackbot: От установки до развертывания
Пошаговое руководство по созданию собственного Slackbot: От установки до развертывания
Шаг 1: Создание приложения Slack Чтобы создать Slackbot, вам необходимо создать приложение Slack. Войдите в свою учетную запись Slack и перейдите на...
0
2
36
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если вы знаете, что ваш гем работает с rubyzip 1.9, то сила людям действительно не нужно использовать >=2.0 с ним.

Конечно, обновление зависимостей было бы хорошей идеей для вашего пользователя библиотеки, но это не работа твой, чтобы быть "обновляющим-вашим-программным-политиком"!

Указание версии должно быть < 3, как правило, рекомендуется (хотя это не всегда делается разработчиками), поскольку существует разумный риск того, что изменение версии основной зависимости будет несовместимо с этой версией вашего кода.

Итак, в качестве компромисса вы можете сделать:

spec.add_runtime_dependency 'rubyzip', '>=1.9', '<3'

См. документация для допустимых примеров синтаксиса.

Я знаю возможный синтаксис, вопрос был больше о том, является ли это рекомендуемой стратегией. Рекомендуется ли оставлять зависимости как можно более широкими?

gorn 21.05.2019 14:27

Я уже ответил на это. Нет, как правило, лучше установить верхнюю границу по крайней мере для основной версии. В противном случае может быть мучительно трудно отследить причину ошибок при обновлении большого количества зависимостей в проекте.

Tom Lord 21.05.2019 14:43

Например, посмотрите на спецификация драгоценных камней для bundler; самая загружаемая рубиновая жемчужина. Некоторые зависимости (намеренно) еще более строгие, но ни одна из них не имеет верхней границы.

Tom Lord 21.05.2019 14:45

Есть исключения; используйте свое собственное лучшее суждение.

Tom Lord 21.05.2019 14:46

Я не согласен. Я бы сказал, что вы должны оставлять зависимости как можно более широкими. Я не вижу никакой пользы в том, чтобы говорить людям не использовать гем только потому, что вы не могли протестировать гем в сравнении с этой будущей версией в прошлом. Если нет никакой подсказки, что будущая версия может сломать ваш драгоценный камень, тогда будьте слишком строги.

spickermann 21.05.2019 14:52

@spickermann Я понимаю, что это несколько самоуверенный ответ (и поэтому, возможно, он не подходит для SO!), Но в мою защиту на сайте rubygems написано: «Важное примечание, которое нужно взять домой, — знать, что другие будут использовать ваши драгоценные камни, поэтому защитите себя от потенциальных ошибок / сбоев в будущих выпусках, используя ~> вместо >=, если это вообще возможно». - и я думаю, что веб-сайт rubygems ближе всего подходит к рекомендациям «рекомендуемой практики».

Tom Lord 21.05.2019 15:48

Rake — отличный пример, демонстрирующий использование ~>, что я и вижу в большинстве случаев. Однако он также использует rake ~> 12.0, что несколько спорно - до недавнего времени я использовал 10.5 (стабильная версия Debian), и я сомневаюсь, что они несовместимы по крайней мере с версией 11.0. Итак, судя по вашему ответу, они, вероятно, должны были использовать `">=10.0", "<13.0". Я прав?

gorn 21.05.2019 16:39

@gorn "Я сомневаюсь, что они несовместимы..." - Если они не несовместимы, то да, на мой взгляд, это был бы более «дружественный к сообществу» дизайн. Но я не знаю, верно ли ваше предположение о совместимости.

Tom Lord 21.05.2019 16:46

На самом деле, @gorn, я из интереса быстро обвинил мерзавца и, конечно же: Есть веская причина, по которой это ограничение было добавлено. Rake v10/v11 несовместим (шумные предупреждения об устаревании) с ruby ​​2.7, поэтому они подняли требования в основной ветке.

Tom Lord 21.05.2019 16:54

Ну, это для более широкого обсуждения «матрицы совместимости», потому что я пытаюсь также поддерживать 1.9 рубинов и т. д. Однако, спасибо за вашу помощь, я буду использовать это. Надеюсь, данное мнение также является передовой практикой ...

gorn 21.05.2019 16:55

Другие вопросы по теме