vue开发商城项目步骤和配置全过程
作者:qq_40884171
文章详细介绍了使用Vue CLI或Vite初始化Vue项目,配置核心依赖(如axios、vue-router、pinia),设置目录结构及SCSS样式管理,同时涵盖路由、状态、接口封装、SEO优化、支付安全和移动端适配等开发要点
初始化项目
使用Vue CLI创建项目,确保已安装Node.js和npm/yarn:
vue create mall-project
选择默认配置或手动配置(Babel、Router、Vuex等)。
如需使用Vite:
npm init vue@latest mall-project
安装核心依赖
进入项目目录后安装必要依赖:
npm install axios vue-router@4 pinia element-plus sass
axios:处理HTTP请求vue-router:路由管理pinia:状态管理(替代Vuex)element-plus:UI组件库sass:CSS预处理器
目录结构配置
典型商城项目目录结构:
src/ ├── assets/ # 静态资源 ├── components/ # 公共组件 ├── views/ # 页面级组件 ├── stores/ # Pinia状态管理 ├── router/ # 路由配置 ├── utils/ # 工具函数 ├── styles/ # 全局样式 ├── api/ # 接口封装 └── App.vue # 根组件
路由配置示例
在router/index.js中配置基础路由:
import { createRouter, createWebHistory } from 'vue-router'
const routes = [
{
path: '/',
component: () => import('@/views/Home.vue')
},
{
path: '/product/:id',
component: () => import('@/views/ProductDetail.vue')
},
{
path: '/cart',
component: () => import('@/views/Cart.vue')
}
]
const router = createRouter({
history: createWebHistory(),
routes
})
export default router
Pinia状态管理
创建购物车store(stores/cart.js):
import { defineStore } from 'pinia'
export const useCartStore = defineStore('cart', {
state: () => ({
items: []
}),
actions: {
addItem(product) {
const existItem = this.items.find(item => item.id === product.id)
existItem ? existItem.quantity++ : this.items.push({ ...product, quantity: 1 })
}
},
getters: {
totalPrice: (state) => state.items.reduce((total, item) => total + item.price * item.quantity, 0)
}
})
接口封装
在api/目录下创建请求封装(如api/product.js):
import axios from 'axios'
const instance = axios.create({
baseURL: 'https://your-api-endpoint.com'
})
export const getProducts = () => instance.get('/products')
export const getProductDetail = (id) => instance.get(`/products/${id}`)
全局样式配置
在styles/目录下:
variables.scss:定义SCSS变量mixins.scss:定义复用样式main.scss:导入全局样式
在main.js中引入:
import '@/styles/main.scss'
页面组件示例
商品列表组件(views/Home.vue):
<template>
<div class="product-list">
<el-card v-for="product in products" :key="product.id">
<img :src="product.image" />
<h3>{{ product.name }}</h3>
<p>¥{{ product.price }}</p>
<el-button @click="addToCart(product)">加入购物车</el-button>
</el-card>
</div>
</template>
<script setup>
import { ref } from 'vue'
import { getProducts } from '@/api/product'
import { useCartStore } from '@/stores/cart'
const cartStore = useCartStore()
const products = ref([])
const fetchProducts = async () => {
const res = await getProducts()
products.value = res.data
}
const addToCart = (product) => {
cartStore.addItem(product)
}
fetchProducts()
</script>
项目配置调优
在vite.config.js或vue.config.js中添加优化配置:
// vite示例
export default defineConfig({
css: {
preprocessorOptions: {
scss: {
additionalData: `@import "@/styles/variables.scss";`
}
}
},
server: {
proxy: {
'/api': {
target: 'http://your-api-server.com',
changeOrigin: true,
rewrite: (path) => path.replace(/^\/api/, '')
}
}
}
})
构建与部署
生产环境构建命令:
npm run build
部署到Nginx需配置:
server {
listen 80;
location / {
root /path/to/dist;
try_files $uri $uri/ /index.html;
}
}
注意事项
- 商品详情页需处理SEO,可使用vue-meta或@unhead/vue
- 支付流程建议使用第三方SDK(如支付宝/微信支付官方JSAPI)
- 图片懒加载使用
v-lazy指令或Intersection Observer API - 接口安全需配置JWT鉴权或CSRF防护
- 移动端适配推荐使用vw/vh单位或postcss-px-to-viewport插件
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
