Referencia: Herramienta CLI Interna
Una CLI interna de referencia para equipos de plataforma: Commander.js, ESM, publicación privada en npm - patrones de Node.js 24 para herramientas estilo acme-cli.
Busca en todas las páginas de la documentación
Una CLI interna de referencia para equipos de plataforma: Commander.js, ESM, publicación privada en npm - patrones de Node.js 24 para herramientas estilo acme-cli.
Tarjeta de receta de referencia 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("Acme platform CLI")
.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>", "target", "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 en la wiki de la plataforma| Pro | Contra |
|---|---|
| Mismo lenguaje que las APIs | Arranque en frío vs Go/Rust |
| Tipos compartidos con monorepo | Tamaño del binario |
fetch incorporado en Node 24 | Requiere Node instalado |
1. --flag
2. ACME_API_TOKEN env
3. ~/.config/acme/config.json
4. valores predeterminados| Canal | Uso |
|---|---|
| npm privado | Predeterminado para organizaciones JS |
pkg / nexe | Sin conexión (añade complejidad de construcción) |
| Imagen Docker | Operadores solo de CI |
"type":"module" + importaciones .js en dist.acme-cli --version. Solución: Documentar npm update -g @acme/cli.node:testVersiones de la pila: Esta página fue escrita para Node.js 24.18.0 (LTS activa), npm 10+, TypeScript 5.6+, Express 5, Fastify 5 y NestJS 11.
Revisado por Chris St. John·Última actualización: 16 jul 2026