vue开发商城项目步骤和配置全过程

 更新时间:2025年09月12日 08:59:42   作者: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.jsvue.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;
  }
}

注意事项

  1. 商品详情页需处理SEO,可使用vue-meta或@unhead/vue
  2. 支付流程建议使用第三方SDK(如支付宝/微信支付官方JSAPI)
  3. 图片懒加载使用v-lazy指令或Intersection Observer API
  4. 接口安全需配置JWT鉴权或CSRF防护
  5. 移动端适配推荐使用vw/vh单位或postcss-px-to-viewport插件

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Vue全局事件总线和订阅与发布使用案例分析讲解

    Vue全局事件总线和订阅与发布使用案例分析讲解

    在 vue 里我们可以通过全局事件总线来实现任意组件之间通信,它的原理是给 Vue 的原型对象上面添加一个属性。这样的话我所有组件的都可以访问到这个属性,然后可以通过这个属性来访问其他组件给这个属性上面绑定的一些方法,从而去传递数据
    2022-08-08
  • vue中的el-button样式自定义方式

    vue中的el-button样式自定义方式

    这篇文章主要介绍了vue中的el-button样式自定义方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • 详解Vue.js动态绑定class

    详解Vue.js动态绑定class

    Vue.js的核心是一个响应的数据绑定系统,它允许我们在普通 HTML 模板中使用特殊的语法将 DOM “绑定”到底层数据。被绑定的DOM 将与数据保持同步,每当数据有改动,相应的DOM视图也会更新。基于这种特性,通过vue.js动态绑定class就变得非常简单。一起来看下吧
    2016-12-12
  • vue中锚点的三种方法

    vue中锚点的三种方法

    本文给大家带来了vue中锚点的三种方法,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧
    2018-07-07
  • Vue输入框状态切换&自动获取输入框焦点的实现方法

    Vue输入框状态切换&自动获取输入框焦点的实现方法

    这篇文章主要介绍了Vue输入框状态切换&自动获取输入框焦点的实现,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-05-05
  • vue antd的from表单中验证rules中type的坑记录

    vue antd的from表单中验证rules中type的坑记录

    这篇文章主要介绍了vue antd的from表单中验证rules中type的坑记录,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04
  • Vue项目首屏性能优化组件实战指南

    Vue项目首屏性能优化组件实战指南

    Vue众所周知是一个轻量级的框架,源码仅仅为72.9KB,但是也有它自己的缺点,就是首屏加载会比较慢,这篇文章主要给大家介绍了关于Vue项目首屏性能优化组件的相关资料,需要的朋友可以参考下
    2021-11-11
  • Vue.js实现微信过渡动画左右切换效果

    Vue.js实现微信过渡动画左右切换效果

    这篇文章主要给大家介绍了利用Vue.js仿微信过渡动画左右切换效果的相关资料,需要用到的技术栈是Vue+Vuex。文中通过示例代码介绍的非常详细,对大家具一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-06-06
  • 详解vue数据渲染出现闪烁问题

    详解vue数据渲染出现闪烁问题

    本篇文章主要介绍了vue数据渲染出现闪烁问题,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06
  • Vue3兄弟组件传值之mitt的超详细讲解

    Vue3兄弟组件传值之mitt的超详细讲解

    之前只是浅显的使用插件进行vue开发展示,最近深入的研究了下,下面这篇文章主要给大家介绍了关于Vue3兄弟组件传值之mitt的超详细讲解,需要的朋友可以参考下
    2022-06-06

最新评论