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#
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 vezE no seu código:
adopt validador as V
adopt tabela as Tb
out V.cpf("529.982.247-25")
out Tb.render([["Ana", 30]], ["Nome", "Idade"])Os comandos#
| Comando | O que faz |
|---|---|
dataforge add <pacote> | instala e grava a dependência no forge.toml |
dataforge add <pacote>@1.2.0 | uma versão exata |
dataforge add <pacote>@^2.0 | uma faixa de versões |
dataforge remove <pacote> | desinstala e tira do manifesto |
dataforge install | instala tudo o que o forge.toml declara |
dataforge install --dry-run | mostra o plano sem baixar nada |
dataforge list | o que está instalado, e o que veio por transitividade |
dataforge search <termo> | procura no registro |
dataforge pack | empacota este projeto para publicar |
dataforge publish | manda o pacote para um registro |
Onde as coisas ficam#
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.dfFaixas de versão#
A mesma gramática do npm e do Cargo:
| Escrita | Aceita | Não aceita |
|---|---|---|
1.2.3 | só 1.2.3 | qualquer outra |
^1.2.3 | 1.2.3 até 1.9.9 | 2.0.0 |
^0.2.3 | 0.2.3 até 0.2.9 | 0.3.0 |
~1.2.3 | 1.2.3 até 1.2.99 | 1.3.0 |
>=1.0 <2.0 | 1.5.0 | 2.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:
[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:
dataforge add ../biblioteca-interna
dataforge add git+https://github.com/voce/lib.gitConflito 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ê:
✗ 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#
dataforge install --offlineUsa 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.
adopt validador as V # forge_modules/validador/src/main.df
adopt validador.email as E # forge_modules/validador/src/email.df