Управление зависимостями

Wippy использует систему зависимостей на основе файла блокировки. Модули публикуются в хаб, объявляются как зависимости в исходном коде и разрешаются в файл wippy.lock, который отслеживает точные версии.

Файлы проекта

wippy.lock

Файл блокировки отслеживает структуру каталогов проекта и закреплённые зависимости:

directories:
  modules: .wippy
  src: ./src
modules:
  - name: acme/http
    version: v1.2.0
    hash: 4ea816fe84ca58a1f0869e5ca6afa93d6ddd72fa09e1162d9e600a7fbf39f0a2
  - name: acme/sql
    version: v2.0.1
    hash: b3f9c8e12a456d7890abcdef1234567890abcdef1234567890abcdef12345678
Поле Описание
directories.modules Где хранятся загруженные модули (по умолчанию: .wippy)
directories.src Где находится исходный код (по умолчанию: ./src)
modules[].name Идентификатор модуля в формате org/module
modules[].version Закреплённая семантическая версия
modules[].hash Хэш содержимого для проверки целостности

wippy.yaml

Метаданные модуля для публикации. Требуется только при публикации собственного модуля:

organization: acme
module: http
version: 1.2.0
description: HTTP utilities for Wippy
license: MIT
repository: https://github.com/acme/wippy-http
keywords:
  - http
  - web
Поле Обязательное Описание
organization Да Строчные буквы, буквенно-цифровые с дефисами
module Да Строчные буквы, буквенно-цифровые с дефисами
version Нет Семантическая версия (устанавливается при публикации)
description Нет Описание модуля
license Нет Идентификатор лицензии SPDX
repository Нет URL репозитория с исходным кодом
homepage Нет Домашняя страница проекта
keywords Нет Ключевые слова для поиска
authors Нет Список авторов

Объявление зависимостей

Добавьте записи ns.dependency в ваш _index.yaml:

version: "1.0"
namespace: app
entries:
  - name: dependency.http
    kind: ns.dependency
    component: acme/http
    version: "^1.0.0"

  - name: dependency.sql
    kind: ns.dependency
    component: acme/sql
    version: ">=2.0.0"

Ограничения версий

Ограничение Пример Совпадает
Точная 1.2.3 Только 1.2.3
Каретка ^1.2.0 >=1.2.0, <2.0.0
Тильда ~1.2.0 >=1.2.0, <1.3.0
Диапазон >=1.0.0 1.0.0 и выше
Подстановочный знак * Любая версия (выбирается наивысшая)
Комбинированное >=1.0.0 <2.0.0 Между 1.0.0 и 2.0.0

Рабочий процесс

Создание нового проекта

wippy init

Создаёт wippy.lock с каталогами по умолчанию.

Добавление зависимостей

wippy add acme/http               # Последняя версия
wippy add acme/http@1.2.3         # Точная версия
wippy add acme/http@latest         # Метка latest

Это обновляет файл блокировки. Затем установите:

wippy install

Разрешение из исходного кода

Если ваш исходный код уже содержит записи ns.dependency:

wippy update

Эта команда сканирует каталог с исходным кодом, разрешает все ограничения зависимостей, обновляет файл блокировки и устанавливает модули.

Обновление зависимостей

wippy update                       # Переразрешить все зависимости
wippy update acme/http             # Обновить только acme/http
wippy update acme/http acme/sql    # Обновить конкретные модули

При обновлении конкретных модулей остальные модули остаются закреплёнными на текущих версиях. Если обновление потребует изменения незатронутых модулей, запрашивается подтверждение.

Установка из файла блокировки

wippy install                      # Установить всё из файла блокировки
wippy install --force              # Обойти кэш, загрузить заново

Хранение модулей

Загруженные модули хранятся в каталоге .wippy/vendor/:

project/
  wippy.lock
  src/
    _index.yaml
  .wippy/
    vendor/
      acme/
        http-v1.2.0.wapp
        sql-v2.0.1.wapp

По умолчанию модули хранятся как файлы .wapp. Для распаковки в каталоги:

# wippy.lock
options:
  unpack_modules: true

С включённой распаковкой:

.wippy/
  vendor/
    acme/
      http/
        wippy.yaml
        src/
          _index.yaml
          ...

Локальная разработка с заменами

Замените модули из хаба локальными каталогами для разработки:

# wippy.lock
directories:
  modules: .wippy
  src: ./src
modules:
  - name: acme/http
    version: v1.2.0
    hash: ...
replacements:
  - from: acme/http
    to: ../local-http

Путь замены указывается относительно файла блокировки. При активной замене вместо вендорного модуля используется локальный каталог. Замены сохраняются при операциях wippy update.

Порядок загрузки

При запуске Wippy загружает записи из каталогов в следующем порядке:

  1. Каталог с исходным кодом (src)
  2. Каталоги замен
  3. Каталоги вендорных модулей

Модули с активными заменами пропускают свой вендорный путь.

Проверка целостности

Каждый модуль в файле блокировки имеет хеш содержимого. При установке загруженные модули проверяются на соответствие ожидаемым хешам. Несовпадающие модули отклоняются и повторно загружаются из реестра.

Смотрите также