tinyjs: اپ دسکتاپ با وب، فقط حدود ۶ مگابایت
خلاصهٔ کاملتر
ریموند کمدن تو این پست ابزار tinyjs رو معرفی میکنه؛ یه گزینهٔ دیگه برای ساختن اپ دسکتاپ با کد وب، کنار Tauri و Flet. ایدهش شبیه PhoneGap یا Apache Cordovaه: اپ شما تو web view خود سیستمعامل اجرا میشه و برای کارهای سیستمی یه پل به txiki.js (یعنی یه runtime سبک جاوااسکریپت) داره. از این راه به فایلسیستم و بقیهٔ امکانات یه اپ native دسترسی دارید. فرقش با PhoneGap اینه که فقط برای دسکتاپه.
به گفتهٔ نویسنده بزرگترین نقطهٔ قوتش حجم اپ نهاییه که معمولاً حدود ۶ مگابایته، در حالی که اپهای Electron خیلی سنگینترن. امکانات معمول اپ دسکتاپ هم سر جاشه: دیالوگها و منوهای native، ذخیرهٔ امن تو credential store سیستمعامل، SQLite و آپدیت خودکار اپ.
پروژه با tinyjs new appname ساخته میشه و بهطور پیشفرض یه اپ vanilla تحویل میده، بدون React. دو بخش اصلی داره: پوشهٔ frontend برای رابط کاربری و فایل main.js که نقش بکاند رو داره و کارهای سیستمیای رو انجام میده که جاوااسکریپت فرانت نمیتونه. هر تابعی که تو آبجکت api بکاند تعریف بشه، از فرانت با tiny.api.call صدا زده میشه. اجرا هم با tinyjs dev هست که HMR داره و نویسنده میگه reload خیلی سریع بوده.
برای تست، کمدن یه اپ کوچیک «RSS به HTML» با Alpine.js ساخته. اولین سؤالش این بود که CORS (یعنی محدودیت مرورگر برای درخواست به دامنههای دیگه) هنوز روی fetch اعمال میشه یا نه. جواب مثبته، ولی مهم نیست چون میشه بهجاش از tiny.fetch استفاده کرد. کتابخونهٔ rss-parser خودش با fetch کار میکنه و جلوش گرفته میشه، برای همین XML رو با tiny.fetch گرفته و به parseString داده:
async parse() {
const parser = new RSSParser();
let req = await tiny.fetch(this.url);
let res = await req.text();
let feed = await parser.parseString(res);
this.items = feed.items;
},نویسنده میگه قدم بعدیش تست یه flow ورود با OAuth هست. tinyjs از ثبت URL scheme سفارشی پشتیبانی میکنه که معمولاً همین برای OAuth لازمه، پس باید شدنی باشه، ولی هنوز خودش امتحانش نکرده.
نکات کلیدی:
- tinyjs اپ دسکتاپ رو روی web view سیستمعامل و پل txiki.js میسازه
- حجم اپ نهایی معمولاً حدود ۶ مگابایته، خیلی کمتر از Electron
- پشتیبانی از دیالوگ و منوی native، credential store، SQLite و آپدیت خودکار
- fetch معمولی هنوز درگیر CORS هست، ولی tiny.fetch این محدودیت رو نداره
- فقط برای دسکتاپه و قالبهای آماده برای فریمورکهایی مثل Alpine داره




