把檔案整理得像產品,讓面試官一看就覺得專業:
src/
├─ assets/ # 靜態資源(圖檔、icon)
├─ components/ # 共用元件(Hero, Header, Footer)
├─ composables/ # 可重用邏輯(若有)
├─ data/ # 固定資料(skills.ts)
├─ router/ # vue-router 設定
├─ stores/ # Pinia 狀態管理
├─ styles/ # 全域 CSS/SCSS
├─ views/ # 頁面級元件(Home.vue, ProjectDetail.vue, NotFound.vue)
└─ App.vue
👉 這樣清楚分 Core(router, stores, App.vue)、Features(views, components)、Shared(styles, assets)。
在 src/router/index.ts
:
const routes: RouteRecordRaw[] = [
{ path: '/', name: 'home', component: () => import('@/views/Home.vue') },
{ path: '/projects/:slug', name: 'project-detail', component: () => import('@/views/ProjectDetail.vue') },
{ path: '/:pathMatch(.*)*', name: 'not-found', component: () => import('@/views/NotFound.vue') }
]
👉 只有用到的頁才載入,首頁更快。
在 App.vue
或 router afterEach 內設定 meta:
// src/router/index.ts
import { createRouter, createWebHistory } from 'vue-router'
import type { RouteRecordRaw } from 'vue-router'
const routes: RouteRecordRaw[] = [ /* ... */ ]
export const router = createRouter({
history: createWebHistory(),
routes,
})
router.afterEach((to) => {
const defaultTitle = 'Chiayu · 前端工程師履歷網站'
document.title = (to.meta.title as string) || defaultTitle
})
在路由加 meta:
{ path: '/', component: () => import('@/views/Home.vue'), meta: { title: '首頁 - Chiayu Resume' } }
srcset
讓圖片在不同裝置載入適當尺寸:<img src="/assets/me-formal.jpg"
srcset="/assets/me-formal-480.jpg 480w, /assets/me-formal-960.jpg 960w"
sizes="(max-width: 600px) 480px, 960px"
alt="Chiayu 的照片" />
<link rel="preload" as="image" href="/assets/me-formal.jpg">
npm run build
輸出到 dist/
,檔案會自動壓縮與優化。
本地測試:
npm install -g serve
serve dist
npm run build
,Output Dir:dist
https://your-project.vercel.app
👉 優點:快速、免費、支援自動更新。
vite.config.ts
設定 base:export default defineConfig({
base: '/resume-site-vue/', // repo 名稱
plugins: [vue()],
})
npm run build
推到 GitHub 分支,然後用 GitHub Pages 啟用 /dist
。
或安裝 gh-pages:
npm i gh-pages -D
npx gh-pages -d dist
網址會是:https://<username>.github.io/resume-site-vue/
/
首頁:Hero + About + Skills + Projects + Contact/projects/:slug
詳情頁:圖片、描述、GitHub / Demo 按鈕base: '/'
→ 部署子路徑 404base: '/repo-name/'
404.html
,可以直接複製 index.html
。我們正式進入 React 實戰養成 🚀: