Когда я думаю о плюсах и минусах статического папку библиотеки и менеджер пакетов, я чувствую, что в Библиотека папка является лучшим подходом.
Плюсы я вижу в папку библиотеки:
Плюсы я вижу с менеджером пакетов:
Промышленность, похоже, решила идти по пути менеджер пакетов для почти все, что строится сегодня. Так, что я упускаю?
Важный момент отсутствует в других ответов:
Используя менеджер пакетов означает иметь конфигурацию, которая указывает, что вы думаете версий библиотек вы using_ и гарантирует, что конфигурации информация на самом деле верна.
Зная, какие библиотеки вы используете, и какая версия, это очень важно, если вы:
Кроме того, когда вы на самом деле делать обновление, менеджер пакетов (как правило) делает все транзитивные зависимости, обновляются по мере необходимости.
В то время как с либерал
папку, у тебя просто куча (возможно, Бинарные, и, возможно, измененные) файлы, и вы'будете иметь, чтобы догадаться, откуда они взялись и какую версию они (или доверять какой-то файл README, который может или не может быть правильным).
Для решения ваших других пунктов:
нет необходимости внешнего инструмент для управления пакетами.
Верно, но а) в качестве разработчика программного обеспечения нужно установить себе множество инструментов, в любом случае, так что одним больше, как правило, не имеет значения, и Б) обычно есть только один или несколько пакетных менеджеров в любой сфере (и Maven/Gradle в для Java, НПМ для JS/машинопись и т. д.), Так что's не как вам нужно, чтобы установить их десятки.
не требуется подключение к интернету для создания.
Все менеджеры пакетов, которые я знаю, работают офф-лайн, как только они загрузили необходимые зависимости (это может произойти сразу после загрузки самого проекта).
быстрое построение (проверка пакета).
Наверное, правда, но кажется маловероятным, что проверка автономного пакета займет значительное количество времени (это's просто сравнивая некоторые цифры версии). Проверка online может занять некоторое время, но которую можно отключить при желании (если это вообще по умолчанию - Мэйвен например никогда не проверяет наличие обновлений для версии).
проще средах (менее требуемых знаний).
Правда, но, как объяснялось выше, папке Либ также требует знаний. Также, как описано выше, вы'будете, вероятно, работать только с горсткой разные менеджеры пакетов, которые вы'МР уже знаете.
Плюсы папку lib, быстро исчезают после того, как вы перейти от малого масштаба развития, чтобы больше работать.
Например в "пользу" и не требует внешнего инструмента является сфабрикованным работу требуется вручную управлять своей зависимости, поэтому инструмент будет у вас (более чем в одном смысле).
Вы Don'т необходимость подключения к интернету для менеджера пакетов. Вы можете использовать локальные хранилища.
Быстрее строить может быть правдой, но это'ы вряд ли что-то, что должен определить, следует ли использовать менеджер пакетов или нет. Мы'повторно не говорю о величинах разница в конце концов, и это тоже зависит от вашей конфигурации. Вы можете легко сделать медленный построения с помощью менеджера пакетов, но это'ы в принципе вредительство.
Проще средах (меньше знаний требуется)? Опять же, в небольших масштабах развития вполне возможно. Вы сможете вести полностью проект в голове, вплоть до каждого из нескольких библиотек используется. Добавить простой файл Makefile / другие сборочный скрипт и вы'ве получил себе полный пакет.
Но это вовсе'т сделать среды проще, он работает только в простых средах. В больших масштабах развития вы'll быть рады, что вы're, используя стандартные инструменты, а не индивидуальные решения. После всех, вы только должны выучить его один раз (и когда менеджер пакетов дежурные заменен на новый классная вещь, вы должны понять, что слишком).
Вы'вновь отсутствует многих преимущества пакетных менеджеров.
нет необходимости внешнего инструмент для управления пакетами. на "внешних" на что? Я проверить исполняемый файл из NuGet в моем репозитории. Это'ы только бинарные я чувствую себя хорошо проверить, так как это's малый и означает, что я Дон'т должны проверить любые другие двоичные файлы. Пип не'т вызвать проблемы на этом фронте, поскольку он's в комплекте с Python по умолчанию теперь и Взлом и обратно несовместимые изменения чрезвычайно редки. Вы'вновь не собираюсь развивать кода Python без питона внешне установленный для вашего проекта, в любом случае. К тому времени, как они достигнут широкого внедрения, менеджеры пакетов, как правило, очень стабильный. Вы можете'т уйти, не некоторые какой установлен во всем мире инструмент для большинства проектов, и один менеджер пакетов-это довольно легкие требования к весу. Это'ы, как правило, не намного сложнее, чем общеязыковая среда выполнения установлена.
не требуется подключение к интернету для создания. Я могу'т подключиться к моей базе данных без подключения к сети. Если база данных размещенном в Amazon, я в любом случае нужна полная подключение к интернету. Мне нужно подключение к Интернету, чтобы отправлять и получать изменения с помощью системы управления версиями; сервер сборки может't проверить код, чтобы построить без какого-либо сетевого подключения либо. Вы можете'т отправка или получение электронной почты без одного. Вы можете't скачать библиотеки поместить их в папку lib без одного! Постоянно развивающиеся без подключения к интернету-это неслыханно. В некоторых редких случаях, когда он's необходимый, вы можете справиться с этим, загрузив пакеты в папке, что менеджер пакетов может потреблять. (Я знаю, что NuGet и Пип вполне устраивает вытянуть из простой папки или сетевого диска; я подозреваю, большинство других могут так же.)
быстрое построение (проверка пакета). 30 секунд в процессе автоматической сборки и 5 секунд при локальном dev строит-это хороший компромисс для преимуществ, которые я изложил выше. Это тривиальный сроки, которые обычно даже не заслуживает внимания в сравнении с проблемами выгод, решить.
проще средах (менее требуемых знаний). Один инструмент для управления пакетами от ничего для управления библиотекой, разве'т действительно честное сравнение, так или иначе. Без инструмента, вы должны научиться независимо от пользовательского процесса проект, используя управлять своей библиотеки. Это означает, что вы'повторно не уверены в том, что существующие знания относится к любому новому проекту подходить. Вы'придется иметь дело с каким-солянку подход кто-то придумал, или сделать свой собственный. Это может быть каталог, содержащий все библиотеки, или это может быть что-то гораздо более странное. Возможно, чтобы избежать проверки в библиотеках, кто-то положил их все на сетевой диск, а единственный показатель версии имя папки. Как это или глобальная на самом деле установить лучше? Для сравнения, в диспетчере пакет дает вам чистую конвенции, которые применяются в большинстве проектов, с которыми вы столкнулись. Общей темой является то, что они обеспечивают согласованность, документации, и возможности не только в проектах, но даже через них. Это упрощает все's жизнь.
Недавно преобразован наш продукт с помощью вручную скачал библиотеки для автоматического управления пакетами с помощью NuGet, я могу сказать, что через менеджер пакетов имеет огромные преимущества.
Наш продукт реализуется в 27 проектах c#, который является относительно небольшой по нынешним's стандарты. Некоторые из наших зависимостей третьей стороны есть десятки сборок.
До в NuGet, если бы я хотел, чтобы обновить все наши зависимости до последней версии, мне придется:
С 27 проектов и десятки зависимостей сборки, этот процесс был очень подвержен ошибкам и может занять несколько часов.
Теперь, когда мы'вэ обновлены с помощью NuGet, это's все сделано для меня с одной командой.
не нужны внешние средства для управления пакетами
Что'ы вроде не сказать, что это? Если я буду использовать менеджер пакетов, я не'т должны иметь папку lib. Я также Дон'т иметь, чтобы управлять собой пакеты.
не требуется подключение к интернету, чтобы построить
Кроме того, не имея подключения к интернету в настоящее время развивается довольно редко (возможно, за исключением нахождения в пути), приличный менеджер пакетов должен'т требуют, чтобы вы должны иметь последнюю версию приложения. Он может жаловаться, но там's нет причин, чтобы не строить с версией, что уже установлена
быстрее построить (без пакета проверки)
Что's довольно маргинальной speedboost, но вы можете, вероятно, сделать замечание за это.
проще средах (меньше знаний требуется)
Большинство менеджеров пакетов так просто в эти дни, что он'ы вряд ли стоит пытаться их обойти, делая эти. Там's даже визуально клиенты, если вы хотите. Они на самом деле скрывают много Крофт, что происходит.
Пакетные менеджеры также позволит вам поделиться этими пакетами между различными проектами. Если 5 из моих проектов используется одна и та же версия наддува, там's нет необходимости дублировать это для каждого проекта. Это особенно актуально для сложных зависимостей деревья, о которых вы говорите.
С папку lib управления пакетами только для этого проекта, в то время как пакетный менеджер позволяет сделать это для всей среды разработки с помощью одного инструмента.
Это разница между просто using библиотек (каталог lib), и, используя их, поддерживать мета-информации (менеджер пакетов). Такие мета-информация касается номера версии, (транзитивно) зависимостей между библиотеками и такие.
Обсуждениях ада DLL, совместимости библиотек, системы модуля Java, OSGi и таких как минимум должен быть достаточно убедительным, какой стоит иметь некоторую форму управления зависимостями.
Также есть благо общей (локальной) репозитория, так что несколько проектов не нужно сохранять копии импортируемых библиотек. Если у вас есть проект с 20 подмодулей, некоторые из этих модулей, имеющих 40 нечетное зависимостей.
В некоторых случаях папка lib может быть необходимо, например при работе с устаревшими библиотеками (его версия больше не поддерживается/в наличии), локально модифицированной версией библиотеки, ...
Но за все остальное, это's, как застройщик, взяв на себя роль диспетчера пакетов:
И ИМХО, это's меньше знаний требуется, потому что вы должны узнать об использовании внешнего инструмента, но меньше о библиотеках (т. е. зависимости).
Есть еще одна проблема, не распространяются другие вопросы: обмен депс.
Позвольте'ы сказать, у вас есть два пакета строительство одной библиотеке. В лучшем случае, не будет coflicts, но все же жесткого диска пространство дважды. В худшем, там будет различных конфликтов, как версии.
Если вы используете менеджер пакетов, он будет установить библиотеку только один раз (в разных версиях) и уже путь к нему.
П. С.: Конечно, вам нужно динамическое связывание (или аналогичную функцию в ваш язык), чтобы получить это Pro.
Одна из основных причин, почему разделяемых библиотек рассматриваются как элемент прогресса в 90'с эпохи Unix и Windows систем, как они могут снизить использование оперативной памяти при нескольких программ, используя тот же набор библиотек были загружены. Космический код нужно только один раз выделен в точных библиотека и версии этой библиотеки только для каждого экземпляра оставшейся памяти для статических переменных.
Многие операционные системы используют общие библиотеки таким образом, что зависит от механизмов как вызов mmap в Unix() API-интерфейс, который означает, что библиотека не только нужно быть точно такой же версии, но на самом деле тот же файл. Это просто невозможно, чтобы воспользоваться всеми преимуществами программы, которая входит свой собственный набор библиотек.
Учитывая, что в памяти намного дешевле, и версии библиотек нужны более разнообразные, чем в 90-е годы, этот аргумент не'т нести как сегодня много веса.