أطر عمل CLI لـ TypeScript: إنشاء تطبيقات وحدة تحكم قوية
تطوير واجهات سطر الأوامر (CLI) باستخدام TypeScript ليس مجرد كتابة محلل للوسائط. يمكن لتطبيقات CLI الحديثة أن تكون تفاعلية، ملونة، تدعم الإكمال التلقائي، وحتى تعرض رسومات متحركة. لهذا الغرض، توجد أطر عمل ومكتبات متخصصة. في هذه المقالة، سنستعرض أربع أدوات رئيسية لإنشاء CLI باستخدام TypeScript: Commander.js, Ink, Oclif و Yargs. ستتعرف على نقاط قوتها، وستحصل على أمثلة جاهزة للكود، وستفهم أي أداة تناسب مهمتك.
1. Commander.js — الكلاسيكية والبساطة
Commander.js هو الإطار الأكثر شيوعًا لإنشاء CLI باستخدام Node.js و TypeScript. يقدم واجهة برمجة تطبيقات (API) تعريفية لوصف الأوامر والوسائط والخيارات. بفضل الدعم المدمج لـ TypeScript، تحصل على الإكمال التلقائي والتحقق من الأنواع.
الإمكانيات الرئيسية:
- توليد تلقائي للتعليمات (
--help). - دعم الأوامر المتداخلة (الأوامر الفرعية).
- التحقق من صحة الوسائط الإلزامية.
- نظام خيارات مرن: منطقية، نصية، بقيم افتراضية.
مثال على CLI بسيط باستخدام Commander.js + TypeScript:
import { Command } from 'commander';
const program = new Command();
program .name('greet') .description('CLI للترحيب') .version('1.0.0');
program .command('hello') .argument('<name>', 'اسم المستخدم') .option('-l, --lang <language>', 'لغة الترحيب', 'ru') .action((name, options) => { if (options.lang === 'en') { console.log(`Hello, ${name}!`); } else { console.log(`Привет, ${name}!`); } });
program.parse(process.argv);Commander.js مثالي للأدوات البسيطة وبرامج الأتمتة النصية. إنه غير مثقل بالتبعيات غير الضرورية وموثق جيدًا.
2. Ink — CLI تفاعلي مع مكونات
Ink هو إطار عمل فريد يسمح لك ببناء واجهات CLI باستخدام مكونات تشبه React. تكتب باستخدام JSX، ويقوم Ink بعرض ذلك في الطرفية. بالاقتران مع TypeScript، تحصل على كتابة صارمة للمكونات.
الميزات الرئيسية:
- نهج قائم على المكونات:
<Text>,<Box>,<Spacer>. - تحديث تلقائي عند تغيير الحالة (التفاعلية).
- دعم الرسوم المتحركة، مؤشرات التحميل، أشرطة التقدم.
- تكامل عميق مع خطافات React (
useInput,useApp).
مثال على CLI تفاعلي باستخدام Ink:
import React, { useState } from 'react';import { render, Text, Box, useInput } from 'ink';
const Counter = () => { const [count, setCount] = useState(0);
useInput((input) => { if (input === '+') setCount(prev => prev + 1); if (input === '-') setCount(prev => prev - 1); });
return ( <Box> <Text>العداد: {count}. اضغط '+' أو '-'</Text> </Box> );};
render(<Counter />);Ink مناسب للأدوات التفاعلية المعقدة، معالجات التثبيت، ولوحات المعلومات في الطرفية. إنه الخيار الأفضل إذا كنت بحاجة إلى واجهة جميلة وسريعة الاستجابة.
3. Oclif — إطار عمل لـ CLI قابل للتوسع
Oclif (Open CLI Framework) من Heroku هو إطار عمل متكامل لإنشاء تطبيقات CLI بأي درجة من التعقيد. يدعم الإضافات، التحديث التلقائي، الخطافات، وتوليد المشاريع.
نقاط القوة:
- مولد كود مدمج (
oclif generate). - دعم TypeScript بشكل افتراضي.
- نظام إضافات لتوسيع الوظائف.
- تحديث تلقائي لـ CLI عبر npm.
مث