Artifacts
napi artifacts localiza recursivamente arquivos .node e .wasm gerados,
valida seus nomes de binário e sufixos de target e os copia para os pacotes npm
correspondentes de cada plataforma. Os arquivos nativos também são copiados
para o diretório do pacote raiz para que o loader gerado consiga resolver um
binding local.
Uso
napi artifacts [--options]
import { NapiCli } from '@napi-rs/cli'
await new NapiCli().artifacts({
outputDir: 'artifacts',
npmDir: 'npm',
})
Opções
| Opção | Sintaxe CLI | Tipo | Obrigatório | Padrão | Descrição |
|---|---|---|---|---|---|
cwd |
--cwd |
string |
Não | process.cwd() |
Diretório-base para configuração, pacote, artefatos baixados, pacotes npm e saídas de build. |
configPath |
--config-path,-c |
string |
Não | Arquivo JSON de configuração do napi independente. | |
packageJsonPath |
--package-json-path |
string |
Não | package.json |
Pacote raiz que contém a configuração do napi. |
outputDir |
--output-dir,-o,-d |
string |
Não | ./artifacts |
Diretório pesquisado recursivamente em busca dos arquivos .node e .wasm baixados. Isso corresponde ao caminho de download dos artefatos, não a npm/. |
npmDir |
--npm-dir |
string |
Não | npm |
Diretório que contém os pacotes gerados de cada plataforma. |
buildOutputDir |
--build-output-dir |
string |
Não | cwd |
Diretório que contém os arquivos JavaScript WASI e worker gerados. Caminhos relativos partem de --cwd. |
Não existe a opção --dist. Use --output-dir para os artefatos de build
baixados e --npm-dir para os destinos dos pacotes de plataforma.
Workflow de CI
Cada job de build deve enviar arquivos com o nome configurado do binário e o ABI do target, por exemplo:
cool.darwin-arm64.node
cool.linux-x64-gnu.node
cool.win32-x64-msvc.node
cool.wasm32-wasi.wasm
No job de coleta, crie os diretórios dos pacotes, baixe todos os artefatos e depois faça a coleta:
- name: Create platform packages
run: yarn napi create-npm-dirs
- name: Download all build artifacts
uses: actions/download-artifact@v8
with:
path: artifacts
- name: Move artifacts into packages
run: yarn napi artifacts --output-dir artifacts --npm-dir npm
Normalmente, actions/download-artifact cria um diretório aninhado por
artefato enviado. A CLI pesquisa recursivamente, então estes dois layouts
funcionam:
artifacts/
├── bindings-aarch64-apple-darwin/
│ └── cool.darwin-arm64.node
├── bindings-x86_64-unknown-linux-gnu/
│ └── cool.linux-x64-gnu.node
└── bindings-x86_64-pc-windows-msvc/
└── cool.win32-x64-msvc.node
Depois da coleta:
.
├── cool.darwin-arm64.node
├── cool.linux-x64-gnu.node
├── cool.win32-x64-msvc.node
└── npm/
├── darwin-arm64/cool.darwin-arm64.node
├── linux-x64-gnu/cool.linux-x64-gnu.node
└── win32-x64-msvc/cool.win32-x64-msvc.node
Regras de correspondência
Para cada arquivo encontrado, a CLI:
- Separa do nome do arquivo o sufixo final delimitado por pontos, como
linux-x64-gnu. - Exige que o nome-base restante seja igual a
napi.binaryName. Um nome de binário diferente gera um aviso e é ignorado. - Encontra o pacote de target configurado cujo diretório corresponde a esse sufixo de plataforma. Um arquivo sem pacote de target faz o comando falhar, exceto binários de origem que são combinados intencionalmente em um binário universal configurado.
- Grava o arquivo nesse pacote de target e no diretório do pacote raiz.
WARNING
O comando confia no sufixo do nome do arquivo. Ele não inspeciona o binário nativo para comprovar sua arquitetura, libc, sistema operacional mínimo ou nível de Node-API. Teste cada artefato no runtime que ele afirma suportar antes de publicar.
Artefatos WASI
Quando napi.targets inclui um target WASI, napi artifacts também copia os
arquivos de suporte gerados para npm/wasm32-wasi:
<binaryName>.wasi.cjs<binaryName>.wasi-browser.jswasi-worker.mjswasi-worker-browser.mjs
Por padrão, esses arquivos são lidos a partir de --cwd. Passe
--build-output-dir quando a build WASI os tiver gravado em outro lugar; um
valor relativo parte de --cwd. O arquivo .wasm baixado continua sendo
localizado em --output-dir.
Depois de coletar e verificar todos os targets, napi pre-publish
versiona e publica os pacotes de plataforma. napi pre-publish não copia
artefatos ausentes para você.