logo
0
0
Login

ZhenxiJS Frontend Vue

基于 Nuxt 4 + Vue 3 构建的前端 SPA 应用,通过 API 与 Django Ninja 后端服务交互。

🚀 项目特性

  • 前后端分离 - 纯前端 SPA 应用,通过 API 调用 Django 后端
  • Django Ninja API - 与 Django Ninja 构建的 RESTful API 服务交互
  • Nuxt 4 - 现代化全栈 Vue 框架,支持 SSG 静态部署
  • Vue 3 - 响应式前端框架,提供优秀的用户体验
  • 静态部署 - 生成纯静态文件,可部署到任何 CDN 或静态托管服务
  • API 集成 - 内置 HTTP 客户端,轻松调用后端 API 接口
  • 文档路由系统 - 基于文件系统的 Markdown 文档路由,支持动态加载
  • 简单 Markdown 渲染 - 轻量级渲染器,支持标签和基本 Markdown 语法

📁 项目结构

zhenxijs-fontend-vue/ ├── .cnb.yml # CNB 构建配置 ├── .env.example # 环境变量示例 ├── .gitignore # Git 忽略文件 ├── .install_claude.sh # Claude安装脚本 ├── IFLOW.md # 项目流程文档 ├── app.vue # 根组件 ├── nuxt.config.ts # Nuxt 配置文件 ├── package.json # 项目依赖配置 ├── package-lock.json # 依赖锁定文件 ├── performance-test.js # 性能测试脚本 ├── README.md # 项目说明文档 ├── seo-check.js # SEO 检测脚本 ├── assets/ # 静态资源文件 │ ├── logo.svg # 项目 Logo │ └── reset.css # 全局CSS重置 ├── components/ # 公共组件 │ ├── PublicFooter.vue # 公共底部 │ ├── PublicHeader.vue # 公共头部 │ └── SearchBox.vue # 搜索框组件 ├── composables/ # 组合式函数 │ └── useSearch.js # 搜索功能 ├── markdow/ # 简单 Markdown 渲染器 │ ├── README.md # Markdown 渲染器说明 │ ├── components/ # 组件 │ │ └── ObsidianRenderer.vue │ └── utils/ # 工具函数 │ └── obsidian-parser.ts ├── pages/ # 页面路由 │ ├── docs/ # 文档路由 │ │ ├── [...slug].vue # 动态文档路由 │ │ └── index.vue # 文档列表页面 │ ├── index.vue # 首页 │ ├── schema-demo.vue # Schema演示页面 │ └── seo-test.vue # SEO 测试页面 └── public/ # 静态文件 └── docs/ # Markdown文档 ├── index.md └── JavaScript教程.md

🛠️ 技术栈

  • 框架: Nuxt 4.0.3 + Vue 3.5.18
  • 构建工具: Vite 7.1.1
  • 运行时: Node.js 22+
  • 包管理: npm 10+
  • 部署: 静态站点生成 (SSG)

📦 安装依赖

# 安装项目依赖 npm ci # 或使用 npm install npm install

🚀 开发命令

# 启动开发服务器 npm run dev # 构建生产版本 npm run build # 预览构建结果 npm run preview # 生成静态站点 npm run generate # 运行 SEO 检测 npm run seo

🌐 前后端分离架构

架构说明

  • 前端: Nuxt 4 + Vue 3 SPA 应用(本项目)
  • 后端: Django + Django Ninja API 服务
  • 通信: RESTful API 接口调用
  • 部署: 前后端独立部署,通过 API 通信

API 集成配置

  1. 环境变量配置

    # .env NUXT_PUBLIC_API_BASE=http://localhost:8000/api
  2. API 客户端配置

    // nuxt.config.ts export default defineNuxtConfig({ runtimeConfig: { public: { apiBase: process.env.NUXT_PUBLIC_API_BASE || 'http://localhost:8000/api' } } })
  3. API 调用示例

    <script setup> const { data } = await $fetch('/users', { baseURL: useRuntimeConfig().public.apiBase }) </script>

静态部署

构建后可部署到任何静态托管服务:

# 构建静态文件 npm run build # 预览静态站点 npx serve .output/public

生成的静态文件可部署到:

  • Vercel / Netlify
  • GitHub Pages
  • 阿里云 OSS / 腾讯云 COS。EdgeOne Page
  • Nginx 静态服务器

🔍 SEO 优化与构建优化

SEO 优化功能

项目内置完整的 SEO 优化:

  • 完整 TDK: Title、Description、Keywords 完整配置
  • Open Graph: 社交媒体分享优化(Facebook、LinkedIn 等)
  • Twitter Card: Twitter 分享卡片优化
  • 结构化数据: 搜索引擎友好的 HTML 结构
  • 静态预渲染: 搜索引擎可直接抓取完整内容

页面 SEO 配置示例

<script setup> useSeoMeta({ title: '页面标题 - 网站名称', description: '详细的页面描述,包含关键词和核心信息', keywords: 'Vue3, Nuxt4, Django, API, 关键词1, 关键词2', author: 'ZhenxiJS', robots: 'index,follow', // Open Graph 标签 ogTitle: '社交媒体标题', ogDescription: '社交媒体描述', ogType: 'website', ogUrl: '/page-url', ogImage: '/og-image.jpg', ogSiteName: '网站名称', // Twitter Card 标签 twitterCard: 'summary_large_image', twitterTitle: 'Twitter 标题', twitterDescription: 'Twitter 描述', twitterImage: '/twitter-image.jpg' }) // 设置页面语言和其他属性 useHead({ htmlAttrs: { lang: 'zh-CN' }, meta: [ { name: 'format-detection', content: 'telephone=no' }, { name: 'theme-color', content: '#00DC82' } ] }) </script>

构建优化

  • 文件合并: JavaScript 代码合并为 2 个主要文件,减少 HTTP 请求
  • 代码分割优化: vendor 和 main 代码分离,提升缓存效率
  • CSS 优化: 自动压缩和优化 CSS 文件
  • 资源内联: SVG 图片内联到 HTML,减少网络请求
  • 预加载优化: 关键资源预加载,提升首屏速度

SEO 检测

# 运行 SEO 质量检测 npm run seo # 检测内容包括: # - 页面标题和描述 # - 关键词密度 # - 图片 alt 属性 # - 链接结构 # - 页面加载速度

🔧 配置说明

Nuxt 配置 (nuxt.config.ts)

export default defineNuxtConfig({ ssr: true, // 构建时预渲染 HTML(SSG 必需),生成包含完整内容的静态文件 nitro: { preset: "static", // 静态文件生成模式 prerender: { routes: ["/", "/about"] // 需要预渲染的页面路由 } }, // 优化 SEO 和静态生成 experimental: { payloadExtraction: false // 禁用 payload 提取,减少文件分割 }, // 减少 JavaScript 分割,提升 SEO vite: { build: { rollupOptions: { output: { manualChunks: (id) => { // 将所有代码打包到一个文件中,减少文件分割 if (id.includes('node_modules')) { return 'vendor' } return 'main' } } } } }, // 优化 HTML 输出 app: { head: { charset: 'utf-8', viewport: 'width=device-width, initial-scale=1' } } })

SSR vs SSG 说明

重要: 项目使用 SSG (静态站点生成) 模式,不是传统的 SSR:

  • ssr: true: 在构建时预渲染 HTML,生成包含完整内容的静态文件
  • ssr: false: 生成 SPA 模式,HTML 中只有空的 <div>,内容需 JavaScript 渲染

为什么需要 ssr: true

  1. SEO 友好 - 搜索引擎可直接读取 HTML 中的完整内容
  2. 完整 TDK - Title、Description、Keywords 预渲染到 HTML
  3. 首屏速度 - 用户立即看到内容,无需等待 JavaScript
  4. 社交分享 - Open Graph 和 Twitter Card 元数据完整

最终产物: 纯静态文件 + Vue 交互功能,无需服务器运行。

📝 开发规范

  • API 优先: 所有数据交互通过 Django Ninja API 接口
  • Vue 3 Composition API: 使用现代化的 Vue 3 语法
  • 组件化开发: 页面拆分为可复用的 Vue 组件
  • 状态管理: 使用 Pinia 或 Vuex 管理应用状态
  • 类型安全: 定义 API 接口的 TypeScript 类型

🔄 开发工作流

  1. 本地开发

    npm run dev # 启动前端开发服务器 (http://localhost:3000)
  2. API 联调

    • 确保 Django 后端服务运行在 http://localhost:8000
    • 配置 API 基础地址环境变量
    • 测试 API 接口调用
  3. 构建部署

    npm run generate # 推荐:生成优化的静态文件(SSG) npm run build # 或者:标准构建 npm run seo # 检测页面 SEO 质量

构建命令对比

命令用途输出推荐场景
npm run generateSSG 静态生成完整预渲染的 HTML推荐,SEO 友好
npm run build标准构建服务端渲染模式需要服务器部署时

📚 文档路由系统

系统概述

项目集成了基于文件系统的文档路由系统,可以轻松地通过 URL 访问 public/docs 目录下的 Markdown 文档。

路由映射

public/docs/ → 页面路由 ├── index.md → /docs 或 /docs/index └── JavaScript教程.md → /docs/JavaScript教程

可用的路由

  • /docs - 文档列表页面,显示所有可用文档
  • /docs/index - 渲染 public/docs/index.md 文件
  • /docs/JavaScript教程 - 渲染 public/docs/JavaScript教程.md 文件
  • /docs/任意路径 - 尝试渲染 public/docs/任意路径.md 文件

功能特性

  • 动态路由: 支持任意层级的文档路径
  • 自动加载: 从 public/docs 目录自动加载 .md 文件
  • 标签支持: Markdown 中的 #标签 会被渲染为可点击元素
  • 错误处理: 文件不存在时显示友好的错误信息
  • 响应式设计: 适配不同屏幕尺寸

使用示例

  1. 访问文档列表: 浏览器访问 /docs
  2. 查看具体文档: 点击文档卡片或直接访问 /docs/JavaScript教程
  3. 标签交互: 在文档中点击 #标签 触发标签点击事件

Markdown 渲染功能

  • 标签支持: #标签 语法,标签会被渲染为可点击的元素
  • 基础 Markdown: 支持标准的 Markdown 语法(标题、段落、列表、粗体、斜体、代码、链接、表格、引用块、代码块)
  • 链接 SEO 优化: 自动为外部链接添加 nofollow 属性
  • 不支持的语法: 双向链接 [[文件名]] 会被视为普通文本

🎯 项目优化成果

构建优化

  • 文件合并: 从多个 JS 文件合并为 2 个主要文件
  • 体积优化: 主应用 172KB,辅助代码 5.8KB
  • 加载优化: 减少 HTTP 请求,提升首屏速度
  • 缓存友好: vendor 和 main 分离,提升缓存效率

SEO 优化

  • 完整 TDK: 每个页面都有标题、描述、关键词
  • 结构化内容: HTML 中包含完整页面内容
  • 社交分享: Open Graph 和 Twitter Card 完整配置
  • 搜索引擎友好: 支持直接抓取,无需 JavaScript 渲染

部署优化

  • 纯静态文件: 可部署到任何 CDN 或静态托管
  • 前后端分离: 独立部署,通过 API 通信
  • Vue 交互: 保留完整的 SPA 功能
  • 跨平台兼容: 支持各种静态托管服务

🐛 常见问题

API 调用失败

如遇到 API 请求错误,请检查:

  1. Django 后端服务是否正常运行
  2. API 基础地址配置是否正确
  3. CORS 跨域设置是否配置(Django 端)
  4. API 接口路径和参数是否正确

开发环境问题

本地开发时的注意事项:

  1. 确保前后端端口不冲突(前端 3000,后端 8000)
  2. 检查环境变量 .env 文件配置
  3. 确认 Django Ninja API 文档可访问

部署相关问题

静态部署时可能遇到的问题:

  1. API 地址需要配置为生产环境地址
  2. 检查静态资源路径是否正确
  3. 确认 CDN 或静态托管服务配置

📄 许可证

ISC License

🤝 贡献

欢迎提交 Issue 和 Pull Request 来改进项目。


项目用途: Django 后台前端页面生成
开发团队: ZhenxiJS
项目版本: 1.0.0
最后更新: 2025年8月

About

快速生成博客和资讯的Nuxt模板

Language
Vue38%
Markdown29.2%
JavaScript19.8%
TypeScript7.1%
Others5.9%