Ir al contenido

Gestion de Dependencias

Wippy usa un sistema de dependencias basado en archivos de bloqueo. Los modulos se publican en el hub, se declaran como dependencias en tu codigo fuente y se resuelven en un archivo wippy.lock que rastrea las versiones exactas.

El archivo de bloqueo rastrea la estructura de directorios de tu proyecto y las dependencias fijadas:

directories:
modules: .wippy
src: ./src
modules:
- name: acme/http
version: v1.2.0
hash: 4ea816fe84ca58a1f0869e5ca6afa93d6ddd72fa09e1162d9e600a7fbf39f0a2
- name: acme/sql
version: v2.0.1
hash: b3f9c8e12a456d7890abcdef1234567890abcdef1234567890abcdef12345678
CampoDescripcion
directories.modulesDonde se almacenan los modulos descargados (por defecto: .wippy)
directories.srcDonde reside tu codigo fuente (por defecto: ./src)
modules[].nameIdentificador del modulo en formato org/module
modules[].versionVersion semantica fijada
modules[].hashHash de contenido para verificacion de integridad

Metadatos del modulo para publicacion. Solo es necesario cuando publicas tu propio modulo:

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
CampoRequeridoDescripcion
organizationSiMinusculas, alfanumerico con guiones
moduleSiMinusculas, alfanumerico con guiones
versionNoVersion semantica (se establece al publicar)
descriptionNoDescripcion del modulo
licenseNoIdentificador de licencia SPDX
repositoryNoURL del repositorio fuente
homepageNoPagina principal del proyecto
keywordsNoPalabras clave para descubrimiento
authorsNoLista de autores

Agrega entradas ns.dependency en tu _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"
RestriccionEjemploCoincide con
Exacta1.2.3Solo 1.2.3
Caret^1.2.0>=1.2.0, <2.0.0
Tilde~1.2.0>=1.2.0, <1.3.0
Rango>=1.0.01.0.0 y superior
Comodin*Cualquier version (elige la mas alta)
Combinada>=1.0.0 <2.0.0Entre 1.0.0 y 2.0.0
Ventana de terminal
wippy init

Crea un wippy.lock con los directorios por defecto.

Ventana de terminal
wippy add acme/http # Latest version
wippy add acme/http@1.2.3 # Exact version
wippy add acme/http@latest # Latest label

Esto actualiza el archivo de bloqueo. Luego instala:

Ventana de terminal
wippy install

Si tu codigo fuente ya declara entradas ns.dependency:

Ventana de terminal
wippy update

Esto escanea tu directorio fuente, resuelve todas las restricciones de dependencias, actualiza el archivo de bloqueo e instala los modulos.

Ventana de terminal
wippy update # Re-resolve all dependencies
wippy update acme/http # Update only acme/http
wippy update acme/http acme/sql # Update specific modules

Al actualizar modulos especificos, los demas modulos permanecen fijados en sus versiones actuales. Si la actualizacion requiere cambiar modulos que no son objetivo, se solicita confirmacion.

Ventana de terminal
wippy install # Install all from lock
wippy install --refresh # Volver a descargar cada módulo (--force y --repair son alias)

Los modulos descargados se almacenan en el directorio .wippy/vendor/:

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

Por defecto, los modulos se mantienen como archivos .wapp. Para extraerlos en directorios:

# wippy.lock
options:
unpack_modules: true

Con la extraccion habilitada:

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

Sustituye modulos del hub con directorios locales para desarrollo:

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

La ruta de reemplazo es relativa al archivo de bloqueo. Cuando un reemplazo esta activo, se usa el directorio local en lugar del modulo vendorizado. Los reemplazos se preservan durante las operaciones de wippy update.

Al iniciar, Wippy carga las entradas desde los directorios en este orden:

  1. Directorio fuente (src)
  2. Directorios de reemplazo
  3. Directorios de modulos vendorizados

Los modulos con reemplazos activos omiten su ruta de vendor.

Cada modulo en el archivo de bloqueo tiene un hash de contenido. Durante la instalacion, los modulos descargados se verifican contra sus hashes esperados. Los modulos con discrepancias se rechazan y se vuelven a descargar desde el registro.