Почему предпочитаете менеджер пакетов через папку библиотеки?

Когда я думаю о плюсах и минусах статического папку библиотеки и менеджер пакетов, я чувствую, что в Библиотека папка является лучшим подходом.

Плюсы я вижу в папку библиотеки:

  1. Не нужен внешний инструмент для управления пакетами.
  2. Не требуется подключение к интернету для создания.
  3. Быстрое построение (проверка пакета).
  4. Проще среды (менее требуемых знаний).

Плюсы я вижу с менеджером пакетов:

  1. Помогает при сложных зависимостей деревья (и которыми можно управлять загрузкой зависимость вместе со всеми его зависимостями).
  2. Помогает проверить, если новая версия доступна.

Промышленность, похоже, решила идти по пути менеджер пакетов для почти все, что строится сегодня. Так, что я упускаю?

Комментарии к вопросу (25)

Важный момент отсутствует в других ответов:

Используя менеджер пакетов означает иметь конфигурацию, которая указывает, что вы думаете версий библиотек вы using_ и гарантирует, что конфигурации информация на самом деле верна.

Зная, какие библиотеки вы используете, и какая версия, это очень важно, если вы:

  • нужно обновить библиотеку из-за критический баг / дыру в безопасности;
  • или просто нужно проверить, будет ли объявлено дыра в безопасности влияет на вас.

Кроме того, когда вы на самом деле делать обновление, менеджер пакетов (как правило) делает все транзитивные зависимости, обновляются по мере необходимости.

В то время как с либерал папку, у тебя просто куча (возможно, Бинарные, и, возможно, измененные) файлы, и вы'будете иметь, чтобы догадаться, откуда они взялись и какую версию они (или доверять какой-то файл README, который может или не может быть правильным).


Для решения ваших других пунктов:

нет необходимости внешнего инструмент для управления пакетами.

Верно, но а) в качестве разработчика программного обеспечения нужно установить себе множество инструментов, в любом случае, так что одним больше, как правило, не имеет значения, и Б) обычно есть только один или несколько пакетных менеджеров в любой сфере (и Maven/Gradle в для Java, НПМ для JS/машинопись и т. д.), Так что's не как вам нужно, чтобы установить их десятки.

не требуется подключение к интернету для создания.

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

быстрое построение (проверка пакета).

Наверное, правда, но кажется маловероятным, что проверка автономного пакета займет значительное количество времени (это's просто сравнивая некоторые цифры версии). Проверка online может занять некоторое время, но которую можно отключить при желании (если это вообще по умолчанию - Мэйвен например никогда не проверяет наличие обновлений для версии).

проще средах (менее требуемых знаний).

Правда, но, как объяснялось выше, папке Либ также требует знаний. Также, как описано выше, вы'будете, вероятно, работать только с горсткой разные менеджеры пакетов, которые вы'МР уже знаете.

Комментарии (12)

Плюсы папку lib, быстро исчезают после того, как вы перейти от малого масштаба развития, чтобы больше работать.

Например в "пользу" и не требует внешнего инструмента является сфабрикованным работу требуется вручную управлять своей зависимости, поэтому инструмент будет у вас (более чем в одном смысле).

Вы Don'т необходимость подключения к интернету для менеджера пакетов. Вы можете использовать локальные хранилища.

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

Проще средах (меньше знаний требуется)? Опять же, в небольших масштабах развития вполне возможно. Вы сможете вести полностью проект в голове, вплоть до каждого из нескольких библиотек используется. Добавить простой файл Makefile / другие сборочный скрипт и вы'ве получил себе полный пакет.

Но это вовсе'т сделать среды проще, он работает только в простых средах. В больших масштабах развития вы'll быть рады, что вы're, используя стандартные инструменты, а не индивидуальные решения. После всех, вы только должны выучить его один раз (и когда менеджер пакетов дежурные заменен на новый классная вещь, вы должны понять, что слишком).

Комментарии (16)

Вы'вновь отсутствует многих преимущества пакетных менеджеров.

  1. Пакетные менеджеры позволяют избежать проверки большой (несколько Мб или больше) исполняемые файлы в систему управления версиями. Это является анафемой для многих инструментов для управления исходным кодом, распространяющийся ЖКТ является одним из них. У нас был хранилищем нажмите битоприемник's размер границы пару месяцев назад, потому что разработчики проверяли в CocoaPods. Еще один проект уже был на полпути, когда мы мигрировали из SVN, потому что у нас была проверка в нашей библиотеке бинарники (и еще'т быть с помощью NuGet). Поскольку менеджеры пакетов будет скачать пакеты "на лету" для каждого разработчика, они устраняют необходимость проверить эти двоичные файлы.
  2. Они предотвращают смешивание несовместимых файлов/библиотек. Папки могут содержать смешанные версии библиотеки's файлов если кто-то не'т очистить его должным образом во время обновления. Я'вэ видел случай, когда половина двоичные файлы в папке были модернизированы, в результате чего очень странные ошибки. (Это не'т даже аварии!) Нам потребовалось буквально месяцев (не человеко-часов, просто общее время), чтобы выяснить проблему. Позволяя менеджер пакетов контролировать всю папку, вы можете'т получить смешанные варианты; обеспечить стабильность. Они также делают его гораздо труднее использовать несовместимые зависимости, автоматически обновляя все вместе, установке различных версий, где это необходимо, или даже просто бросая предупреждения или ошибки при попытке использовать несовместимые версии библиотек.
  3. Они устанавливают общий конвенции для управления библиотеками. Когда приходят новые разработчики на ваш проект, Команда, компания и т. д. они'повторно, вероятно, нужно знать условности менеджер пакетов. Это означает, что они не'т придется тратить время, выясняя мельчайшие подробности, как библиотеки в коде.
  4. Они дают вам стандартный способ управления версиями и распространение собственных зависимостей и файлов, что Дон'т принадлежат в вашем репозитории. Я даже лично использовала их для каких-то больших статических данных файлов мои необходимые приложения, поэтому он хорошо работает для версий вещей, кроме двоичного кода.
  5. Некоторые пакетные менеджеры предоставляют дополнительные возможности при монтаже. NuGet будет добавить зависимостей и файлов содержимое в файл csproj и даже можно добавить элементы конфигурации в файл конфигурации.
  6. Их список файлов пакета документов версий библиотек в едином, централизованном месте. Я не'т иметь, чтобы щелкнуть правой кнопкой мыши на DLL и посмотрите на номер версии, чтобы выяснить, какая версия библиотеки я'м, используя. В Python, автор библиотеки не может иметь даже номер версии в файлы py, поэтому я не мог бы даже быть в состоянии сказать версию библиотеки из них.
  7. Они препятствуют широкому машина установка зависимостей. Пакетные менеджеры обеспечивают стандартный способ установки зависимостей без глобальной установки. Когда ваши варианты папок lib и глобальные установки, многие разработчики библиотек подберет предложить свои библиотеки как первичные, глобальных установок, а не как загружаемые файлы, которые вы должны настроить себя. (МС история демонстрирует это. Это'ов и для многих библиотек в Linux.) Это на самом деле делает управление несколькими проектами сложнее, поскольку вы можете иметь проекты с противоречивыми версиями и некоторые разработчики, конечно, подберет, казалось бы, проще глобальная установка-за того, что их собственное lib реж.
  8. Они, как правило, для централизованного размещения и распространения. Вам больше не придется зависеть от того, что случайный библиотека's веб-сайт. Если они выйти из бизнеса, успешный менеджер пакетов's на сайте есть все версии когда-либо загрузили. Разработчики также Дон'т иметь, чтобы выследить многие веб-сайты просто для того, чтобы скачать новые библиотеки, у них места смотреть в первую очередь и даже просмотреть различные варианты. Это's также легче в зеркало пакетов организована стандартным способом, чем вручную разместить все копии из специальных веб-сайтов. Вы're также завышение стоимости вашу "льготы.&и"
  9. нет необходимости внешнего инструмент для управления пакетами. на "внешних" на что? Я проверить исполняемый файл из NuGet в моем репозитории. Это'ы только бинарные я чувствую себя хорошо проверить, так как это's малый и означает, что я Дон'т должны проверить любые другие двоичные файлы. Пип не'т вызвать проблемы на этом фронте, поскольку он's в комплекте с Python по умолчанию теперь и Взлом и обратно несовместимые изменения чрезвычайно редки. Вы'вновь не собираюсь развивать кода Python без питона внешне установленный для вашего проекта, в любом случае. К тому времени, как они достигнут широкого внедрения, менеджеры пакетов, как правило, очень стабильный. Вы можете'т уйти, не некоторые какой установлен во всем мире инструмент для большинства проектов, и один менеджер пакетов-это довольно легкие требования к весу. Это'ы, как правило, не намного сложнее, чем общеязыковая среда выполнения установлена.

  10. не требуется подключение к интернету для создания. Я могу'т подключиться к моей базе данных без подключения к сети. Если база данных размещенном в Amazon, я в любом случае нужна полная подключение к интернету. Мне нужно подключение к Интернету, чтобы отправлять и получать изменения с помощью системы управления версиями; сервер сборки может't проверить код, чтобы построить без какого-либо сетевого подключения либо. Вы можете'т отправка или получение электронной почты без одного. Вы можете't скачать библиотеки поместить их в папку lib без одного! Постоянно развивающиеся без подключения к интернету-это неслыханно. В некоторых редких случаях, когда он's необходимый, вы можете справиться с этим, загрузив пакеты в папке, что менеджер пакетов может потреблять. (Я знаю, что NuGet и Пип вполне устраивает вытянуть из простой папки или сетевого диска; я подозреваю, большинство других могут так же.)

  11. быстрое построение (проверка пакета). 30 секунд в процессе автоматической сборки и 5 секунд при локальном dev строит-это хороший компромисс для преимуществ, которые я изложил выше. Это тривиальный сроки, которые обычно даже не заслуживает внимания в сравнении с проблемами выгод, решить.

  12. проще средах (менее требуемых знаний). Один инструмент для управления пакетами от ничего для управления библиотекой, разве'т действительно честное сравнение, так или иначе. Без инструмента, вы должны научиться независимо от пользовательского процесса проект, используя управлять своей библиотеки. Это означает, что вы'повторно не уверены в том, что существующие знания относится к любому новому проекту подходить. Вы'придется иметь дело с каким-солянку подход кто-то придумал, или сделать свой собственный. Это может быть каталог, содержащий все библиотеки, или это может быть что-то гораздо более странное. Возможно, чтобы избежать проверки в библиотеках, кто-то положил их все на сетевой диск, а единственный показатель версии имя папки. Как это или глобальная на самом деле установить лучше? Для сравнения, в диспетчере пакет дает вам чистую конвенции, которые применяются в большинстве проектов, с которыми вы столкнулись. Общей темой является то, что они обеспечивают согласованность, документации, и возможности не только в проектах, но даже через них. Это упрощает все's жизнь.

Комментарии (11)

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

Наш продукт реализуется в 27 проектах c#, который является относительно небольшой по нынешним's стандарты. Некоторые из наших зависимостей третьей стороны есть десятки сборок.

До в NuGet, если бы я хотел, чтобы обновить все наши зависимости до последней версии, мне придется:

  1. Отследить, где я мог получить все обновленные библиотеки
  2. Скачать их и распаковать/установить
  3. Добавление новой версии в систему управления версиями
  4. Вручную просматриваем все ссылки в наших проектах и обновить их, чтобы указать на новые сборки

С 27 проектов и десятки зависимостей сборки, этот процесс был очень подвержен ошибкам и может занять несколько часов.

Теперь, когда мы'вэ обновлены с помощью NuGet, это's все сделано для меня с одной командой.

Комментарии (9)

не нужны внешние средства для управления пакетами

Что'ы вроде не сказать, что это? Если я буду использовать менеджер пакетов, я не'т должны иметь папку lib. Я также Дон'т иметь, чтобы управлять собой пакеты.

не требуется подключение к интернету, чтобы построить

Кроме того, не имея подключения к интернету в настоящее время развивается довольно редко (возможно, за исключением нахождения в пути), приличный менеджер пакетов должен'т требуют, чтобы вы должны иметь последнюю версию приложения. Он может жаловаться, но там's нет причин, чтобы не строить с версией, что уже установлена

быстрее построить (без пакета проверки)

Что's довольно маргинальной speedboost, но вы можете, вероятно, сделать замечание за это.

проще средах (меньше знаний требуется)

Большинство менеджеров пакетов так просто в эти дни, что он'ы вряд ли стоит пытаться их обойти, делая эти. Там's даже визуально клиенты, если вы хотите. Они на самом деле скрывают много Крофт, что происходит.

Пакетные менеджеры также позволит вам поделиться этими пакетами между различными проектами. Если 5 из моих проектов используется одна и та же версия наддува, там's нет необходимости дублировать это для каждого проекта. Это особенно актуально для сложных зависимостей деревья, о которых вы говорите.

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

Комментарии (9)

Это разница между просто using библиотек (каталог lib), и, используя их, поддерживать мета-информации (менеджер пакетов). Такие мета-информация касается номера версии, (транзитивно) зависимостей между библиотеками и такие.

Обсуждениях ада DLL, совместимости библиотек, системы модуля Java, OSGi и таких как минимум должен быть достаточно убедительным, какой стоит иметь некоторую форму управления зависимостями.

  • Библиотека версии и проблем зависимостей могу быть еси времени.

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

  • Более структуру
  • Более обрезки библиотек
  • Нет специального человека решения о библиотеках
Комментарии (0)

В некоторых случаях папка lib может быть необходимо, например при работе с устаревшими библиотеками (его версия больше не поддерживается/в наличии), локально модифицированной версией библиотеки, ...

Но за все остальное, это's, как застройщик, взяв на себя роль диспетчера пакетов:

  • Застройщику придется скачать библиотеки (требуется интернет)
  • Разработчик должен проверять наличие новых релизов вручную
  • ...

И ИМХО, это's меньше знаний требуется, потому что вы должны узнать об использовании внешнего инструмента, но меньше о библиотеках (т. е. зависимости).

Комментарии (3)

Есть еще одна проблема, не распространяются другие вопросы: обмен депс.

Позвольте'ы сказать, у вас есть два пакета строительство одной библиотеке. В лучшем случае, не будет coflicts, но все же жесткого диска пространство дважды. В худшем, там будет различных конфликтов, как версии.

Если вы используете менеджер пакетов, он будет установить библиотеку только один раз (в разных версиях) и уже путь к нему.

П. С.: Конечно, вам нужно динамическое связывание (или аналогичную функцию в ваш язык), чтобы получить это Pro.

Комментарии (0)

Одна из основных причин, почему разделяемых библиотек рассматриваются как элемент прогресса в 90'с эпохи Unix и Windows систем, как они могут снизить использование оперативной памяти при нескольких программ, используя тот же набор библиотек были загружены. Космический код нужно только один раз выделен в точных библиотека и версии этой библиотеки только для каждого экземпляра оставшейся памяти для статических переменных.

Многие операционные системы используют общие библиотеки таким образом, что зависит от механизмов как вызов mmap в Unix() API-интерфейс, который означает, что библиотека не только нужно быть точно такой же версии, но на самом деле тот же файл. Это просто невозможно, чтобы воспользоваться всеми преимуществами программы, которая входит свой собственный набор библиотек.

Учитывая, что в памяти намного дешевле, и версии библиотек нужны более разнообразные, чем в 90-е годы, этот аргумент не'т нести как сегодня много веса.

Комментарии (2)