vue.js

关注公众号 jb51net

关闭
首页 > 网络编程 > JavaScript > javascript类库 > vue.js > vue开发商城项目步骤和配置

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

目录结构配置

典型商城项目目录结构:

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/目录下:

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插件

总结

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

您可能感兴趣的文章:
阅读全文