跳到主要内容
知仓学习社ZHICANG

yargs-scaffolder

Generate Yargs-based CLI applications with commands, positional args, middleware, and TypeScript support. Creates a complete scaffolded CLI applicat…

不碰外部(只输出文字)无严重或高危命中a5c-ai/babysitter

它会碰到什么

扫了多少2 个文本文件,8 KB
它会碰到什么不碰外部(只输出文字)
命中总数0 处
命中统计严重 0 · 高 0 · 中 0 · 低 0

这一栏是扫描器报的事实,不是结论。命中多不等于有毒(安全工具、规则库、示例脚本本来就会包含危险写法),命中少也不等于干净。它和你手上的凭据、文件、网络有什么关系,需要你自己看。

技能内容

Yargs Scaffolder

Generate a complete Yargs CLI application with TypeScript, middleware support, and best practices.

Capabilities

  • Generate TypeScript-based Yargs CLI projects
  • Create command modules with positional arguments
  • Set up middleware for common operations (logging, config loading)
  • Configure type coercion and validation
  • Implement strict mode and fail handlers
  • Set up build and development workflows

Usage

Invoke this skill when you need to:

  • Bootstrap a new CLI application using Yargs
  • Create a CLI with command modules pattern
  • Set up middleware-based processing
  • Configure complex argument parsing

Inputs

| Parameter | Type | Required | Description |

|-----------|------|----------|-------------|

| projectName | string | Yes | Name of the CLI project (kebab-case) |

| description | string | Yes | Short description of the CLI |

| commands | array | No | List of commands to scaffold |

| typescript | boolean | No | Use TypeScript (default: true) |

| packageManager | string | No | npm, yarn, or pnpm (default: npm) |

| strictMode | boolean | No | Enable strict mode (default: true) |

Command Structure

{
  "commands": [
    {
      "name": "serve",
      "description": "Start the server",
      "aliases": ["s"],
      "positional": [
        { "name": "port", "type": "number", "default": 3000 }
      ],
      "options": [
        { "name": "host", "type": "string", "default": "localhost" },
        { "name": "watch", "type": "boolean", "alias": "w" }
      ]
    }
  ]
}

Output Structure

<projectName>/
├── package.json
├── tsconfig.json
├── .gitignore
├── README.md
├── src/
│   ├── index.ts              # Entry point
│   ├── cli.ts                # Yargs setup
│   ├── commands/
│   │   ├── index.ts          # Command exports
│   │   └── <command>.ts      # Command modules
│   ├── middleware/
│   │   ├── logger.ts         # Logging middleware
│   │   └── config.ts         # Config loading middleware
│   ├── utils/
│   │   └── helpers.ts        # Helper utilities
│   └── types/
│       └── index.ts          # Type definitions
└── tests/
    └── commands/
        └── <command>.test.ts

Generated Code Patterns

Main CLI Entry (src/cli.ts)

import yargs from 'yargs';
import { hideBin } from 'yargs/helpers';
import * as commands from './commands';
import { loggerMiddleware } from './middleware/logger';

export const cli = yargs(hideBin(process.argv))
  .scriptName('<projectName>')
  .usage('$0 <cmd> [args]')
  .middleware([loggerMiddleware])
  .command(commands.serveCommand)
  .command(commands.buildCommand)
  .demandCommand(1, 'You need at least one command')
  .strict()
  .fail((msg, err, yargs) => {
    if (err) throw err;
    console.error(msg);
    console.error(yargs.help());
    process.exit(1);
  })
  .help()
  .alias('help', 'h')
  .version()
  .alias('version', 'v')
  .wrap(Math.min(120, process.stdout.columns || 80));

Command Module Template

import { CommandModule, Argv } from 'yargs';

interface ServeArgs {
  port: number;
  host: string;
  watch: boolean;
}

export const serveCommand: CommandModule<{}, ServeArgs> = {
  command: 'serve [port]',
  aliases: ['s'],
  describe: 'Start the development server',
  builder: (yargs: Argv) => {
    return yargs
      .positional('port', {
        type: 'number',
        default: 3000,
        describe: 'Port to listen on'
      })
      .option('host', {
        type: 'string',
        default: 'localhost',
        describe: 'Host to bind to'
      })
      .option('watch', {
        alias: 'w',
        type: 'boolean',
        default: false,
        describe: 'Enable watch mode'
      });
  },
  handler: async (argv) => {
    console.log(`Starting server on ${argv.host}:${argv.port}`);
  }
};

Dependencies

{
  "dependencies": {
    "yargs": "^17.0.0"
  },
  "devDependencies": {
    "@types/node": "^20.0.0",
    "@types/yargs": "^17.0.0",
    "typescript": "^5.0.0",
    "tsx": "^4.0.0",
    "vitest": "^1.0.0"
  }
}

Workflow

  1. Validate inputs - Check project name, commands structure
  2. Create directory structure - Set up folders and base files
  3. Generate package.json - Configure project metadata
  4. Generate tsconfig.json - TypeScript configuration
  5. Create CLI entry point - Yargs setup with middleware
  6. Generate command modules - Individual command files
  7. Create middleware - Logger, config middleware
  8. Set up tests - Test structure for commands
  9. Initialize git - Optional git initialization

Best Practices Applied

  • TypeScript strict mode enabled
  • Command module pattern for scalability
  • Middleware for cross-cutting concerns
  • Strict mode with custom fail handler
  • Proper type definitions for arguments
  • Completion script support

References

  • Yargs Documentation: https://yargs.js.org/
  • Yargs GitHub: https://github.com/yargs/yargs
  • Command Modules: https://yargs.js.org/docs/#api-reference-commandmodule

Target Processes

  • cli-application-bootstrap
  • argument-parser-setup
  • cli-command-structure-design

想直接用这个技能?

本站把开放许可(MIT / Apache 等)的技能按仓库打包整理到网盘,点一下转存到你自己的网盘,不用一个个从 GitHub 拉。许可未声明的技能只给原始仓库链接,不打包。

它属于哪个仓库

星标★ 1,796
本站分层T1
该仓技能数2115
原文件路径library/specializations/cli-mcp-development/skills/yargs-scaffolder/SKILL.md

同一个仓库里的其他技能

看这个仓库的全部 2115 个技能