AI 技能AI 插件【免费下载链接】agentic-awesome-skillsAAS Core is the local, agent-first control plane for complete catalog discovery, agent-owned selection, stack validation, and planning, backed by 2,115 agentic skills. Includes CLI, local MCP, catalog, plugins, and Workbench.项目地址https://gitcode.com/gh_mirrors/an/agentic-awesome-skills点击查看免费下载本篇技术指南围绕 AASAgentic Awesome Skills仓库中 app-builder 技能体系下的 cli-tool 模板展开系统讲解如何用 Node.js 20 与 TypeScript 从零搭建一个生产可用的命令行工具涵盖 Commander.js 命令解析、Inquirer.js 交互提示、chalk/ora 输出体验、cosmiconfig 配置发现以及发布与最佳实践。读完本文你将掌握一套可直接复制运行、同时支持交互与非交互两种模式的 CLI 脚手架方法并能将其嵌入 Agent 驱动的应用搭建流程中。模板定位13 套应用模板中的 CLI 一员在 app-builder 这一主应用搭建编排器中Agent 会根据用户的自然语言请求判定项目类型、选择技术栈并协调多个专职 Agent 完成搭建。cli-tool是它维护的 13 套快速脚手架模板之一专门服务命令行工具这一类应用形态。模板技术栈适用场景nextjs-fullstackNext.js Prisma全栈 Web 应用express-apiExpress JWTREST APIcli-toolNode.js CommanderCLI 应用按照 templates/SKILL.md 的选择规则当用户提出创建一个命令行工具类需求时Agent 只读取cli-tool对应的 TEMPLATE.md并严格遵循其中的技术栈与目录结构进行脚手架生成。这也意味着本文描述的技术选型与工程布局是整个 AAS 技能库在 CLI 场景下的官方约定。技术栈一览六个组件的分工cli-tool 模板定义的技术栈非常精简每个组件各司其职组件技术职责运行时Node.js 20提供现代 JS/TS 运行时能力语言TypeScript类型安全与可维护性CLI 框架Commander.js命令与参数解析交互提示Inquirer.js交互式问答输出样式chalk ora彩色文本与加载动画配置加载cosmiconfig配置文件自动发现与解析这一组合覆盖了 CLI 工具的完整生命周期解析输入 → 交互收集 → 执行逻辑 → 反馈输出 → 读取配置。下面逐一深入。Commander.js命令行的语法解析器Commander.js 是 Node.js 生态最流行的 CLI 参数解析库。它负责把用户在终端输入的原始字符串如my-cli deploy --env prod --yes解析为结构化数据并自动生成--help帮助信息。模板将其用于命令解析与之配合的 Inquirer 用于交互提示——前者面向参数、后者面向问答。Inquirer.js把交互做到按需触发Inquirer.js 提供单选、多选、输入、确认等丰富的交互控件。模板将其用于交互提示同时要求支持--yes之类的非交互旗标详见下文设计原则保证工具在无人值守的 CI 或 Agent 调用场景下也能顺利运行。chalk ora终端体验的视觉层chalk为文本添加颜色与样式成功用绿色、警告用黄色、错误用红色让输出可读性显著提升ora提供终端 spinner 加载动画用于正在安装依赖正在构建等耗时操作的过程反馈。cosmiconfig配置的自动发现机制cosmiconfig 会自动向上层目录逐级搜索配置文件支持package.json中的mycli字段、.myclirc、mycli.config.js、.myclirc.json等多种命名约定帮助 CLI 工具读取用户级或项目级配置避免把参数全部塞进命令行。目录结构模块化布局与职责划分模板给出了一个清晰的 TypeScript CLI 项目骨架project-name/ ├── src/ │ ├── index.ts # 入口点 │ ├── cli.ts # CLI 组装 │ ├── commands/ # 命令处理器 │ ├── lib/ │ │ ├── config.ts # 配置加载 │ │ └── logger.ts # 样式化输出 │ └── types/ ├── bin/ │ └── cli.js # 可执行文件 └── package.json各文件职责如下文件/目录职责src/index.ts程序入口负责引导整个 CLIshebang、调用cli.tssrc/cli.tsCommander 实例组装注册子命令、挂载选项与全局钩子src/commands/每个子命令一个文件隔离业务逻辑src/lib/config.ts封装 cosmiconfig统一对外暴露配置读取 APIsrc/lib/logger.ts封装 chalk/ora提供统一的日志与 spinner 接口src/types/共享的类型定义命令选项类型、配置类型等bin/cli.js发布到PATH的可执行入口通常只是薄壳require 编译后的src/index.jspackage.json依赖声明与bin字段这种入口薄、命令分离、工具抽公共的布局与 app-builder 的 scaffolding 原则一脉相承路由/入口只做转发逻辑收敛到独立模块公共能力下沉到共享目录。CLI 设计四大原则从模板约定到实践落地模板用一张表格定义了 CLI 设计的四个核心原则原则说明Subcommands子命令将相关操作分组如build、deploy、configOptions选项提供带默认值的旗标参数Interactive交互在参数不足时主动提示补全Non-interactive非交互支持--yes等旗标跳过交互原则展开子命令 选项 双模式子命令让 CLI 具备多动词能力例如 Git 的clone/commit/push。Commander 通过program.command(deploy)注册子命令并可为每个子命令配置独立的选项。选项带默认值是减少用户心智负担的关键——--port number缺省 3000、--env name缺省development用户只需在需要覆盖时传参。交互与非交互双模式是最重要的工程约定有交互能力让终端用户觉得顺手有--yes/--no-input让 CI 和 Agent 可以无人值守调用。模板在最佳实践中明确要求同时支持两种模式这正是 Agent 友好 CLI 与普通 CLI 的分水岭。关键组件详解与可运行示例为了让上述技术栈落到可运行代码这里给出一个最小但完整的示例覆盖模板中的全部关键组件。1. 初始化与依赖安装mkdir my-cli cd my-cli npm init -y npm install commander inquirer/prompts chalk ora cosmiconfig npm install -D typescript types/node tsx注意模板要求的依赖是commander inquirer/prompts chalk ora cosmiconfig。其中inquirer/prompts是 Inquirer.js 官方推荐的模块化新版 APIchalk 与 ora 在新版本中均采用 ESM 导出TypeScript 项目中注意module配置如module: nodenext或使用兼容的构建目标。2. 配置 bin 字段与入口在package.json中声明可执行文件{ name: my-cli, version: 1.0.0, type: module, bin: { my-cli: ./bin/cli.js }, files: [bin, dist], scripts: { build: tsc, dev: tsx src/index.ts } }bin/cli.js作为薄壳仅负责调用编译产物#!/usr/bin/env node import(../dist/index.js);#!/usr/bin/env node这一 shebang 让系统直接用 Node 执行该文件是 CLI 可执行的前提。3. 组装命令src/cli.tsimport { Command } from commander; import { buildCommand } from ./commands/build.js; import { deployCommand } from ./commands/deploy.js; export function createCli() { const program new Command(); program .name(my-cli) .description(A Node.js CLI built from the cli-tool template) .version(1.0.0); program.addCommand(buildCommand()); program.addCommand(deployCommand()); program.parse(process.argv); }src/index.ts入口只做一件事#!/usr/bin/env node import { createCli } from ./cli.js; createCli();4. 命令处理器src/commands/deploy.tsimport { Command } from commander; import { confirm } from inquirer/prompts; import { log } from ../lib/logger.js; import { loadConfig } from ../lib/config.js; export function deployCommand() { return new Command(deploy) .description(Deploy the application) .option(--env name, target environment, development) .option(-y, --yes, skip all prompts) .action(async (options) { const config await loadConfig(); const env options.env ?? config.env; // 非交互模式直接放行交互模式二次确认 if (!options.yes) { const ok await confirm({ message: Deploy to ${env}?, default: false, }); if (!ok) return; } log.info(Deploying to ${env}...); // 业务逻辑... }); }5. 配置加载src/lib/config.tsimport { cosmiconfig } from cosmiconfig; const explorer cosmiconfig(mycli); export async function loadConfig() { const result await explorer.search(); return result?.config ?? {}; }cosmiconfig 会从当前目录向上逐级搜索.myclirc、.myclirc.json、mycli.config.js、package.json中的mycli字段等loadConfig的返回值可作为命令行选项的兜底默认值实现参数 配置文件 内置默认的优先级链。6. 样式化输出src/lib/logger.tsimport chalk from chalk; import ora from ora; export const log { info: (msg: string) console.log(chalk.blue(msg)), success: (msg: string) console.log(chalk.green(msg)), warn: (msg: string) console.log(chalk.yellow(msg)), error: (msg: string) console.error(chalk.red(msg)), }; export async function withSpinnerT(label: string, fn: () PromiseT): PromiseT { const spinner ora(label).start(); try { const result await fn(); spinner.succeed(); return result; } catch (err) { spinner.fail(String(err)); throw err; } }统一封装后业务代码不再直接依赖 chalk/ora换肤与日志策略调整只需改动这一处。五步搭建流程从空目录到可运行模板给出了从零搭建的标准步骤这里逐条展开为可执行指令创建项目目录mkdir project-name cd project-name初始化 package.jsonnpm init -y随后按上文示例补充bin、type、scripts等字段安装依赖npm install commander inquirer/prompts chalk ora cosmiconfig配置 package.json 的 bin 字段声明bin: { 命令名: ./bin/cli.js }并确保bin/cli.js带 shebang本地联调npm link将命令软链到全局PATH之后即可在任何目录直接敲命令名测试开发迭代阶段也可用npm run devtsx 直接执行 TS 源码。完成npm link后运行my-cli --help应能看到 Commander 自动生成的帮助信息my-cli --version输出版本号。发布到 npm三步上线模板给出的发布流程非常简洁npm login npm publish展开后的完整注意点先构建后发布执行npm run build产出dist/并确认package.json的files字段只打包必要目录如bin、dist避免把源码与测试文件带上npm login登录 npm 账号若未配置 registry注意确认源地址npm publish发布后可用npm i -g 包名安装验证。若希望日后覆盖发布需在发布前递增package.json中的version或使用npm version patch自动递增。最佳实践模板的经验清单模板在最佳实践一节给出了 5 条工程经验这里结合源码级示例逐一深化1. 提供有助益的错误信息错误信息应说明哪里错了 怎么办。例如配置文件解析失败时不要只抛Invalid config而是输出log.error(Failed to parse config at ${filePath}: ${err.message}); log.info(Tip: run my-cli config validate to check your config file.);配合logger.ts中统一的log.error红色与log.info蓝色用户一眼即可定位问题。2. 同时支持交互与非交互模式这是模板设计原则的直接落地凡是有confirm/prompt的地方都要先检查--yes或--no-input旗标。非交互模式下应使用命令行选项的默认值或配置文件的兜底值绝不能阻塞等待输入——否则在 CI 管道中会被永久挂起。3. 保持输出样式一致所有成功/失败/进度输出统一走logger.ts避免业务代码中零散出现console.log(chalk.xxx)。这样既保证色彩语义全局一致绿成功、红错误、黄警告也让安静模式--quiet只输出错误的实现成本降到最低。4. 用 Zod 校验输入模板明确要求用 Zod 做输入校验。与手写 if/else 相比Zod 提供声明式 schema 与类型推导import { z } from zod; const DeployOptions z.object({ env: z.enum([development, staging, production]).default(development), region: z.string().min(1).optional(), }); const parsed DeployOptions.parse(options); // 类型安全 运行时校验这一实践与 app-builder 默认技术栈中validation: Zod / TypeBox的选型保持一致说明 Zod 是 AAS 技能库在服务端与 CLI 场景下的统一校验方案。5. 使用正确的退出码退出码是脚本编排与 CI 判断成败的唯一依据try { await main(); process.exit(0); // 成功 } catch (err) { log.error(String(err)); process.exit(1); // 失败 }约定俗成0 表示成功1 表示一般错误也可为细分错误定义更具体的退出码如 2 表示参数错误便于上层脚本分类处理。总结cli-tool 模板给出了一个麻雀虽小、五脏俱全的现代 Node.js CLI 工程基准Commander.js 负责解析、Inquirer.js 负责交互、chalk/ora 负责体验、cosmiconfig 负责配置、Zod 负责校验、规范退出码负责可编排性。它既是 AAS app-builder 技能体系在 CLI 应用场景下的标准答案也可以脱离该体系、被任何开发者直接复制为个人 CLI 项目的起点。按照本文的步骤与示例从mkdir到npm publish即可在十几分钟内完成一个具备交互与自动化双模能力、体验规范、可发布可集成的命令行工具。赞分享AI 技能AI 插件【免费下载链接】agentic-awesome-skillsAAS Core is the local, agent-first control plane for complete catalog discovery, agent-owned selection, stack validation, and planning, backed by 2,115 agentic skills. Includes CLI, local MCP, catalog, plugins, and Workbench.项目地址https://gitcode.com/gh_mirrors/an/agentic-awesome-skills点击查看免费下载相关推荐claude-skills 之 cli-developer跨语言 CLI 工具开发的完整实战指南claude skills 之 cli developer跨语言 CLI 工具开发的完整实战指南 本篇指南系统讲解 claude skills 仓库中 cliAI 技能AI 插件后端前端DevOps在 Kiro CLI 中集成 Agentic Awesome Skills安装、技能调用与 AWS 云开发工作流实战指南在 Kiro CLI 中集成 Agentic Awesome Skills安装、技能调用与 AWS 云开发工作流实战指南 本篇指南讲解如何将 AgenticAI 技能AI 插件openpi部署指南两条Docker命令跑通机械臂仿真控制openpi部署指南两条Docker命令跑通机械臂仿真控制 openpi是机器人方向的开源视觉 语言 动作VLA模型库用两条Docker命令就能在MuJ人工智能大模型具身智能预训练微调模型推理服务上一篇EasyAdmin 后台安全加固自定义后台路径与 CSRF 防护完整指南下一篇如何将Android Action Bar Style Generator生成的资源集成到你的项目中创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考