اپ تک‌صفحه‌ای Vue

هاست Vue.js برای اپ‌های تک‌صفحه‌ای

اپ Vue با Vite یا Vue CLI بیلد و خروجی dist با nginx سرو می‌شود. حالت SPA مسیرهای Vue Router را درست برمی‌گرداند.

تشخیص
vue و اسکریپت build
بیلد
Vite یا Vue CLI
سرو
nginx از پوشه‌ی dist
پورت
80
لوگوی Vue.js

Vue بدون سرور در زمان اجرا

Vite و Vue CLI هر دو خروجی را در dist می‌ریزند. سکو کلود پروژه را بیلد می‌کند و همین پوشه را با nginx سرو می‌کند؛ اپ سبک می‌ماند و هزینه‌ی منابع زمان اجرا تقریباً صفر است.

با history mode در Vue Router، رفرش روی هر مسیر داخلی به سرور می‌رسد. حالت SPA در sakoocloud.json همه‌ی مسیرهای ناشناخته را به index.html برمی‌گرداند.

مناسب برای

  • پنل مدیریت با Vue Router
  • داشبورد و ابزار داخلی
  • رابط کاربری جدا از API
  • اپ Vite با Pinia

مسیر بیلد Vue

  1. تشخیص

    vue در وابستگی‌ها، اسکریپت build و لاک‌فایل.

    package.json
  2. نصب و بیلد

    وابستگی‌ها نصب و اسکریپت build اجرا می‌شود.

    npm run build
  3. بسته‌بندی

    پوشه‌ی dist در ایمیج nginx قرار می‌گیرد.

    dist → nginx
  4. سرو

    nginx فایل‌ها را روی پورت 80 سرو می‌کند.

    nginx :80

خروجی یک استقرار واقعی

sakoocloud deploy
sakoocloud deploy
✔ Packed 0.8MB
✔ Source uploaded
ℹ Build started · dep_7k2m9q
#4 [builder 1/5] FROM node:22-alpine
#6 [builder 3/5] RUN npm ci
#8 [builder 4/5] RUN npm run build
#10 [stage-1 2/2] COPY dist /usr/share/nginx/html
#12 exporting to image
✔ Deployed — app is running.
→ https://my-vue.sakooapps.ir

تنظیم پروژه

برای Vue Router در حالت history، SPA را روشن کنید.

{
  "runtime": "vue",
  "outputDir": "dist",
  "spa": true
}

تنظیمات

متغیرهای محیطی در Vue

این مقادیر در زمان بیلد داخل باندل قرار می‌گیرند؛ آن‌ها را با sakoocloud env set --build-time تعریف کنید.

ابزارپیشوند
ViteVITE_
Vue CLIVUE_APP_

پکیج‌منیجر

ابزار از روی لاک‌فایل انتخاب می‌شود و نصب همیشه دقیقاً همان نسخه‌های قفل‌شده را می‌گیرد.

لاک‌فایلابزاردستور نصب
package-lock.jsonnpmnpm ci
yarn.lockyarnyarn install --frozen-lockfile
pnpm-lock.yamlpnpmpnpm install --frozen-lockfile

همراه هر استقرار

این‌ها به رانتایم بستگی ندارند و برای هر اپ روی سکو کلود فعال‌اند. بعضی، مثل مقیاس‌دهی خودکار و کران‌جاب، به پلن بستگی دارند.

خطاهای رایج

با رفرش یک مسیر داخلی، ۴۰۴ برمی‌گردد

علتمسیرهایی مثل /dashboard فایل واقعی ندارند و روتر سمت مرورگر آن‌ها را می‌سازد.

راه‌حلدر sakoocloud.json حالت SPA را روشن کنید تا مسیرهای ناشناخته به index.html برگردند.

sakoocloud.json
{
  "outputDir": "dist",
  "spa": true
}

صفحه‌ی سفید بعد از استقرار

علتbase در vite.config یا publicPath در Vue CLI مسیر اشتباه دارد.

راه‌حلمقدار را / بگذارید.

فایل‌ها سرو نمی‌شوند

علتoutputDir با پوشه‌ی خروجی یکی نیست.

راه‌حلoutputDir را dist بگذارید.

بیلد با خطای حافظه متوقف می‌شود

علتبیلد پروژه‌های بزرگ در حافظه‌ی پیش‌فرض جا نمی‌شود.

راه‌حلحافظه را بیشتر کنید یا مصرف برنامه را پایین بیاورید.

terminal
sakoocloud apps scale --memory 1Gi

پرسش‌های متداول

Nuxt بهتر است یا Vue ساده؟

اگر رندر سمت سرور یا سئو مهم است Nuxt را انتخاب کنید؛ برای پنل و اپ داخلی، Vue ساده سبک‌تر است.

Vue 2 هم پشتیبانی می‌شود؟

بله، تا وقتی اسکریپت build خروجی استاتیک بسازد، نسخه‌ی Vue مهم نیست.

API پشت اپ Vue را کجا مستقر کنم؟

در یک اپ جدا، و آدرسش را با متغیر VITE_ به رابط کاربری بدهید.

جزئیات بیشتر در راهنمای Vue.js در مستندات و مرجع CLI.

سریع‌ترین مسیر از کد تا انتشار.

ابتدا ابزار خط فرمان را نصب کنید، سپس همین‌جا امتحان کنید. (بنویسید، یا یکی از پیشنهادهای پایین ترمینال را بزنید)

~/projects/my-app
امتحان کنید