# Basic Commander.js Usage Simple examples demonstrating core Commander.js features. ## Example 1: Simple CLI with Commands ```typescript import { Command } from 'commander'; const program = new Command(); program .name('mycli') .description('My CLI tool') .version('1.0.0'); // Command without options program .command('init') .description('Initialize project') .action(() => { console.log('Initializing project...'); }); // Command with options program .command('build') .description('Build project') .option('-w, --watch', 'watch mode') .action((options) => { console.log('Building...'); if (options.watch) { console.log('Watch mode enabled'); } }); program.parse(); ``` **Usage:** ```bash mycli init mycli build mycli build --watch mycli --help mycli --version ``` ## Example 2: Command with Arguments ```typescript import { Command } from 'commander'; const program = new Command(); program .name('mycli') .version('1.0.0'); program .command('greet ') .description('Greet someone') .action((name) => { console.log(`Hello, ${name}!`); }); program .command('add ') .description('Add two numbers') .action((a, b) => { const sum = parseInt(a) + parseInt(b); console.log(`${a} + ${b} = ${sum}`); }); program.parse(); ``` **Usage:** ```bash mycli greet Alice # Output: Hello, Alice! mycli add 5 3 # Output: 5 + 3 = 8 ``` ## Example 3: Options with Different Types ```typescript import { Command } from 'commander'; const program = new Command(); program .name('mycli') .version('1.0.0'); program .command('serve') .description('Start development server') // Boolean flag .option('-o, --open', 'open browser', false) // Option with value .option('-p, --port ', 'port number', '3000') // Option with default .option('-h, --host ', 'hostname', 'localhost') // Negatable option .option('--no-color', 'disable colors') .action((options) => { console.log(`Server running at http://${options.host}:${options.port}`); console.log('Open browser:', options.open); console.log('Colors:', options.color); }); program.parse(); ``` **Usage:** ```bash mycli serve # Uses defaults mycli serve --port 8080 # Uses custom port mycli serve --open --no-color # Opens browser and disables colors ``` ## Example 4: Global Options ```typescript import { Command } from 'commander'; const program = new Command(); program .name('mycli') .version('1.0.0') // Global options .option('-v, --verbose', 'verbose output') .option('-c, --config ', 'config file path'); program .command('deploy') .action((options, command) => { const globalOpts = command.parent?.opts(); console.log('Deploying...'); if (globalOpts?.verbose) { console.log('Verbose mode enabled'); console.log('Config:', globalOpts.config); } }); program.parse(); ``` **Usage:** ```bash mycli deploy # Normal output mycli --verbose deploy # Verbose output mycli --verbose --config ./config.json deploy # Verbose with custom config ``` ## Example 5: Multiple Commands ```typescript import { Command } from 'commander'; import chalk from 'chalk'; const program = new Command(); program.name('mycli').version('1.0.0'); program .command('init') .description('Initialize new project') .action(() => { console.log(chalk.green('✓ Project initialized')); }); program .command('build') .description('Build project') .action(() => { console.log(chalk.blue('Building...')); console.log(chalk.green('✓ Build complete')); }); program .command('test') .description('Run tests') .action(() => { console.log(chalk.blue('Running tests...')); console.log(chalk.green('✓ All tests passed')); }); program .command('deploy') .description('Deploy to production') .action(() => { console.log(chalk.yellow('Deploying...')); console.log(chalk.green('✓ Deployed')); }); program.parse(); ``` **Usage:** ```bash mycli init mycli build mycli test mycli deploy mycli --help # Shows all commands ``` ## Running the Examples ### Setup 1. Create a new project: ```bash mkdir my-cli cd my-cli npm init -y ``` 2. Install dependencies: ```bash npm install commander chalk npm install -D typescript @types/node tsx ``` 3. Configure TypeScript: ```bash npx tsc --init --target ES2022 --module ESNext ``` 4. Create `src/index.ts` with any example above 5. Run with tsx: ```bash npx tsx src/index.ts --help ``` ### Building for Production ```bash # Build TypeScript npx tsc # Run compiled version node dist/index.js ``` ### Making it Executable Add to `package.json`: ```json { "bin": { "mycli": "./dist/index.js" } } ``` Add shebang to top of source file: ```typescript #!/usr/bin/env node import { Command } from 'commander'; // ... rest of code ``` Install globally for testing: ```bash npm link mycli --help ```