1. 项目概述:小兔鲜电商前台开发首日实录
作为一款生鲜电商平台的前端开发项目,"小兔鲜"采用了Vue3+ElementPlus的技术栈组合。首日开发主要完成了基础框架搭建和环境配置工作,这是整个项目的地基工程。我选择Vue3而非Vue2的主要原因在于其Composition API带来的代码组织优势,特别适合电商这类交互复杂的场景。
项目初始化时,我特别关注了几个关键配置点:
- 使用Vite而非Webpack作为构建工具,冷启动速度快了10倍以上
- 预配置了SCSS支持,便于后续编写模块化样式
- 集成了ElementPlus的按需导入配置,避免打包体积过大
提示:Vue3项目初始化时建议同时安装vue-router和pinia,即使首日不用也会为后续路由和状态管理预留扩展空间
2. 环境配置与工具链搭建
2.1 开发环境准备
我使用的是Node 18 LTS版本,这是目前最稳定的选择。安装完基础环境后,通过以下命令创建项目:
npm create vite@latest xiaotuxian-front --template vue-ts这个命令会生成一个基于Vue3和TypeScript的项目骨架。相比JavaScript,TypeScript能在开发阶段就发现类型错误,这对电商项目尤为重要——商品SKU、价格计算等都需要严格的类型约束。
2.2 核心依赖安装
首日需要安装的关键依赖包括:
npm install element-plus @element-plus/icons-vue sass axios pinia vue-router这里有个细节需要注意:ElementPlus的图标库需要单独安装,而sass是编译SCSS的必要依赖。axios虽然首日不会用到,但提前安装可以为后续接口联调做准备。
2.3 VSCode插件配置
为了提高开发效率,我配置了以下VSCode插件:
- Volar(Vue3官方推荐替代Vetur)
- ESLint
- Prettier
- Stylelint(用于SCSS校验)
- Iconify IntelliSense(ElementPlus图标提示)
这些插件组合使用可以实现在保存时自动格式化代码并修复基础语法错误,大幅提升编码效率。
3. 项目目录结构设计
3.1 基础目录规划
不同于简单的Demo项目,电商前台需要更合理的目录结构。我的设计方案如下:
src/ ├── assets # 静态资源 ├── components # 公共组件 ├── composables # 组合式函数 ├── router # 路由配置 ├── stores # Pinia状态管理 ├── styles # 全局样式 ├── types # TS类型定义 └── views # 页面组件这种结构特别强调了类型定义和组合式逻辑的分离,使得后续维护更加清晰。例如商品类型可以定义在types/product.d.ts中,全项目共享。
3.2 SCSS全局样式配置
在styles目录下我创建了以下文件:
- variables.scss:定义颜色、间距等设计变量
- mixins.scss:封装常用样式混合
- index.scss:全局样式入口
在vite.config.ts中需要配置SCSS全局变量:
css: { preprocessorOptions: { scss: { additionalData: `@import "@/styles/variables.scss";` } } }这样在任何组件中都可以直接使用预定义的变量,比如:
.header { background-color: $primary-color; }4. ElementPlus集成实践
4.1 按需导入配置
虽然ElementPlus支持完整导入,但电商项目必须考虑性能。我采用unplugin-vue-components实现自动按需导入:
// vite.config.ts Components({ resolvers: [ ElementPlusResolver({ importStyle: 'sass' // 使用SCSS主题文件 }) ] })这种配置方式会在编译时自动引入使用到的组件,打包体积可以减少70%以上。
4.2 主题定制技巧
小兔鲜需要定制自己的品牌主题色。我通过覆盖ElementPlus的SCSS变量实现:
// variables.scss $--color-primary: #27ba9b; $--color-success: #1dc779; $--color-warning: #ffb302; $--color-danger: #e26237;注意:修改主题色后需要重新启动开发服务器才能生效
5. 首日开发常见问题排查
5.1 Volar类型检查报错
在组合式API中使用ref时,可能会遇到类型推断问题。解决方案是显式声明类型:
const count = ref<number>(0) // 而不是简单的ref(0)5.2 SCSS变量未生效
如果发现SCSS变量无法使用,检查以下三点:
- 确保vite.config.ts中的additionalData配置正确
- 确保文件扩展名是.scss而非.sass
- 确保变量文件路径正确
5.3 ElementPlus图标不显示
图标需要单独引入并使用el-icon包裹:
<template> <el-icon><Edit /></el-icon> </template> <script setup> import { Edit } from '@element-plus/icons-vue' </script>6. 项目架构设计前瞻
虽然首日主要是基础搭建,但已经需要考虑后续扩展性。我特别规划了这几个方面:
6.1 响应式布局方案
电商网站需要完美适配各种设备。我准备采用以下策略:
- 使用flex和grid布局实现主要结构
- ElementPlus的Layout组件作为基础
- 媒体查询处理极端情况
- 考虑后期引入autofit.js做更精细的适配
6.2 性能优化预备
提前配置了以下优化措施:
- 路由懒加载
- 静态资源CDN配置占位
- 开启Vite的build.minify选项
- 配置了production环境变量区分开发/生产环境
6.3 状态管理设计
使用Pinia设计了以下store模块:
- user:用户登录状态
- cart:购物车数据
- goods:商品信息
- address:收货地址
每个store都采用TypeScript严格定义类型,例如:
interface CartItem { skuId: string name: string price: number count: number selected: boolean }首日开发虽然看似只是搭建了基础环境,但这些决策会深刻影响后续开发效率。特别是在电商这种交互复杂的场景下,良好的架构设计能避免后期的重构成本。实际开发中我发现,合理使用Vue3的Composition API组织代码,配合TypeScript的类型检查,可以提前发现80%以上的潜在问题。