چگونه یک ابزار CLI برای شروع پروژه با NodeJs بسازیم

شروع یک پروژه نرم افزاری جدید می تواند فرآیندی زمان بر و تکراری باشد. توسعه دهندگان اغلب نیاز به ایجاد یک ساختار پروژه و گنجاندن فایل های پیکربندی و وابستگی های مختلف برای اجرای پروژه دارند. این الزامات معمولاً به عنوان کد دیگ بخار نامیده می شوند و می توانند مجدداً در سراسر پروژه ها استفاده شوند. در حالی که بسیاری از فریم ورکها دستورات CLI را برای سادهسازی فرآیند شروع یک پروژه ارائه میکنند، ممکن است همه موارد استفاده را پوشش ندهند.
به عنوان مثال، توسعه دهندگان ممکن است نیاز به استفاده مجدد از کدهای نوشته شده قبلی داشته باشند، مانند تنظیمات پرده، پیکربندی پایگاه داده، و قطعه کد مرتبط. تکرار این وظایف برای هر پروژه می تواند استرس زا و مستعد خطا باشد. یکی از راههای سادهسازی فرآیند، ایجاد یک ابزار CLI است که شروعکنندههای پروژه و قطعههای کد را بر اساس نیازهای خاص تولید میکند.
در این مقاله، نحوه ساخت یک الگوی شروع پروژه CLI با استفاده از Nodejs، readline-sync، Colors و fs-extra را بررسی خواهیم کرد. تا پایان این مقاله، شما باید بتوانید ابزار CLI مولد قالب پروژه خود را با Nodejs ایجاد کنید، پس بیایید شروع کنیم.
پیش نیازها
قبل از شروع، باید با موارد زیر آشنا باشید:
- NodeJS
- جاوا اسکریپت
- NPM
- خط فرمان پایه لینوکس
بیا شروع کنیم
بیایید به ساخت یک CLI الگوی شروع پروژه Nodejs بپردازیم. برای شروع، لطفا این مراحل را دنبال کنید:
- با باز کردن یک ترمینال و ایجاد یک پوشه به نام “nodejs-project-cli” یک پروژه جدید Node.js ایجاد کنید. سپس وارد پوشه شده و تایپ کنید
npm init -y
برای ایجاد یک پروژه Node.js جدید با گزینه های پیش فرض.
-
با اجرا کردن وابستگی های لازم را نصب کنید
npm install colors readline-sync fs-extra –save
در ترمینال با این کار افزونه های مورد نیاز برای پروژه ما نصب می شود. -
پوشه پروژه را در ویرایشگر متن مورد علاقه خود باز کنید و یک پوشه به نام “templates” در فهرست اصلی ایجاد کنید. این پوشه تمام پروژه هایی را که می خواهید با ابزار CLI که در حال ساختن آن هستیم تولید کنید، نگهداری می کند.
-
یک پوشه با نام “simple-express-app” در داخل پوشه “templates” ایجاد کنید.
-
فایلی به نام index.js ایجاد کنید و قطعه کد ارائه شده در زیر را اضافه کنید. خط اول اسکریپت shebang نامیده می شود و به پوسته در مورد مفسری که در هنگام اجرای کد روی ترمینال استفاده می شود، اطلاع می دهد.
قطعه کد از افزونه readline-sync برای درخواست ورودی و از افزونه fs-extra برای دستکاری سیستم فایل استفاده می کند. سپس قبل از اینکه از کاربر بخواهد یک الگو را انتخاب کند، خالی بودن پوشه templates را بررسی می کند. هنگامی که یک الگو انتخاب شد، اسکریپت از کاربر می خواهد نام پروژه را بنویسد، نام پروژه را تأیید می کند و سپس الگوی انتخاب شده را در دایرکتوری جدید کپی می کند.
#!/usr/bin/env node
require('colors')
const readLineSync = require("readline-sync")
const path = require('path')
const fse = require('fs-extra')
const NO_CHOICE_MADE = -1
const CURR_DIR = process.cwd();
const templatesDir = path.join(__dirname,'template')
const templates = fse.readdirSync(templatesDir)
if (!templates.length) {
console.log('no template to choose from , templates folder is empty');
process.exit(0)
}
const index = readLineSync.keyInSelect(templates)
if (index === NO_CHOICE_MADE) {
process.exit(0);
}
const projectName = readLineSync.question('What is the name of your project? ', {
limit: input => input.trim().length > 0,
limitMessage: 'The project has to have a name, try again'
});
const confirmCreateDirectory = readLineSync.keyInYN(`You entered '${projectName}', create directory with this name?`);
if (confirmCreateDirectory) {
const template = templates[index];
const source = path.join(templatesDir, template);
const destination = path.join(CURR_DIR, projectName);
fse.copy(source, destination)
.then(() => console.log(`Successfully created ${destination}`.green))
.catch(err => console.error(err));
} else {
console.log('Aborted creating a new template');
}
- اکنون که همه چیز را تنظیم کرده ایم، زمان آن رسیده است که فایل های اولیه مورد نیاز را به پوشه “simple-express-app” داخل پوشه “templates” اضافه کنیم. میتوانید پوشههای بیشتری را بر اساس تعداد فایلهای قالب استارتر که میخواهید اضافه کنید. پس از انجام این کار، اجازه دهید برنامه را اجرا کنیم و ببینیم چگونه به نظر می رسد. ترمینال را باز کنید و تایپ کنید
node index.js
.
برنامه در این مرحله به خوبی اجرا میشود، اما ما نمیخواهیم قبل از اینکه بتوانیم CLI خود را اجرا کنیم، مجبور به حرکت به پروژه باشیم. ما باید مطمئن شویم که پروژه ما به گونه ای تنظیم شده است که به عنوان یک اسکریپت bash اجرا شود و به صورت سراسری نصب شده باشد تا بتوان آن را به عنوان یک دستور در هر نقطه از ترمینال اجرا کرد.
برای این کار قطعه زیر را به فایل “package.json” اضافه کنید. کلید “bin” به ثبت “generateproject” به عنوان یک فرمان در ترمینال همانطور که در زیر مشاهده می شود کمک می کند:
"bin": {
"generateproject": "./index.js"
},
- در نهایت، ما باید ابزار CLI خود را به صورت جهانی نصب کنیم. پوشه پروژه را در ترمینال باز کرده و اجرا کنید
sudo npm link
یاsudo npm install
. این ابزار را به صورت سراسری نصب می کند و از طریق آن در دسترس قرار می گیردgenerateproject
فرمان
حالا بیایید CLI خود را آزمایش کنیم. ترمینال خود را در هر نقطه از دستگاه خود باز کنید و دستور را اجرا کنید generateproject
.
میتوانید کد دیگهای قالب بیشتری را به پوشه «قالبها» اضافه کنید، درست مانند آنچه برای «app-simple-express-app» انجام دادیم و آنها را در هر پروژه جدیدی که روی آن کار میکنید تولید کنید. همچنین می توانید با اجرای دستور، ابزار را حذف نصب کنید sudo npm unlink
یا sudo npm uninstall
.
نتیجه
آره، تو موفق شدی! شما با موفقیت یک رابط خط فرمان قدرتمند ایجاد کرده اید که به شما امکان می دهد به سرعت شروع کننده های پروژه را به راحتی ایجاد کنید. در حالی که ابزارهایی مانند این با عملکرد بسیار بیشتر وجود دارد، داشتن ابزار خود عالی است. هیچ چیز بهتر از آنچه توسط شما و برای شما نوشته شده است نیازهای شما را برآورده نمی کند.