Pular para o conteúdo

Gerenciamento de Dependencias

O Wippy utiliza um sistema de dependencias baseado em arquivo de lock. Modulos sao publicados no hub, declarados como dependencias no seu codigo-fonte e resolvidos em um arquivo wippy.lock que rastreia versoes exatas.

O arquivo de lock rastreia a estrutura de diretorios do seu projeto e dependencias fixadas:

directories:
modules: .wippy
src: ./src
modules:
- name: acme/http
version: v1.2.0
hash: 4ea816fe84ca58a1f0869e5ca6afa93d6ddd72fa09e1162d9e600a7fbf39f0a2
- name: acme/sql
version: v2.0.1
hash: b3f9c8e12a456d7890abcdef1234567890abcdef1234567890abcdef12345678
CampoDescricao
directories.modulesOnde os modulos baixados sao armazenados (padrao: .wippy)
directories.srcOnde seu codigo-fonte reside (padrao: ./src)
modules[].nameIdentificador do modulo no formato org/module
modules[].versionVersao semantica fixada
modules[].hashHash de conteudo para verificacao de integridade

Metadados do modulo para publicacao. Necessario apenas quando voce publica seu proprio 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
CampoObrigatorioDescricao
organizationSimMinusculo, alfanumerico com hifens
moduleSimMinusculo, alfanumerico com hifens
versionNaoVersao semantica (definida no momento da publicacao)
descriptionNaoDescricao do modulo
licenseNaoIdentificador de licenca SPDX
repositoryNaoURL do repositorio de codigo-fonte
homepageNaoPagina inicial do projeto
keywordsNaoPalavras-chave para descoberta
authorsNaoLista de autores

Adicione entradas ns.dependency no seu _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"
RestricaoExemploCorrespondencia
Exata1.2.3Apenas 1.2.3
Circunflexo^1.2.0>=1.2.0, <2.0.0
Til~1.2.0>=1.2.0, <1.3.0
Faixa>=1.0.01.0.0 e acima
Curinga*Qualquer versao (seleciona a mais alta)
Combinada>=1.0.0 <2.0.0Entre 1.0.0 e 2.0.0
Terminal window
wippy init

Cria um wippy.lock com diretorios padrao.

Terminal window
wippy add acme/http # Versao mais recente
wippy add acme/http@1.2.3 # Versao exata
wippy add acme/http@latest # Label latest

Isso atualiza o arquivo de lock. Em seguida, instale:

Terminal window
wippy install

Se seu codigo-fonte ja declara entradas ns.dependency:

Terminal window
wippy update

Isso escaneia seu diretorio de codigo-fonte, resolve todas as restricoes de dependencias, atualiza o arquivo de lock e instala os modulos.

Terminal window
wippy update # Resolve novamente todas as dependencias
wippy update acme/http # Atualiza apenas acme/http
wippy update acme/http acme/sql # Atualiza modulos especificos

Ao atualizar modulos especificos, os demais modulos permanecem fixados em suas versoes atuais. Se a atualizacao exigir alteracao de modulos que nao sao alvo, uma confirmacao e solicitada.

Terminal window
wippy install # Instala tudo a partir do lock
wippy install --refresh # Rebaixar cada módulo (--force e --repair são aliases)

Os modulos baixados sao armazenados no diretorio .wippy/vendor/:

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

Por padrao, os modulos sao mantidos como arquivos .wapp. Para extrai-los em diretorios:

# wippy.lock
options:
unpack_modules: true

Com a extracao habilitada:

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

Substitua modulos do hub por diretorios locais para desenvolvimento:

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

O caminho de substituicao e relativo ao arquivo de lock. Quando uma substituicao esta ativa, o diretorio local e usado em vez do modulo vendorizado. Substituicoes sao preservadas entre operacoes de wippy update.

Na inicializacao, o Wippy carrega entradas dos diretorios nesta ordem:

  1. Diretorio de codigo-fonte (src)
  2. Diretorios de substituicao
  3. Diretorios de modulos vendorizados

Modulos com substituicoes ativas ignoram seu caminho de vendor.

Cada modulo no arquivo de lock possui um hash de conteudo. Durante a instalacao, os modulos baixados sao verificados em relacao aos hashes esperados. Modulos incompativeis sao rejeitados e baixados novamente do registro.