ضمیمه الف: جزئیات کامل تنظیمات اولیه پروژه (فصل ۱ و ۲)
این ضمیمه جزئیات کامل تنظیمات اولیه پروژه و ساختار پروژه را که در فصلهای ۱ و ۲ بهصورت خلاصه یا غایب بودند، پوشش میدهد. هدف این است که یک راهنمای جامع برای راهاندازی پروژه مرکز اجاره کشتیهای کروز با Nuxt 3 ارائه شود، شامل ساختار پوشهها، فایلهای پیکربندی، و تنظیمات Tailwind CSS.
ساختار پروژه
ساختار پروژه بهگونهای طراحی شده است که ماژولار، مقیاسپذیر و مطابق با استانداردهای Nuxt 3 باشد. در زیر، جزئیات کامل پوشهها و فایلهای کلیدی پروژه ارائه شده است:
-
pages/: -
شامل فایلهای Vue که صفحات اصلی اپلیکیشن را تعریف میکنند.
- فایلها:
index.vue: صفحه اصلی (Homepage) که کاربران را به مرور کشتیها هدایت میکند.ships/index.vue: صفحه لیست کشتیها با قابلیت فیلتر و صفحهبندی.ships/[id].vue: صفحه جزئیات کشتی برای نمایش اطلاعات و فرم رزرو.bookings.vue: داشبورد رزروها برای نمایش تاریخچه رزروهای کاربر.login.vue: صفحه ورود برای احراز هویت (اضافهشده در فصل ۱۱).
-
ویژگی: Nuxt بهصورت خودکار از ساختار فایلها برای ایجاد مسیرهای اپلیکیشن استفاده میکند (مثلاً
ships/[id].vueبه/ships/:idتبدیل میشود). -
components/: -
شامل کامپوننتهای قابل استفاده مجدد که در صفحات مختلف استفاده میشوند.
- فایلها:
ShipCard.vue: کارت نمایش اطلاعات کشتی (از فصل ۵).AppHeader.vue: کامپوننت هدر برای ناوبری (اضافهشده در پاسخ تکمیلی).BookingForm.vue: کامپوننت فرم رزرو (اضافهشده در پاسخ تکمیلی).
-
ویژگی: این کامپوننتها از ترکیب
<script setup>و TypeScript برای خوانایی و ایمنی نوع استفاده میکنند. -
stores/: -
شامل فایلهای Pinia برای مدیریت وضعیت اپلیکیشن.
- فایلها:
ships.ts: store برای مدیریت دادههای کشتیها (دریافت، فیلتر، صفحهبندی).bookings.ts: store برای مدیریت رزروها (دریافت و افزودن رزرو).
-
ویژگی: استفاده از Pinia برای مدیریت متمرکز و reactive دادهها.
-
server/api/: -
شامل مسیرهای API سمت سرور که با موتور Nitro ساخته شدهاند.
- فایلها:
ships.ts: API برای دریافت لیست کشتیها.bookings.ts: API برای دریافت و افزودن رزروها.stripe-checkout.ts: API برای ایجاد جلسه پرداخت Stripe (فصل ۱۱).auth/[...].ts: مسیرهای احراز هویت برای@sidebase/nuxt-auth(فصل ۱۱).
-
ویژگی: این مسیرها از TypeScript و مدلهای داده (
Ship,Booking) برای ایمنی نوع استفاده میکنند. -
content/: -
شامل فایلهای Markdown برای مدیریت محتوای متنی با Nuxt Content (فصل ۸).
- پوشهها و فایلها:
ships/1.md: توضیحات کشتی Ocean Explorer.ships/2.md: توضیحات کشتی Luxury Liner.
-
ویژگی: امکان ویرایش محتوا بدون تغییر کد و تولید محتوای استاتیک.
-
public/: -
شامل فایلهای استاتیک مانند تصاویر.
- پوشهها و فایلها:
images/ocean.jpg: تصویر کشتی Ocean Explorer.images/luxury.jpg: تصویر کشتی Luxury Liner.og-image.jpg: تصویر Open Graph برای سئو.
-
ویژگی: تصاویر با
@nuxt/imageبهینهسازی میشوند. -
assets/: -
شامل فایلهای CSS و سایر منابع غیراستاتیک.
- فایلها:
css/main.css: استایلهای جهانی با Tailwind CSS.
-
ویژگی: این فایل برای تعریف کلاسهای سفارشی (مانند
.cardو.btn) استفاده میشود. -
types/: -
شامل تعریف مدلهای داده با TypeScript.
- فایلها:
index.ts: تعریف رابطهایShipوBooking.
-
ویژگی: ایمنی نوع در سراسر پروژه.
-
فایلهای ریشه:
-
nuxt.config.ts: تنظیمات اصلی Nuxt. package.json: وابستگیها و اسکریپتها.tsconfig.json: تنظیمات TypeScript..env: متغیرهای محیطی..gitignore: برای جلوگیری از آپلود فایلهای حساس (مانند.env).
فایل پیکربندی Nuxt (nuxt.config.ts)
فایل nuxt.config.ts تنظیمات اصلی پروژه را تعریف میکند. نسخه کامل شامل تمام ماژولها و تنظیمات مورد نیاز است:
export default defineNuxtConfig({
// فعالسازی ابزارهای توسعه برای دیباگ
devtools: { enabled: true },
// ماژولهای استفادهشده
modules: [
'@pinia/nuxt', // مدیریت وضعیت با Pinia
'@nuxtjs/tailwindcss', // استایلدهی با Tailwind CSS
'@nuxt/image', // بهینهسازی تصاویر
'@nuxt/content', // مدیریت محتوا با Markdown
'@sidebase/nuxt-auth', // احراز هویت
'@nuxtjs/supabase', // اتصال به پایگاه داده Supabase
'@nuxtjs/plausible', // تحلیل دادهها
],
// تنظیمات متغیرهای محیطی
runtimeConfig: {
public: {
apiBase: process.env.API_BASE || '/api', // URL پایه API
appUrl: process.env.APP_URL || 'http://localhost:3000', // URL اپلیکیشن
stripePublishableKey: process.env.STRIPE_PUBLISHABLE_KEY, // کلید عمومی Stripe
},
stripeSecretKey: process.env.STRIPE_SECRET_KEY, // کلید مخفی Stripe (فقط سرور)
supabaseUrl: process.env.SUPABASE_URL, // URL Supabase
supabaseKey: process.env.SUPABASE_KEY, // کلید Supabase
authSecret: process.env.AUTH_SECRET, // کلید مخفی Auth.js
},
// قوانین مسیریابی برای رندر ترکیبی
routeRules: {
'/': { prerender: true }, // SSG برای صفحه اصلی
'/ships': { prerender: true }, // SSG برای لیست کشتیها
'/ships/**': { prerender: true }, // SSG برای جزئیات کشتیها
'/bookings': { ssr: true, middleware: ['auth'] }, // SSR با میدلور احراز هویت
},
// تنظیمات Tailwind CSS
tailwindcss: {
cssPath: '~/assets/css/main.css',
configPath: 'tailwind.config.js',
},
// تنظیمات Supabase
supabase: {
url: process.env.SUPABASE_URL,
key: process.env.SUPABASE_KEY,
},
// تنظیمات Plausible
plausible: {
domain: process.env.PLAUSIBLE_DOMAIN || 'your-app-url.com',
apiHost: process.env.PLAUSIBLE_API_HOST || 'https://plausible.io',
},
// تنظیمات احراز هویت
auth: {
provider: {
type: 'authjs',
trustHost: true,
defaultProvider: 'github',
},
},
// تنظیمات تصویر
image: {
provider: 'static', // در تولید به CDN تغییر دهید (مانند Cloudinary)
},
});
توضیحات:
- ماژولها: تمام ماژولهای مورد نیاز از فصلهای مختلف (Pinia، Tailwind، Nuxt Content و غیره) اضافه شدهاند.
- runtimeConfig: متغیرهای محیطی برای API، Stripe، Supabase، و Plausible مدیریت میشوند.
- routeRules: رندر ترکیبی برای بهینهسازی عملکرد و سئو.
-
ویژگیها:
-
فعالسازی
devtoolsبرای دیباگ آسانتر. - تنظیمات Tailwind CSS برای استایلدهی یکپارچه.
- پشتیبانی از احراز هویت و تحلیل دادهها.
تنظیم Tailwind CSS
Tailwind CSS برای استایلدهی پاسخگو و سریع در سراسر پروژه استفاده شده است. جزئیات کامل تنظیمات به شرح زیر است:
-
فایل
assets/css/main.css: -
این فایل استایلهای جهانی و کلاسهای سفارشی را تعریف میکند:
@tailwind base;
@tailwind components;
@tailwind utilities;
/* کلاسهای سفارشی */
.card {
@apply bg-white shadow-md rounded-lg overflow-hidden;
}
.btn {
@apply bg-blue-500 text-white px-4 py-2 rounded hover:bg-blue-600 transition duration-200;
}
.error {
@apply text-red-500 text-sm mt-1;
}
-
کلاسهای سفارشی:
.card: برای کارتهای کشتیها (ShipCard.vue) و رزروها..btn: برای دکمهها (مانند "Book Now" یا "Sign In")..error: برای نمایش خطاهای اعتبارسنجی فرم.
-
فایل
tailwind.config.js: -
تنظیمات Tailwind برای اسکن فایلهای پروژه و اعمال استایلها:
module.exports = {
content: [
'./components/**/*.{vue,js,ts}',
'./pages/**/*.{vue,js,ts}',
'./layouts/**/*.{vue,js,ts}',
'./server/**/*.{js,ts}',
],
theme: {
extend: {
colors: {
primary: '#1E3A8A', // آبی تیره برای هدر
secondary: '#F3F4F6', // خاکستری روشن برای پسزمینه
},
},
},
plugins: [],
};
- توضیحات:
content: مشخص میکند که Tailwind کدام فایلها را برای استخراج کلاسها اسکن کند.-
theme.extend: رنگهای سفارشی برای یکپارچگی بصری اضافه شدهاند. -
ادغام در
nuxt.config.ts: -
تنظیم مسیر CSS و فایل تنظیمات Tailwind:
tailwindcss: {
cssPath: '~/assets/css/main.css',
configPath: 'tailwind.config.js',
},
- این تنظیم اطمینان میدهد که استایلهای Tailwind بهدرستی در پروژه لود میشوند.
ویژگیها:
- پاسخگویی (Responsive): کلاسهای Tailwind مانند
md:grid-cols-3برای گریدهای پاسخگو درships/index.vue. - کلاسهای سفارشی: کاهش کد CSS تکراری با تعریف کلاسهایی مانند
.cardو.btn. - انعطافپذیری: امکان افزودن تمها یا افزونههای جدید به
tailwind.config.js.
چرا این بخش در ضمیمهها خلاصه بود؟
ضمیمههای اولیه (پاسخ A) فقط به فایلهای package.json و tsconfig.json اشاره کردند و جزئیات کامل درباره:
-ساختار دقیق پوشهها و نقش هر پوشه.
-
تنظیمات جامع
nuxt.config.tsبا تمام ماژولها و گزینهها. -
پیکربندی Tailwind CSS (شامل
main.cssوtailwind.config.js) و کلاسهای سفارشی.
را پوشش ندادند. این پاسخ تکمیلی تمام این جنبهها را با جزئیات و مثالهای عملی ارائه میدهد.
نکات عملی برای پیادهسازی
-
راهاندازی اولیه:
-
دستور
npx nuxi@latest init cruise-rental-appرا اجرا کنید. - فایلهای بالا را در پروژه کپی کنید.
-
دستور
npm installرا برای نصب وابستگیها اجرا کنید. -
بررسی ساختار:
-
اطمینان حاصل کنید که تمام پوشهها (
pages/,components/, و غیره) مطابق با توضیحات ایجاد شدهاند. -
تصاویر نمونه را در
public/images/قرار دهید. -
دیباگ:
-
از
devtools(فعالشده درnuxt.config.ts) برای بررسی رندر صفحات و APIها استفاده کنید. -
دستور
npm run devرا برای اجرای پروژه در حالت توسعه اجرا کنید. -
گسترش:
-
برای افزودن ماژولهای جدید (مانند
@nuxtjs/i18nبرای محلیسازی)، آنها را بهmodulesدرnuxt.config.tsاضافه کنید. - کلاسهای Tailwind بیشتری را در
main.cssبرای نیازهای خاص پروژه تعریف کنید.
جمعبندی ضمیمه الف
این ضمیمه جزئیات کامل تنظیمات اولیه پروژه را ارائه داد، از جمله ساختار پروژه، تنظیمات nuxt.config.ts، و پیکربندی Tailwind CSS. این اطلاعات پایهای محکم برای شروع توسعه اپلیکیشن فراهم میکند و اطمینان میدهد که تمام اجزای پروژه بهدرستی راهاندازی شدهاند. برای اطلاعات بیشتر، به فصلهای ۱ و ۲ کتاب مراجعه کنید یا مخزن فرضی GitHub (https://github.com/khosronz/cruise-rental-app) را بررسی کنید.