Skip to content

wenjie1388/blog-frontend

Repository files navigation

Blog Frontend - 个人博客前台展示系统

基于 Vue 3 + Vite + Element Plus 构建的博客前台展示系统。

技术栈

  • 前端框架: Vue 3.4.15
  • 构建工具: Vite 5.0.11
  • UI 组件库: Element Plus 2.5.1
  • 状态管理: Pinia 2.1.7
  • 路由: Vue Router 4.2.5
  • HTTP 客户端: Axios 1.6.5
  • Markdown 渲染: Marked 11.1.1
  • 代码高亮: Highlight.js 11.9.0
  • 动画库: GSAP 3.12.5
  • 平滑滚动: Lenis 1.1.0
  • 样式预处理: SCSS

项目结构

blog-frontend/
├── src/
│   ├── api/              # API 接口
│   │   ├── article.ts    # 文章相关接口
│   │   ├── category.ts   # 分类相关接口
│   │   ├── config.ts     # 配置相关接口
│   │   ├── index.ts      # API 统一导出
│   │   ├── menu.ts       # 菜单相关接口
│   │   ├── stats.ts      # 统计相关接口
│   │   └── theme.ts      # 主题相关接口
│   ├── assets/           # 静态资源
│   │   └── styles/       # 全局样式
│   ├── components/       # 公共组件
│   │   ├── ArticleCard.vue   # 文章卡片
│   │   ├── Footer.vue        # 页脚
│   │   ├── Navigation.vue    # 导航栏
│   │   └── ThemeSwitcher.vue # 主题切换器
│   ├── router/           # 路由配置
│   │   └── index.ts      # 路由定义
│   ├── stores/           # Pinia 状态管理
│   │   ├── index.ts      # Store 统一导出
│   │   ├── menu.ts       # 菜单状态
│   │   └── theme.ts      # 主题状态
│   ├── utils/            # 工具函数
│   │   ├── format.ts     # 格式化工具
│   │   └── http.ts       # Axios 封装
│   ├── views/            # 页面视图
│   │   ├── About.vue         # 关于页面
│   │   ├── ArticleDetail.vue # 文章详情
│   │   ├── Articles.vue      # 文章列表
│   │   ├── Category.vue      # 分类页面
│   │   ├── Home.vue          # 首页
│   │   └── NotFound.vue      # 404页面
│   ├── App.vue           # 根组件
│   ├── env.d.ts          # 环境类型声明
│   └── main.ts           # 入口文件
├── Dockerfile            # Docker 构建配置
├── nginx.conf            # Nginx 配置文件
├── vite.config.ts        # Vite 配置
└── package.json          # 项目依赖

功能模块

  1. 首页: 博客首页,展示精选文章和统计数据
  2. 文章列表: 分页展示所有文章
  3. 文章详情: Markdown 渲染、代码高亮、文章阅读
  4. 分类浏览: 按分类查看文章
  5. 关于页面: 博客介绍页面
  6. 主题切换: 支持明暗主题切换
  7. 响应式设计: 适配移动端和桌面端

部署教程

方式一:本地开发环境部署

1. 环境要求

  • Node.js >= 18.0.0
  • pnpm >= 8.0.0 (推荐) 或 npm >= 9.0.0
  • 后端服务已启动 (默认端口 3001)

2. 安装依赖

# 进入项目目录
cd blog-frontend

# 使用 pnpm 安装依赖
pnpm install

# 或使用 npm
npm install

3. 配置环境变量

在项目根目录创建 .env 文件:

# API 基础地址
VITE_API_BASE_URL=http://localhost:3001/api

4. 启动开发服务器

# 使用 pnpm
pnpm dev

# 或使用 npm
npm run dev

开发服务器默认运行在 http://localhost:5173

5. 构建生产版本

# 使用 pnpm
pnpm build

# 或使用 npm
npm run build

构建输出目录为 dist/

方式二:Docker 部署

1. 构建 Docker 镜像

# 进入项目目录
cd blog-frontend

# 构建镜像
docker build -t blog-frontend:latest .

2. 运行容器

# 运行容器,映射到主机的 80 端口
docker run -d \
  --name blog-frontend \
  -p 80:80 \
  --network blog-network \
  blog-frontend:latest

注意:需要将容器加入到后端服务所在的网络 blog-network,或者使用 --link 连接后端容器。

3. Docker Compose 部署(推荐)

创建 docker-compose.yml 文件:

version: '3.8'

services:
  blog-frontend:
    build: ./blog-frontend
    container_name: blog-frontend
    ports:
      - "80:80"
    networks:
      - blog-network
    depends_on:
      - backend

  backend:
    # 后端服务配置
    # ...

networks:
  blog-network:
    driver: bridge

运行:

docker-compose up -d

方式三:Nginx 部署

1. 构建项目

npm run build

2. 配置 Nginx

nginx.conf 复制到 Nginx 配置目录:

# Linux 示例
sudo cp nginx.conf /etc/nginx/conf.d/blog-frontend.conf

# 修改配置中的后端地址
sudo nano /etc/nginx/conf.d/blog-frontend.conf

修改 proxy_pass 指向实际的后端服务地址:

location /api {
    proxy_pass http://your-backend-host:3001;
    # ...
}

3. 部署静态文件

# 复制构建产物到 Nginx 目录
sudo cp -r dist/* /usr/share/nginx/html/

4. 重启 Nginx

sudo nginx -s reload

配置说明

Vite 配置 (vite.config.ts)

配置项 说明 默认值
server.port 开发服务器端口 5173
server.proxy 开发环境代理配置 代理 /api 到 localhost:3001
build.outDir 构建输出目录 dist
build.assetsDir 静态资源目录 assets

环境变量

变量名 说明 示例
VITE_API_BASE_URL API 基础地址 /api 或 http://localhost:3001/api

常见问题

1. 开发环境代理不生效

检查 vite.config.ts 中的代理配置,确保后端服务已启动在配置的端口上。

2. 构建后 API 请求 404

生产环境需要配置 Nginx 反向代理,参考上面的 Nginx 部署章节。

3. Markdown 渲染异常

确保安装了 markedhighlight.js 依赖,并正确引入样式文件。

4. 主题切换不生效

检查 theme.ts store 是否正确配置,以及主题样式是否正确加载。

5. Docker 部署后无法连接后端

检查容器网络配置,确保前端容器可以访问到后端服务。可以使用 Docker Compose 统一管理网络。

6. 富文本内容中的图片无法显示

确保 Nginx 配置中正确代理了 /uploads 路径到后端服务。

开发规范

  • 使用 TypeScript 编写代码
  • 组件使用 Vue 3 Composition API
  • API 接口统一放在 src/api 目录
  • 使用 Pinia 进行状态管理
  • 样式使用 SCSS
  • 使用 GSAP 实现复杂动画效果

性能优化

  • 代码分割:Element Plus 和 Vue 相关库单独打包
  • 静态资源缓存:Nginx 配置 1 年缓存期
  • 路由懒加载:按需加载页面组件
  • 图片优化:使用适当的图片格式和尺寸

许可证

MIT

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors