Pular para o conteúdo

Gerenciador de pacotes

Instalar, remover e travar dependências — o pip e o npm do DataForge.

O dataforge traz o gerenciador de pacotes embutido. Não há binário separado: os mesmos comandos que rodam e verificam seu código também resolvem dependências.

Começar#

bash
dataforge init meu-app        # cria forge.toml e o esqueleto
cd meu-app

dataforge add validador       # instala e grava no forge.toml
dataforge add tabela datas    # vários de uma vez

E no seu código:

dataforge
adopt validador as V
adopt tabela as Tb

out V.cpf("529.982.247-25")
out Tb.render([["Ana", 30]], ["Nome", "Idade"])

Os comandos#

ComandoO que faz
dataforge add <pacote>instala e grava a dependência no forge.toml
dataforge add <pacote>@1.2.0uma versão exata
dataforge add <pacote>@^2.0uma faixa de versões
dataforge remove <pacote>desinstala e tira do manifesto
dataforge installinstala tudo o que o forge.toml declara
dataforge install --dry-runmostra o plano sem baixar nada
dataforge listo que está instalado, e o que veio por transitividade
dataforge search <termo>procura no registro
dataforge packempacota este projeto para publicar
dataforge publishmanda o pacote para um registro

Onde as coisas ficam#

bash
meu-app/
├── forge.toml          o que você pediu
├── forge.lock          o que foi realmente instalado, com sha256
├── forge_modules/      os pacotes (o que o 'adopt' enxerga)
   ├── validador/
   └── tabela/
└── src/main.df

Faixas de versão#

A mesma gramática do npm e do Cargo:

EscritaAceitaNão aceita
1.2.3só 1.2.3qualquer outra
^1.2.31.2.3 até 1.9.92.0.0
^0.2.30.2.3 até 0.2.90.3.0
~1.2.31.2.3 até 1.2.991.3.0
>=1.0 <2.01.5.02.0.0
*qualquer uma

dataforge add sem faixa grava ^ da versão mais recente: você recebe correções e recursos novos, nunca uma quebra de compatibilidade anunciada.

Em ^0.x, o menor é que trava — antes do 1.0 a convenção é que qualquer menor pode quebrar.

Outras origens#

Nem tudo vem do registro:

toml
[dependencies]
validador = "^1.0.0"                                    # registro
interno   = { path = "../biblioteca-interna" }          # pasta local
forkado   = { git = "https://github.com/voce/lib.git", ref = "v1.2" }
direto    = { url = "https://exemplo.com/pkg-1.0.tar.gz" }

Pela linha de comando:

bash
dataforge add ../biblioteca-interna
dataforge add git+https://github.com/voce/lib.git

Conflito de versões#

Quando dois pacotes pedem o mesmo terceiro, o resolvedor intersecta os requisitos e pega a maior versão que serve aos dois. Se não houver nenhuma, ele falha dizendo quem pediu o quê:

bash
 nao ha versao de 'comum' que sirva a todos:
    a@1.0.0 pede ^1.0.0
    b@1.0.0 pede ^2.0.0
    existem: 1.0.0, 2.0.0

É deliberado que isso seja um erro, não um aviso: instalar duas cópias da mesma biblioteca em versões diferentes é a origem de bugs que ninguém consegue reproduzir.

Integridade#

Todo pacote do registro traz um sha256. Ele é conferido no download e gravado no lock; se o conteúdo mudar sem a versão mudar, a instalação falha em vez de seguir em frente.

A extração recusa tarballs que tentem escrever fora da pasta de destino (../) ou que contenham links simbólicos.

Trabalhar offline#

bash
dataforge install --offline

Usa o índice em cache e os tarballs já baixados em ~/.dataforge/cache/. O cache é compartilhado entre projetos — instalar o mesmo pacote num segundo projeto não vai à rede.

Como o adopt encontra#

Na ordem: biblioteca padrão (Arcane.*), arquivos ao lado do seu, e então forge_modules/, procurando da pasta atual para cima até achar um forge.toml.

dataforge
adopt validador as V           # forge_modules/validador/src/main.df
adopt validador.email as E     # forge_modules/validador/src/email.df