أطر CLI لـ TypeScript: نظرة شاملة وأمثلة برمجية

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

أطر CLI لـ TypeScript: إنشاء تطبيقات وحدة تحكم قوية



التطوير الحديث باستخدام TypeScript لا يمكن تصوره بدون أدوات سطر الأوامر (CLI). سواء كان بناء المشروع، أو توليد الكود، أو أتمتة المهام - فإن واجهة CLI عالية الجودة تزيد من إنتاجية المطور. في هذه المقالة، سنستعرض أفضل الأطر لإنشاء CLI باستخدام TypeScript، وميزاتها، وسنقدم أمثلة عملية.



لماذا نحتاج إلى إطار CLI؟



إنشاء CLI من الصفر مهمة شاقة. توفر الأطر حلولاً جاهزة لـ:

  • تحليل وسائط سطر الأوامر
  • إنشاء تسلسل هرمي للأوامر (أوامر فرعية)
  • توليد المساعدة تلقائياً (--help)
  • معالجة الأخطاء والتحقق من صحة الإدخال
  • التلميحات التفاعلية (الإكمال التلقائي)
  • الإخراج الملون وأشرطة التقدم


أفضل أطر CLI لـ TypeScript



1. Commander.js



الإطار الأكثر شيوعاً لـ Node.js CLI. يتميز بالبساطة والمرونة. مناسب تماماً للمشاريع من أي حجم.



import { Command } from 'commander';

const program = new Command();

program .name('my-cli') .description('مثال لتطبيق CLI') .version('1.0.0');

program .command('greet') .argument('<name>', 'اسم المستخدم') .option('-l, --language <lang>', 'لغة التحية', 'ar') .action((name, options) => { const greetings: Record<string, string> = { ar: `مرحباً، ${name}!`, en: `Hello, ${name}!`, es: `¡Hola, ${name}!`, }; console.log(greetings[options.language] || greetings['ar']); });

program.parse(process.argv);


مزايا Commander:

  • API بديهي وسهل الفهم
  • دعم TypeScript مباشر
  • تكامل سهل مع المكتبات الأخرى
  • مجتمع كبير ووثائق شاملة


2. Ink (React لواجهات CLI)



إطار فريد يسمح ببناء واجهات CLI باستخدام مكونات React. مثالي للتطبيقات التفاعلية ذات واجهة المستخدم الغنية.



import React, { useState } from 'react';import { render, Text, Box, useInput } from 'ink';

const Counter = () => { const [count, setCount] = useState(0);

useInput((input) => { if (input === 'q') process.exit(0); if (input === '+') setCount(c => c + 1); if (input === '-') setCount(c => c - 1); });

return ( <Box flexDirection="column" alignItems="center"> <Text color="green" bold>العداد: {count}</Text> <Text dimColor>اضغط + أو - للتغيير، q للخروج</Text> </Box> );};

render(<Counter />);


مزايا Ink:

  • نهج قائم على المكونات (مألوف لمطوري React)
  • تحديث تلقائي للواجهة
  • دعم الرسوم المتحركة وأشرطة التقدم
  • تخصيص مرن للإخراج


3. Oclif (محرك Heroku CLI)



إطار من مبتكري Heroku CLI. يوفر مولد مشاريع قوياً ودعماً مدمجاً للإضافات. مناسب تماماً للحلول المؤسسية.



import { Command, Flags } from '@oclif/core';

export class Greet extends Command { static description = 'تحية المستخدم';

static flags = { name: Flags.string({ char: 'n', description: 'الاسم', required: true }), uppercase: Flags.boolean({ char: 'u', description: 'أحرف كبيرة' }), };

async run(): Promise<void> { const { flags } = await this.parse(Greet); let message = `مرحباً، ${flags.name}!`; if (flags.uppercase) message = message.toUpperCase(); this.log(message); }}


مزايا Oclif:

  • توليد تلقائي لـ CLI (عبر npx oclif generate)
  • نظام اختبار مدمج
  • دعم الخطافات والإضافات

توصيات