Перейти к содержимому

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

Wippy использует систему зависимостей на основе файла блокировки. Модули публикуются в хаб, объявляются как зависимости в исходном коде и разрешаются в файл 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Хэш содержимого для проверки целостности

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

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.01.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 --refresh # Повторно загрузить каждый модуль (--force и --repair — алиасы)

Загруженные модули хранятся в каталоге .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. Каталоги вендорных модулей

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

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