۱. Tauri چیست و چرا باید از آن استفاده کنیم؟
Tauri یک فریمورک متنباز برای ساخت برنامههای دسکتاپ و سایر برنامههای مبتنی بر رابط وب است. در این معماری، رابط کاربری میتواند با React، Vue، Svelte یا فناوریهای مشابه ساخته شود و بخش بومی برنامه با Rust و قابلیتهای سیستمعامل ارتباط برقرار کند. برخلاف تصور بعضی از توسعهدهندگان، Tauri صرفاً یک ابزار برای تبدیل سایت به فایل EXE نیست؛ بلکه بستری برای ساخت یک برنامه دسکتاپ با مرز مشخص میان رابط کاربری وب و قابلیتهای بومی سیستمعامل فراهم میکند. برای مثال، میتوانید فرم ثبت بیمار را با React بسازید، اعتبارسنجی دادهها را در رابط کاربری انجام دهید و سپس از طریق فرمانهای Rust اطلاعات را در پایگاه داده ذخیره کنید.
یکی از ویژگیهای مهم Tauri استفاده از موتور وب موجود در سیستمعامل است. در ویندوز، این موتور بر پایه WebView2 است که از فناوریهای Microsoft Edge استفاده میکند. به همین دلیل، Tauri معمولاً نیازی ندارد یک نسخه کامل از مرورگر را همراه برنامه توزیع کند؛ موضوعی که میتواند اندازه بسته نصب را کاهش دهد. البته اندازه نهایی به وابستگیها، فایلهای جانبی، پایگاه داده، آیکونها و نوع بستهبندی نیز بستگی دارد و نباید انتظار داشت همه برنامههای Tauri الزاماً حجم یکسانی داشته باشند.
برای یک پروژه واقعی، مزیت اصلی Tauri در امکان استفاده همزمان از اکوسیستم توسعه وب و قابلیتهای زبان Rust است. فرض کنید قصد دارید نرمافزار مدیریت یک مرکز فیزیوتراپی را طراحی کنید. میتوانید با React فرم پذیرش، فهرست بیماران، تقویم نوبتها و داشبورد را بسازید و برای عملیات فایل، ارتباط با پایگاه داده و منطق حساس برنامه از قابلیتهای بومی استفاده کنید. این ساختار به شما امکان میدهد رابط کاربری را سریع توسعه دهید، بدون اینکه تمام برنامه را از ابتدا با یک فریمورک گرافیکی بومی طراحی کنید.
تفاوت Tauri با Electron
Electron و Tauri هر دو امکان ساخت نرمافزار دسکتاپ با فناوریهای وب را فراهم میکنند، اما معماری آنها متفاوت است. Electron معمولاً Chromium و Node.js را در محیط برنامه خود ارائه میدهد؛ در مقابل، Tauri از WebView سیستمعامل استفاده میکند و برای بخش بومی به Rust متکی است. این تفاوت معماری میتواند بر حجم بسته، مصرف منابع و شیوه دسترسی به امکانات سیستمعامل اثر بگذارد، اما نتیجه واقعی به نوع برنامه و نحوه پیادهسازی بستگی دارد.
|
ویژگی |
Tauri 2 |
Electron |
|---|---|---|
|
رابط کاربری |
HTML، CSS، React و سایر فریمورکها |
HTML، CSS، React و سایر فریمورکها |
|
فناوری اصلی بخش بومی |
Rust |
Node.js و کد بومی |
|
موتور نمایش رابط |
WebView سیستمعامل |
Chromium همراه برنامه |
|
دسترسی به قابلیتهای سیستم |
فرمانها و افزونههای Tauri |
APIهای Electron و ماژولهای Node.js |
|
حجم بسته |
معمولاً امکان ساخت بسته کوچکتر وجود دارد |
معمولاً شامل اجزای بیشتری از محیط اجراست |
|
پیشنیاز توسعه |
Node.js، Rust و ابزارهای سیستمعامل |
Node.js و ابزارهای ساخت متناسب با پروژه |
|
مناسب برای |
برنامههای دسکتاپ سبک با مرزبندی امنیتی مشخص |
برنامههای دسکتاپ با اکوسیستم گسترده Node.js |
هیچکدام در تمام پروژهها برنده مطلق نیستند. اگر به کتابخانههای گسترده Node.js یا قابلیتهای خاص Electron وابستگی دارید، Electron ممکن است انتخاب عملیتری باشد. اگر میخواهید از React برای رابط کاربری و Rust برای بخش بومی استفاده کنید و حجم بسته و کنترل دسترسیها برایتان اهمیت دارد، Tauri ارزش بررسی جدی دارد.
۲. پیشنیازهای نصب Tauri در ویندوز
قبل از ایجاد پروژه، باید محیط توسعه را درست آماده کنید. بخش قابلتوجهی از خطاهای ابتدای کار Tauri نه از کد React ناشی میشوند و نه از خود فریمورک، بلکه به نصب ناقص Rust، نبود کامپایلر C++ یا تنظیم نبودن متغیرهای محیطی مربوط هستند. بنابراین بهتر است بهجای نصب تصادفی ابزارها، هر مرحله را کامل کنید و بعد به سراغ مرحله بعدی بروید. مستندات رسمی Tauri برای توسعه در ویندوز، ابزارهای ساخت C++، محیط Rust و WebView2 را از پیشنیازهای اصلی معرفی میکند.
Tauri
۲.۱. نصب Node.js و ابزارهای مدیریت بسته
اگر قرار است رابط کاربری را با React و TypeScript بسازید، به Node.js و یک مدیر بسته مانند npm نیاز دارید. Node.js محیط اجرای JavaScript خارج از مرورگر است و npm نیز برای نصب کتابخانهها، مدیریت وابستگیها و اجرای اسکریپتهای پروژه استفاده میشود. برای شروع، نسخه پایدار و پشتیبانیشده LTS را از وبسایت رسمی Node.js دریافت کنید: nodejs.org.
پس از نصب، ترمینال جدیدی باز کنید و دستورات زیر را اجرا کنید:
node -v
npm -v
اگر هر دو دستور شماره نسخه را نمایش دهند، این مرحله بهدرستی انجام شده است. اما اگر با خطایی مانند node is not recognized مواجه شدید، ابتدا بررسی کنید Node.js نصب شده باشد و مسیر پوشه نصب آن در متغیر محیطی PATH قرار گرفته باشد؛ سپس ترمینال را ببندید و دوباره باز کنید.
یک نکته مهم: نصب Node.js بهتنهایی برای اجرای برنامه دسکتاپ Tauri کافی نیست. Node.js وابستگیهای رابط کاربری را مدیریت میکند، درحالیکه کامپایل بخش بومی برنامه به ابزارهای دیگری نیاز دارد. این تفکیک را از همان ابتدا درک کنید تا هنگام مشاهده خطاهای کامپایل، مشکل را اشتباهاً به React یا npm نسبت ندهید.
۲.۲. نصب Rust و ابزارهای کامپایل ویندوز
Tauri برای بخش بومی برنامه از Rust استفاده میکند. ابزار پیشنهادی نصب Rust در ویندوز، rustup است که امکان نصب و مدیریت نسخههای کامپایلر و ابزارهای وابسته را فراهم میکند. برای دریافت آن به rust-lang.org/tools/install مراجعه کنید و هنگام نصب، ابزارهای متناسب با محیط ویندوز و معماری سیستم خود را انتخاب کنید.
بعد از نصب، این دستورات را اجرا کنید:
rustc --version
cargo --version
rustup show
دستور اول نسخه کامپایلر Rust، دستور دوم نسخه Cargo و دستور سوم اطلاعات محیط Rust را نمایش میدهد. Cargo ابزار رسمی مدیریت پروژه، وابستگیها و فرایند کامپایل در اکوسیستم Rust است. برای نمونه، هنگام ساخت نسخه نهایی Tauri، بخشی از فرایند کامپایل از طریق Cargo انجام میشود.
در ویندوز باید ابزارهای ساخت C++ مایکروسافت را نیز نصب کنید. در نصبکننده Visual Studio Build Tools، گزینه Desktop development with C++ را انتخاب کنید. همچنین WebView2 Runtime برای نمایش رابط وب برنامه موردنیاز است؛ این مؤلفه در بسیاری از نسخههای جدید ویندوز از قبل وجود دارد، اما بهتر است وضعیت آن را بررسی کنید.
Tauri
اگر نصب Rust به دلیل خطای شبکه متوقف شد، صرفاً تکرار دستور نصب لزوماً مشکل را حل نمیکند. ابتدا دسترسی به منابع دانلود، تنظیمات پروکسی و خطاهای TLS را بررسی کنید. همچنین پس از تغییر متغیرهای محیطی، یک ترمینال تازه باز کنید؛ زیرا ترمینال فعلی ممکن است همچنان مقادیر قبلی را در اختیار داشته باشد.
۳. ایجاد پروژه React با Vite
اکنون که پیشنیازها آمادهاند، نوبت ایجاد رابط کاربری است. برای این کار از Vite استفاده میکنیم؛ ابزاری که محیط توسعه سریع و فرایند ساخت فایلهای نهایی را برای پروژههای مدرن JavaScript فراهم میکند. React مسئول ساخت اجزای رابط کاربری خواهد بود و TypeScript کمک میکند بسیاری از خطاهای مربوط به نوع دادهها را پیش از اجرا شناسایی کنید.
در PowerShell به پوشهای بروید که میخواهید پروژه در آن ساخته شود. سپس دستور زیر را اجرا کنید:
npm create vite@latest
در مراحل تعاملی، نام پروژه را برای مثال clinic-desktop انتخاب کنید، React را بهعنوان فریمورک و TypeScript را بهعنوان زبان رابط کاربری برگزینید. اگر از قبل میدانید که میخواهید در ادامه از Tailwind CSS و React Router استفاده کنید، لازم نیست همه این وابستگیها را هنگام ساخت اولیه نصب کنید؛ میتوانید آنها را در مرحله مناسب به پروژه اضافه کنید.
پس از پایان ایجاد پروژه، وارد پوشه آن شوید و وابستگیها را نصب کنید:
cd clinic-desktop
npm install
سپس سرور توسعه را اجرا کنید:
npm run dev
Vite یک نشانی محلی، معمولاً مشابه http://localhost:5173، نمایش میدهد. آن را در مرورگر باز کنید تا مطمئن شوید صفحه اولیه React اجرا میشود. اگر این مرحله شکست بخورد، هنوز نباید سراغ عیبیابی Rust یا Tauri بروید؛ ابتدا باید پروژه وب را به حالت سالم برسانید.
۳.۱. نصب وابستگیها و اجرای اولیه
پس از اجرای موفق React، ساختار اولیه پروژه را بشناسید. پوشه src معمولاً شامل کدهای رابط کاربری است، فایل package.json وابستگیها و اسکریپتها را نگه میدارد و فایل vite.config.ts تنظیمات Vite را تعریف میکند. در این مرحله هنوز برنامه دسکتاپ ندارید؛ تنها یک رابط وب ساختهاید که در مرورگر اجرا میشود.
برای جلوگیری از اشتباه، دو مفهوم را از هم جدا کنید: سرور توسعه وب و پنجره دسکتاپ Tauri. سرور توسعه فایلهای React را در اختیار محیط اجرا قرار میدهد، اما Tauri آن محتوا را در یک پنجره بومی نمایش میدهد و قابلیتهای سیستمعامل را از طریق بخش Rust یا افزونههای مجاز در دسترس قرار میدهد.
اگر میخواهید از همان ابتدا پروژه را با قالب رسمی Tauri ایجاد کنید، راه دیگری هم وجود دارد. مستندات رسمی ابزار create-tauri-app را برای ساخت پروژههای جدید معرفی میکند و این ابزار قالب React و TypeScript را نیز ارائه میدهد.
Tauri
با این حال، روش ساخت React با Vite و افزودن Tauri در مرحله بعد برای یادگیری معماری و درک نقش هر بخش مناسب است.
۴. نصب و راهاندازی Tauri 2
پس از آماده شدن رابط React، باید Tauri را به پروژه اضافه کنید. در پوشه اصلی پروژه، این دستور را اجرا کنید:
npm install -D @tauri-apps/cli@latest
سپس برای ایجاد پیکربندی اولیه Tauri دستور زیر را اجرا کنید:
npx tauri init
در فرایند راهاندازی، نام برنامه، شناسه یکتای برنامه، محل فایلهای رابط کاربری، نشانی سرور توسعه و فرمانهای ساخت رابط کاربری از شما پرسیده میشود. برای یک پروژه Vite معمولی، تنظیمات پایه میتواند مشابه موارد زیر باشد:
|
گزینه |
مقدار نمونه |
|---|---|
|
نام برنامه |
|
|
شناسه برنامه |
|
|
مسیر فایلهای وب |
|
|
نشانی توسعه |
|
|
فرمان توسعه رابط |
|
|
فرمان ساخت رابط |
|
شناسه برنامه باید برای محصول شما مناسب و یکتا باشد. همچنین مقادیر بالا نمونه هستند؛ اگر قالب پروژه یا تنظیمات Vite شما متفاوت است، باید مقادیر واقعی پروژه را وارد کنید. مستندات رسمی Tauri نیز برای افزودن دستی این فریمورک به پروژه موجود، ابتدا تعیین نشانی سرور توسعه و سپس اجرای فرمان tauri init را توضیح میدهد.
Tauri
۴.۱. پیکربندی اولیه و شناخت فایلهای پروژه
پس از راهاندازی، ساختار پروژه تغییر میکند و فایلهای مربوط به بخش بومی نیز ایجاد میشوند. در یک پروژه متداول Tauri 2، ساختار کلی میتواند به شکل زیر باشد:
clinic-desktop/
├── public/
├── src/
│ ├── App.tsx
│ ├── main.tsx
│ └── ...
├── src-tauri/
│ ├── capabilities/
│ ├── icons/
│ ├── src/
│ │ ├── lib.rs
│ │ └── main.rs
│ ├── Cargo.toml
│ ├── build.rs
│ └── tauri.conf.json
├── package.json
├── tsconfig.json
└── vite.config.ts
فایل src/App.tsx معمولاً نقطه شروع رابط کاربری React است. در مقابل، پوشه src-tauri کدها و تنظیمات بخش بومی را در خود نگه میدارد. فایل Cargo.toml وابستگیهای Rust و تنظیمات بسته را مدیریت میکند و tauri.conf.json شامل تنظیماتی مانند نام برنامه، پنجره، مسیر فایلهای وب و فرایند ساخت است.
فایلهای main.rs و lib.rs نیز وظایف متفاوتی دارند که به قالب پروژه وابسته است. در بسیاری از قالبهای Tauri، تابع راهاندازی اصلی در lib.rs تعریف میشود و فایل اجرایی آن را فراخوانی میکند. بنابراین اگر میخواهید فرمان Rust اضافه کنید یا افزونهای را ثبت کنید، ابتدا فایل راهاندازی واقعی پروژه را بررسی کنید؛ فرض اینکه همه منطق همیشه در main.rs قرار دارد، اشتباه است.
نکته امنیتی مهم این است که تنظیمات مجوزها در Tauri 2 به ساختار قابلیتها یا capabilities وابسته است. نصب یک افزونه بهتنهایی به این معنا نیست که رابط کاربری مجاز است تمام عملیات آن را اجرا کند. باید دسترسیهای لازم را آگاهانه تعریف کنید و از اعطای مجوزهای گسترده و غیرضروری خودداری کنید.
۵. اجرای برنامه دسکتاپ در محیط توسعه
اکنون زمان اجرای نخستین پنجره دسکتاپ است. در پوشه اصلی پروژه، سرور Vite را در صورت نیاز از طریق اسکریپت Tauri راهاندازی کنید:
npm run tauri dev
این فرمان در صورتی کار میکند که اسکریپت tauri در بخش scripts فایل package.json تعریف شده باشد؛ قالبهای رسمی معمولاً چنین اسکریپتی را ایجاد میکنند. اگر این اسکریپت وجود ندارد، باید آن را متناسب با نسخه CLI نصبشده اضافه کنید یا از فرمان مستقیم npx tauri dev استفاده کنید.
در نخستین اجرا، کامپایل بخش Rust ممکن است زمانبر باشد؛ بهویژه اگر وابستگیها هنوز دانلود نشده باشند. پس از پایان موفق کامپایل، پنجرهای باز میشود که رابط React را در محیط دسکتاپ نمایش میدهد. در این مرحله میتوانید دکمهها، فرمها و سایر اجزای رابط را توسعه دهید و تغییرات بخش وب را در محیط توسعه مشاهده کنید.
برای نمونه، اگر پروژه مدیریت بیماران میسازید، میتوانید ابتدا یک داشبورد ساده با عنوان «مدیریت کلینیک» طراحی کنید. هنوز نیازی نیست پایگاه داده یا عملیات ثبت اطلاعات را پیادهسازی کنید. بهتر است ابتدا مسیر اجرای برنامه، نمایش صحیح فونت فارسی و جهت راستبهچپ، و رفتار پنجره را بررسی کنید؛ بعد به سراغ بخشهای پیچیدهتر بروید.
اگر فرمان اجرا با خطای rustc is not recognized مواجه شد، مشکل از شناسایی ابزار Rust است، نه از کد React. اگر خطای مربوط به linker یا کامپایل C++ مشاهده کردید، نصب Visual Studio Build Tools را بررسی کنید. اگر پنجره باز شد اما محتوای آن خالی بود، ابتدا خروجی Vite، نشانی سرور توسعه و خطاهای کنسول را بررسی کنید.
۶. طراحی رابط کاربری با TypeScript و Tailwind CSS
یکی از مزیتهای Tauri این است که برای طراحی رابط کاربری مجبور نیستید از یک کتابخانه گرافیکی اختصاصی استفاده کنید. میتوانید از همان ابزارهایی استفاده کنید که در پروژههای وب به کار میبرید؛ از جمله React، TypeScript، Tailwind CSS و کتابخانههای آیکون. این موضوع بهخصوص برای نرمافزارهای مدیریتی اهمیت دارد، زیرا فرمها، جدولها، فیلترها، منوهای کناری و داشبوردها را میتوان به شکل کامپوننتهای قابل استفاده مجدد طراحی کرد.
برای نصب Tailwind CSS نسخه ۴ در پروژه Vite، دستور زیر را اجرا کنید:
npm install tailwindcss @tailwindcss/vite
سپس در فایل vite.config.ts افزونه Tailwind را ثبت کنید. اگر از قبل افزونه React را دارید، آن را حذف نکنید؛ هر دو افزونه باید در آرایه plugins باقی بمانند:
import { defineConfig } from "vite";
import react from "@vitejs/plugin-react";
import tailwindcss from "@tailwindcss/vite";
export default defineConfig({
plugins: [react(), tailwindcss()],
});
در فایل CSS اصلی رابط کاربری، دستور زیر را قرار دهید:
@import "tailwindcss";
@theme {
--font-sans: "Vazirmatn", sans-serif;
--color-primary: #168b83;
--color-primary-dark: #106d67;
}
این تنظیمات برای تعریف فونت و رنگهای سفارشی Tailwind مناسب هستند، به شرط آنکه فایل فونت Vazirmatn را نیز بهدرستی در پروژه قرار دهید و بارگذاری آن را تنظیم کنید. اگر فونت را از فایل محلی بارگذاری میکنید، مسیر فایل و نام وزنهای فونت باید با ساختار واقعی پروژه هماهنگ باشند.
برای یک نرمافزار فارسی، جهت صفحه را نیز تنظیم کنید. برای مثال، در فایل index.html مقدار ویژگی dir عنصر html را برابر rtl قرار دهید. بهتر است جهت کلی برنامه را از جهت اجزای خاص جدا نگه دارید؛ زیرا ممکن است بعضی از فیلدها مانند شماره تلفن، ایمیل یا کدهای فنی همچنان به جهت چپبهراست نیاز داشته باشند.
در طراحی برنامه دسکتاپ، فقط زیبایی اهمیت ندارد. جدولها باید در اندازههای مختلف پنجره قابل استفاده باشند، فرمها باید خطاهای ورودی را روشن نمایش دهند و عملیات طولانی نباید باعث قفل شدن رابط کاربری شوند. همچنین برای یک برنامه عملیاتی، بهتر است اجزایی مانند منوی کناری، نوار عنوان، اعلانها و فرمهای ثبت اطلاعات را به کامپوننتهای مستقل تقسیم کنید تا تغییرات آینده به اصلاح یک فایل بزرگ و پیچیده وابسته نباشد.
۷. ارتباط React با بخش Rust
تا این مرحله، رابط کاربری ساختهاید؛ اما برای دسترسی کنترلشده به قابلیتهای بومی سیستمعامل باید ارتباط React و Rust را برقرار کنید. Tauri این ارتباط را از طریق سازوکاری شامل فرمانهای بومی و فراخوانی آنها از رابط کاربری فراهم میکند. در این روش، رابط React یک فرمان را فراخوانی میکند، بخش Rust عملیات موردنظر را انجام میدهد و نتیجه را به رابط برمیگرداند.
برای نمونه، فرض کنید میخواهید فرمانی به نام greet بسازید که یک نام را دریافت و پیام خوشامدگویی تولید کند. در فایل راهاندازی Rust پروژه، معمولاً src-tauri/src/lib.rs، میتوانید کدی مشابه زیر بنویسید:
#[tauri::command]
fn greet(name: String) -> String {
format!("سلام، {}!", name)
}
#[cfg_attr(mobile, tauri::mobile_entry_point)]
pub fn run() {
tauri::Builder::default()
.invoke_handler(tauri::generate_handler![greet])
.run(tauri::generate_context!())
.expect("خطا در اجرای برنامه Tauri");
}
این مثال برای قالبی است که تابع راهاندازی در lib.rs تعریف شده است. اگر پروژه شما از ساختار دیگری استفاده میکند، باید فرمان را به همان نمونه tauri::Builder متصل کنید که برنامه را اجرا میکند؛ تعریف فرمان بهتنهایی کافی نیست.
حالا در سمت React، ابتدا API فراخوانی فرمان را نصب کنید:
npm install @tauri-apps/api
سپس میتوانید فرمان را از رابط کاربری فراخوانی کنید:
import { useState } from "react";
import { invoke } from "@tauri-apps/api/core";
export default function App() {
const [message, setMessage] = useState("");
async function handleGreet() {
const result = await invoke("greet", {
name: "کاربر",
});
setMessage(result);
}
return (
{message}
);
}
با کلیک روی دکمه، React فرمان greet را فراخوانی میکند و متن بازگشتی Rust را نمایش میدهد. در این مثال، عملیات ساده است؛ اما همین الگو میتواند برای عملیات پیچیدهتر مانند خواندن اطلاعات پایگاه داده یا پردازش یک فایل استفاده شود.
نکته فنی مهم این است که در یک برنامه واقعی، خطاهای فرمان باید مدیریت شوند. برای مثال، اگر عملیات ذخیرهسازی با شکست مواجه شد، نباید رابط کاربری بدون توضیح باقی بماند. همچنین اعتبارسنجی سمت React جای اعتبارسنجی سمت Rust را نمیگیرد؛ دادههایی که از رابط کاربری دریافت میشوند باید در بخش بومی نیز بر اساس نیاز برنامه بررسی شوند.
۸. اتصال SQLite و مدیریت اطلاعات
برای بسیاری از نرمافزارهای دسکتاپ، پایگاه داده محلی انتخاب مناسبی است. SQLite یک پایگاه داده رابطهای سبک است که اطلاعات را در فایل ذخیره میکند و برای برنامههایی مانند مدیریت بیماران، انبارداری، حسابداری ساده و مدیریت نوبتها کاربرد دارد. برخلاف PostgreSQL یا MySQL، در معماری معمول SQLite لازم نیست یک سرور پایگاه داده مستقل نصب و اجرا کنید.
در Tauri میتوانید از افزونه SQL برای ارتباط با SQLite استفاده کنید یا عملیات پایگاه داده را از طریق فرمانهای Rust و کتابخانههایی مانند SQLx پیادهسازی کنید. انتخاب میان این دو روش به معماری پروژه بستگی دارد. برای نمونه، اگر میخواهید منطق دادهها، اعتبارسنجی و عملیات پایگاه داده عمدتاً در Rust متمرکز باشند، استفاده از SQLx میتواند انتخاب مناسبی باشد؛ اما باید مدیریت اتصال، مهاجرتهای پایگاه داده و خطاها را نیز خودتان طراحی کنید.
برای نصب افزونه SQL رسمی Tauri 2، این دستور را اجرا کنید:
npm install @tauri-apps/plugin-sql
بخش بومی افزونه نیز باید به وابستگیهای Rust اضافه شود. ازآنجاکه نسخههای افزونه باید با نسخه اصلی Tauri سازگار باشند، بهتر است مراحل نصب و پیکربندی را مطابق مستندات رسمی همان نسخه دنبال کنید.
در معماری مبتنی بر افزونه SQL، صرف نصب بسته JavaScript کافی نیست. افزونه باید در سمت Rust ثبت شود و مجوزهای لازم نیز در فایلهای قابلیتها تعریف شوند. اگر هنگام اجرای عملیات با خطایی مانند sql.execute not allowed روبهرو شدید، باید تنظیمات مجوز عملیات SQL را بررسی کنید؛ البته بهتر است تنها مجوزهایی را فعال کنید که واقعاً برای برنامه لازم هستند.
در معماری مبتنی بر SQLx نیز ابتدا باید مسیر پایگاه داده بهدرستی تعیین شود. برای برنامه دسکتاپ، قرار دادن فایل پایگاه داده در مسیر نصب برنامه معمولاً تصمیم مناسبی نیست؛ زیرا پوشه نصب ممکن است مجوز نوشتن نداشته باشد یا هنگام بهروزرسانی تغییر کند. بهتر است فایل داده در مسیر مناسب دادههای برنامه کاربر قرار گیرد و مسیر آن در زمان اجرا بهصورت کنترلشده مدیریت شود.
برای یک سیستم نوبتدهی، طراحی جدولها باید از ابتدا دقیق باشد. برای مثال، جدول بیماران میتواند شامل شناسه، نام، نام خانوادگی، شماره تلفن و زمان ایجاد رکورد باشد؛ جدول نوبتها نیز باید اطلاعاتی مانند شناسه بیمار، تاریخ نوبت، وضعیت و زمان ثبت را نگه دارد. اگر قرار است چند اپراتور به اطلاعات مشترک دسترسی داشته باشند، باید تفاوت میان پایگاه داده محلی و پایگاه داده مرکزی را جدی بگیرید؛ SQLite محلی بهخودیخود همگامسازی چند رایانه را فراهم نمیکند.
۹. ساخت فایل اجرایی و نصبکننده ویندوز
پس از تکمیل برنامه، نوبت ساخت نسخه قابل توزیع است. در Tauri، فرمان ساخت نسخه نهایی علاوه بر آمادهسازی رابط وب، بخش بومی برنامه را نیز کامپایل و بستهبندی میکند. قبل از ساخت، مطمئن شوید که برنامه در محیط توسعه بدون خطای جدی اجرا میشود و فرمان ساخت رابط کاربری در package.json درست تنظیم شده است.
در پوشه اصلی پروژه اجرا کنید:
npm run tauri build
این فرمان در قالبی که اسکریپت tauri را تعریف کرده باشد، نسخه نهایی برنامه را تولید میکند. اگر اسکریپت وجود ندارد، میتوانید از فرمان مستقیم زیر استفاده کنید:
npx tauri build
خروجیهای ساخت معمولاً در زیرپوشههایی از مسیر src-tauri/target/release و پوشههای مربوط به بستهبندی قرار میگیرند؛ مسیر دقیق بستهها به پیکربندی پروژه و نسخه Tauri وابسته است. خروجی میتواند شامل فایل اجرایی و بسته نصب مناسب ویندوز باشد.
بااینحال، ساخت فایل EXE به معنای تضمین اجرای برنامه روی هر رایانهای نیست. برای مثال، برنامهای که از WebView2 استفاده میکند، به فراهم بودن محیط اجرایی موردنیاز وابسته است. همچنین اگر برنامه شما به فایلهای داده، فونت، کتابخانه جانبی یا تنظیمات خاصی وابسته باشد، باید مطمئن شوید که همه موارد لازم در بسته نهایی پیشبینی شدهاند.
پیش از انتشار، نسخه ساختهشده را روی یک محیط آزمایشی اجرا کنید. نصب و اجرای برنامه در رایانه توسعهدهنده بهتنهایی کافی نیست؛ زیرا ممکن است ابزارهایی روی آن سیستم نصب باشند که روی رایانه مقصد وجود ندارند. اگر قصد توزیع عمومی دارید، امضای دیجیتال، فرایند بهروزرسانی، پشتیبانگیری از دادهها و روش بازیابی خطاها را نیز در برنامه انتشار لحاظ کنید.
۱۰. خطاهای رایج هنگام راهاندازی Tauri
بسیاری از مشکلات راهاندازی با بررسی منظم محیط توسعه برطرف میشوند. اشتباه رایج این است که توسعهدهنده پس از مشاهده یک خطا، چندین بسته را نصب یا تنظیمات مختلف را همزمان تغییر میدهد؛ درنتیجه، تشخیص علت اصلی دشوارتر میشود. بهتر است متن کامل خطا را بخوانید و بر اساس مرحلهای که شکست خورده است، مشکل را دستهبندی کنید.
|
خطا یا نشانه |
علت احتمالی |
اقدام پیشنهادی |
|---|---|---|
|
|
نصب ناقص Node.js یا مشکل |
بررسی نصب و بازکردن ترمینال جدید |
|
|
Rust در دسترس ترمینال نیست |
بررسی نصب Rust و تنظیم مسیرها |
|
خطای linker یا کامپایل C++ |
ابزارهای ساخت ویندوز ناقصاند |
بررسی Visual Studio Build Tools |
|
خطاهای اتصال هنگام نصب Rust |
مشکل شبکه، پروکسی یا TLS |
بررسی اتصال به منابع نصب |
|
پنجره خالی |
خطای رابط، نشانی نادرست Vite یا خطای JavaScript |
بررسی لاگها و نشانی سرور |
|
خطای مجوز افزونه |
قابلیت لازم در Tauri 2 فعال نشده است |
بررسی |
|
خطای بازکردن SQLite |
مسیر نادرست یا نبود مجوز نوشتن |
بررسی مسیر مطلق، پوشه داده و مجوزها |
|
ساخت ناموفق نصبکننده MSI |
ابزار یا قابلیت لازم برای بستهبندی ناقص است |
بررسی خطای کامل و پیشنیازهای MSI |
چگونه خطاها را اصولی بررسی کنیم؟
ابتدا نسخه ابزارها را کنترل کنید. سپس پروژه React را مستقل اجرا کنید تا مطمئن شوید مشکل از رابط کاربری نیست. اگر رابط سالم است، برنامه را با فرمان توسعه Tauri اجرا کنید و خروجی ترمینال را بخوانید. این روش مرحلهبهمرحله کمک میکند مشخص شود خطا از محیط JavaScript، کامپایل Rust، پیکربندی Tauri یا یکی از افزونهها ناشی شده است.
برای مثال، اگر دستور npm run dev موفق است اما npm run tauri dev شکست میخورد، نباید بلافاصله کدهای React را بازنویسی کنید. ابتدا ابزارهای بومی، نسخه Rust و تنظیمات Tauri را بررسی کنید. از طرف دیگر، اگر پنجره برنامه باز میشود اما یک دکمه کار نمیکند، احتمال دارد فرمان Rust ثبت نشده باشد، نام فرمان اشتباه باشد یا مجوز لازم برای عملیات مربوطه تعریف نشده باشد.
۱۱. نکات امنیتی و بهینهسازی پروژه
Tauri امکاناتی برای کنترل دسترسی رابط وب به قابلیتهای بومی ارائه میدهد، اما استفاده از این امکانات به معنی امن بودن خودکار برنامه نیست. اگر یک فرمان Rust اطلاعات حساس را بدون اعتبارسنجی دریافت کند، یا رابط کاربری به قابلیتهایی بیش از نیاز خود دسترسی داشته باشد، همچنان امکان بروز مشکلات امنیتی وجود دارد. بنابراین امنیت باید بخشی از طراحی معماری باشد، نه کاری که فقط پیش از انتشار انجام میدهید.
در یک نرمافزار مدیریت بیماران، برای نمونه، اطلاعات هویتی و سوابق درمانی باید با دقت محافظت شوند. دسترسی کاربران به بخشهای مختلف باید بر اساس نقش آنها طراحی شود و نباید صرفاً مخفی کردن یک دکمه در React را معادل کنترل دسترسی واقعی بدانید. عملیات حساس باید در لایهای انجام شوند که بتواند مجوزها را بهدرستی بررسی کند.
از نظر کارایی نیز بهتر است کارهای سنگین را از مسیر اصلی تعامل کاربر جدا کنید. عملیات طولانی پایگاه داده، پردازش فایلهای بزرگ یا محاسبات پیچیده نباید باعث شود رابط کاربری برای مدت طولانی پاسخگو نباشد. استفاده از عملیات ناهمگام، مدیریت درست خطاها و نمایش وضعیت پردازش میتواند تجربه کاربری را بهبود دهد.
در نهایت، از همان ابتدای پروژه ساختار پوشهها و مسئولیت هر لایه را مشخص کنید. برای مثال، کامپوننتهای React را از منطق پایگاه داده جدا نگه دارید، فرمانهای Rust را بر اساس وظیفه دستهبندی کنید و تغییرات ساختار پایگاه داده را با مهاجرتهای نسخهبندیشده مدیریت کنید. این تصمیمها شاید در یک نمونه ساده ضروری به نظر نرسند، اما با افزایش تعداد جدولها، فرمها و قابلیتها اهمیت زیادی پیدا میکنند.