• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

Гостевая статья Что такое менеджер пакетов?

Никто из нас не пишет код в вакууме.

Возможно, вы начали в школе писать одноразовые приложения на Java или Python. Возможно, вы создали простой веб-сайт, объединенный с HTML и JavaScript saveur du jour. В любом случае, ваш код находится на уровнях фундаментальных строительных блоков, разработанных тысячами других.

В конце концов, вы попадете в точку, где вы захотите повторно использовать чужой код - или поделиться своим собственным! Размещение на таком сайте, как GitHub, является лишь частью решения, так как вам все равно придется включать инструкции о том, как его скомпилировать, интегрировать и т. Д.

Если бы у нас был способ упаковать наш код. 😐

Что такое пакет?
Каждое используемое вами приложение зависит от другого программного обеспечения, некоторые из которых связаны с самим приложением, а некоторые установлены с вашей ОС. Например, Notepad ++ зависит от libcurl.dll для передачи данных во время обновлений. Авторы Notepad ++ не написали libcurl, но это зависит от этого. Если вы переименуете его, то Notepad ++ не сможет работать, потому что он не может найти этот пакет кода.

missing-dll.png

Удаление или переименование кода, от которого зависит приложение, имеет предсказуемые результаты ...
То же самое и с кодом, который мы пишем.

Взять, к примеру, .NET. Когда вы создаете решение в Visual Studio, оно компилирует ваш код, упаковывает его в серию DLL-файлов (обычно по одному на проект) и выгружает их в каталог «bin» (вместе с некоторыми другими файлами, но давайте проигнорируем их). ).

Вот один из моих проектов, . После сборки я получаю файлы "GhostSharp.dll" и "GhostSharp.Tests.dll" (для написанного мной кода) и " " (потому что от этого зависит мой тестовый проект) .

bin-dir.png

Все эти различные DLL-файлы являются пакетами, то есть просто связками связанного кода. И хотя в моем примере я использовал .NET и библиотеки, у других языков есть свои собственные языки - гемы Ruby, модули Perl, Java JAR и т. Д.

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

Если бы у нас был какой-то способ управлять всеми этими пакетами. 😏

Что такое менеджер пакетов?
Ваш (библиотека, гем, модуль, JAR и т. Д.) Может быть доступен другим проектам, которые ссылаются на них и вызывают их общедоступные функции (вроде API), но вы должны решить, как сделать этот код доступным в первом место.

  • Укажите исходный код, чтобы они могли его скомпилировать вручную.
  • Предоставьте скомпилированный код, чтобы они могли просто добавить его в свой проект.
  • Предоставьте ссылку на исходный код (GitHub). Некоторые инструменты, такие как для Erlang, могут напрямую ссылаться на ссылку GitHub и включать ее в процесс сборки, даже нацеливая на конкретную ветку или тег.
  • Разместите скомпилированный код в каком-то центральном месте, где другие смогут его обнаружить, сослаться на него, получать уведомления об обновлениях, возможно даже обсуждать его и получать помощь.
Это проблема, которую менеджер пакетов решает, в той или иной степени. Он поддерживает каждую версию вашего кода, а также метаданные, которые вы о нем предоставляете, и делает его доступным для других. Вы можете установить его на своей машине или в корпоративной интрасети, но есть много хороших публичных, обычно организованных вокруг языка, на котором вы работаете.

  • Для .NET есть и .
  • Для Ruby есть и .
  • В Node.js есть , Python , Java , PHP , Perl и т. Д.
Несколько слов о NuGet
NuGet - менеджер пакетов defacto для экосистемы .NET, с которым я больше всего знаком. На самом деле, термин «NuGet» относится к нескольким вещам, тесно связанным.

  • Это система управления пакетами для .NET.
  • NuGet.org - сайт, на котором размещены эти пакеты.
  • Это также расширение Visual Studio, которое используется для ссылки на эти пакеты, установленные в VS по умолчанию.
Когда вы ссылаетесь на пакет NuGet из Visual Studio и затем строите, VS услужливо выводит проекты, от которых вы зависите, а также проекты, от которых зависят эти проекты, и т. Д., И т. Д.

Если вы попытаетесь опубликовать свой собственный пакет NuGet, вы можете ожидать что-то подобное. Первые два изображения находятся в Visual Studio, в то время как последние два показывают содержимое сгенерированного nupkgфайла и nuspecфайл, который он содержит.

nuget-package-config-in-project-properties.png


nuget-config-edit-project.png


nuget-generated-package.png


nuget-nuspec-file.png

Генерация пакета NuGet с помощью Visual Studio

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

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

Если у вас есть какие-либо вопросы или вам нужно что-то прояснить, просто и я постараюсь помочь. Удачного кодирования!

Источник:
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!