Referência: Ferramenta CLI Interna
Uma ferramenta CLI interna de referência para equipes de plataforma: Commander.js, ESM, publicação npm privada - padrões do Node.js 24 para ferramentas estilo acme-cli.
Busque em todas as páginas da documentação
Uma ferramenta CLI interna de referência para equipes de plataforma: Commander.js, ESM, publicação npm privada - padrões do Node.js 24 para ferramentas estilo acme-cli.
Cartão de referência rápida.
package.json bin → dist/cli.js
├── acme-cli auth login
├── acme-cli deploy promote --service orders-api
└── acme-cli db migrate status{
"name": "@acme/cli",
"version": "2.4.0",
"type": "module",
"bin": { "acme-cli": "./dist/cli.js" },
"engines": { "node": ">=24.18.0" }
}// src/cli.ts
#!/usr/bin/env node
import { Command } from "commander";
import { registerDeployCommands } from "./commands/deploy.js";
import { registerAuthCommands } from "./commands/auth.js";
const program = new Command()
.name("acme-cli")
.description("CLI da plataforma Acme")
.version("2.4.0");
registerAuthCommands(program);
registerDeployCommands(program);
await program.parseAsync(process.argv);// src/commands/deploy.ts
import type { Command } from "commander";
import { getConfig } from "../config.js";
export function registerDeployCommands(program: Command) {
program
.command("promote")
.requiredOption("--service <name>")
.option("--env <env>", "alvo", "staging")
.action(async (opts) => {
const cfg = await getConfig();
const res = await fetch(`${cfg.apiBase}/v1/deploy/promote`, {
method: "POST",
headers: { Authorization: `Bearer ${cfg.token}` },
body: JSON.stringify(opts),
});
if (!res.ok) throw new Error(`promote failed: ${res.status}`);
console.log(await res.json());
});
}// test/deploy.test.ts
import { test } from "node:test";
import assert from "node:assert/strict";
import { spawn } from "node:child_process";
test("promote requires --service", async () => {
const child = spawn("node", ["dist/cli.js", "promote"], { shell: false });
const code = await new Promise<number>((r) => child.on("close", r));
assert.notEqual(code, 0);
});# .github/workflows/publish-cli.yml
- run: npm run build
- run: npm publish --access restricted
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}npx @acme/cli@latest documentado na wiki da plataforma| Pró | Contra |
|---|---|
| Mesma linguagem das APIs | Cold start vs Go/Rust |
| Tipos compartilhados com monorepo | Tamanho do binário |
fetch nativo no Node 24 | Requer Node instalado |
1. --flag
2. Token de API ACME_API_TOKEN env
3. ~/.config/acme/config.json
4. Padrões| Canal | Uso |
|---|---|
| npm privado | Padrão para organizações JS |
pkg / nexe | Air-gapped (adiciona complexidade de build) |
| Imagem Docker | Operadores apenas em CI |
"type":"module" + imports .js em dist.acme-cli --version incompatível. Correção: Documentar npm update -g @acme/cli.node:testVersões da Stack: Esta página foi escrita para Node.js 24.18.0 (LTS Ativo), npm 10+, TypeScript 5.6+, Express 5, Fastify 5 e NestJS 11.
Revisado por Chris St. John·Última atualização: 16 de jul. de 2026