Уменьшение дублирования за счет совместного использования кода является практическим правилом во многих языках программирования. Сделать это в рамках одного проекта достаточно легко. Однако, когда вы хотите поделиться чем-то между несколькими проектами, это становится немного сложнее. К счастью для нас, большинство языков также предоставляют свои собственные менеджеры пакетов, которые позволяют нам устанавливать в наши проекты другие библиотеки в качестве зависимостей, чтобы использовать определенный в них код.
Чаще всего эти внешние проекты называются просто библиотеками или пакетами, но в некоторых языках для них есть уникальные имена, например драгоценные камни Ruby gems.. Crystal следует шаблону Ruby и называет свои проекты Crystal Shards. В этой главе мы собираемся изучить мир внешних библиотек, в том числе способы их поиска, установки, обновления и управления ими. Мы рассмотрим следующие темы:
• Использование Crystal Shards
• Поиск Shards
Технические требования
Требования к этой главе следующие:
• Рабочая установка Кристалла.
Инструкции по настройке Crystal можно найти в
Все примеры кода, использованные в этой главе, можно найти в папке Chapter 08 на GitHub: https://github.com/PacktPublishing/Crystal-Programming/tree/main/Chapter08.
Использование Crystal Shards
Если вы помните
name: transform
version: 0.1.0
authors:
- George Dietrich <[email protected]>
crystal: ~> 1.4.0
license: MIT
targets:
transform:
main: src/transform_cli.cr
Подобно тому, как мы до сих пор взаимодействовали с нашими приложениями Crystal, используя двоичный файл Crystal, существует специальный двоичный файл для взаимодействия с Crystal Shards, метко названный Shards. Мы немного использовали это в начале проекта CLI для создания двоичного файла проекта, но он также может делать гораздо больше. Хотя команду сборки shards build
можно реплицировать с помощью нескольких команд crystal build
, команда shards
также предоставляет некоторые уникальные функции, в основном связанные с установкой, обновлением, сокращением или проверкой внешних зависимостей. Хотя файл crystal init
, которую мы использовали несколько глав назад, он также может быть создан с помощью команды shards init
, которая будет формировать только этот файл, а не весь проект.
Говоря о зависимостях, проект может иметь два типа:
• Зависимости от среды выполнения
• Зависимости от разработки
Основными зависимостями будет все, что необходимо для запуска проекта в производственной среде. Однако зависимости разработки не требуются в производстве, но необходимы при разработке самого проекта. Хорошим примером могут быть любые дополнительные инструменты тестирования или статического анализа, используемые в проекте.
Оба этих типа зависимостей могут быть указаны в файле dependency
и development_dependenties
соответственно. Пример таких сопоставлений следующий:
dependencies:
shard1:
github: owner/shard1
version: ~> 1.1.0
shard2:
github: owner/shard2
commit: 6471b2b43ada4c41659ae8cfe1543929b3fdb64c
development_dependencies:
shard3:
github: dev-user/shard3
version: '>= 0.14.0'