Portless: خداحافظ به پورتهای عددی در لوکال!
خلاصهٔ کاملتر
اگه توسعهدهنده فرانت یا فولاستک باشی، حتماً با این دردسر آشنایی: یه تب مرورگر باز میکنی روی localhost:3000، یکی دیگه روی localhost:5173، یکی دیگه روی localhost:8080 و بعد از یه ساعت دیگه نمیدونی کدوم کدومه! Portless اومده این مشکل رو حل کنه.
Portless یه پروکسی محلی هست که بهجای پورتهای عددی، آدرسهای خوانا و باثبات مثل یا بهتون میده. نصبش سادهست؛ یا بهصورت گلوبال با npm install -g portless یا بهعنوان dev dependency توی پروژه.
وقتی اولین بار اجراش میکنی، یه CA محلی تولید میکنه و اون رو به سیستمعاملتون اضافه میکنه، یعنی هیچ هشدار SSL توی مرورگر نمیبینید. HTTPS و HTTP/2 هم بهصورت پیشفرض فعاله. HTTP/2 یه مزیت جدی داره: مرورگرها روی HTTP/1.1 فقط ۶ اتصال موازی دارن که با فریمورکهایی مثل Vite که فایلهای زیادی سرو میکنن، گلوگاه ایجاد میشه. HTTP/2 همه درخواستها رو روی یه کانکشن موازیسازی میکنه.
برای فریمورکهایی که متغیر PORT رو میخونن (مثل Next.js و Express)، Portless یه پورت تصادفی بین ۴۰۰۰ تا ۴۹۹۹ بهشون میده و همه چیز خودکار کار میکنه. برای اونهایی که PORT رو نادیده میگیرن (مثل Vite، Astro، Angular، Expo)، Portless خودش flag صحیح --port رو تزریق میکنه.
مونورپو هم پشتیبانی کامل داره. یه portless.json توی روت ریپو میذاری و هر پکیج میتونه آدرس مخصوص خودش رو داشته باشه. مثلاً apps/web میشه و apps/api میشه با pnpm، yarn، npm و bun همه کار میکنه.
یه قابلیت جالب دیگه پشتیبانی از Git Worktree هست. اگه روی چند برنچ موازی کار میکنید، Portless اسم برنچ رو بهعنوان سابدامین اضافه میکنه. مثلاً برنچ fix-ui میشه و برنچ اصلی میمونه روی هیچ تنظیم اضافهای لازم نیست.
حالت LAN هم داره؛ با --lan میتونید سرویسها رو از طریق mDNS به همه دستگاههای شبکه خانگیتون دسترسپذیر کنید. TLD پیشفرض .localhost هست ولی میتونید .test یا هر چیز دیگهای بذارید (توصیه میشه از .local و .dev اجتناب کنید چون با mDNS و HSTS تداخل دارن).
نکات کلیدی:
- آدرسهای localhost:PORT رو با URLهای خوانا مثل جایگزین میکنه
- HTTPS و HTTP/2 رو بهصورت پیشفرض و بدون تنظیم دستی فعال میکنه
- با فریمورکهای Next.js، Vite، Nuxt، Angular، Astro، Expo و... سازگاره
- پشتیبانی کامل از مونورپو (pnpm، yarn، npm، bun)
- Git Worktree رو شناسایی میکنه و برای هر برنچ URL جداگانه میسازه
- حالت LAN برای دسترسی از دستگاههای دیگه توی شبکه
- در محیطهای CI بهجای prompt، خطای واضح میده تا اسکریپتها زود fail بشن




