Vite 作为新一代前端构建工具,以其 极速的冷启动、按需编译 特性显著提升 Vue3 项目的开发体验;Vue3.0 带来了 Composition API、Teleport、SFC Script Setup 等强大特性,优化了大型项目的代码组织与性能;Vant 则是轻量、可靠的移动端 Vue 组件库,提供了按钮、表单、导航等丰富的移动端常用组件,三者结合是开发移动端 Vue 项目的高效方案。

本文将从 环境搭建、项目创建、Vant 集成、核心特性实践、打包优化 五个维度,详细讲解技术栈整合流程。

一、环境准备

在开始项目前,需确保本地已安装以下工具:

  • Node.js:推荐 v14.18+ 或 v16+(Vite 对 Node 版本有最低要求,低版本可能导致依赖安装失败)。
    验证方式:终端执行 node -v,若输出版本号则已安装。
    下载地址:Node.js 官网
  • 包管理器:npm(Node 自带)或 yarn/pnpm(推荐,速度更快)。
    若用 pnpm,可通过 npm install -g pnpm 全局安装。
  • 代码编辑器:推荐 VS Code,搭配插件 Volar(Vue3 官方推荐,替代 Vetur)、ESLint(代码规范检查)。

二、创建 Vite + Vue3 项目

通过 Vite 官方脚手架快速初始化项目,支持选择包管理器、是否启用 TypeScript 等配置。

1. 执行创建命令

打开终端,进入目标目录,执行以下命令(任选一种包管理器):

# npm
npm create vite@latest my-vite-vue3-vant -- --template vue

# yarn
yarn create vite my-vite-vue3-vant --template vue

# pnpm
pnpm create vite my-vite-vue3-vant --template vue
  • my-vite-vue3-vant:项目名称,可自定义。
  • --template vue:指定模板为 Vue(若需 TypeScript,可替换为 vue-ts)。

2. 完成项目初始化

命令执行后,按终端提示操作:

  1. 进入项目目录:cd my-vite-vue3-vant
  2. 安装依赖:
    # npm
    npm install
    
    # yarn
    yarn install
    
    # pnpm
    pnpm install
    
  3. 启动开发服务器:
    # npm
    npm run dev
    
    # yarn
    yarn dev
    
    # pnpm
    pnpm dev
    
  4. 验证启动:终端输出 Local: http://127.0.0.1:5173/ 后,访问该地址,若看到 Vue 欢迎页面,则项目创建成功。

三、集成 Vant 组件库

Vant 提供了 自动引入(推荐,减少无用代码)和 手动引入 两种方式,以下重点讲解自动引入(更符合 Vite 按需编译的理念)。

1. 安装 Vant 及依赖

终端执行命令安装 Vant 和自动引入所需的插件:

# npm
npm i vant unplugin-vue-components unplugin-auto-import -D

# yarn
yarn add vant unplugin-vue-components unplugin-auto-import -D

# pnpm
pnpm add vant unplugin-vue-components unplugin-auto-import -D
  • unplugin-vue-components:自动引入 Vue 组件(包括 Vant 组件)。
  • unplugin-auto-import:自动引入 Vue API(如 refreactive)和 Vant 工具函数。

2. 配置 Vite 插件

修改项目根目录下的 vite.config.js(若用 TypeScript 则是 vite.config.ts),添加插件配置:

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
// 引入自动引入插件
import AutoImport from 'unplugin-auto-import/vite'
import Components from 'unplugin-vue-components/vite'
// 引入 Vant 组件解析器
import { VantResolver } from 'unplugin-vue-components/resolvers'

export default defineConfig({
  plugins: [
    vue(),
    // 自动引入 Vue API 和 Vant 工具
    AutoImport({
      resolvers: [VantResolver()],
      // 生成自动引入的类型声明文件(可选,TypeScript 项目推荐)
      dts: 'src/auto-imports.d.ts'
    }),
    // 自动引入 Vant 组件
    Components({
      resolvers: [VantResolver()],
      // 生成组件类型声明文件(可选,TypeScript 项目推荐)
      dts: 'src/components.d.ts'
    })
  ]
})

3. 验证 Vant 集成

修改 src/App.vue,使用 Vant 的 Button 组件测试:

<template>
  <div class="app">
    <h1>Vite + Vue3 + Vant</h1>
    <!-- 使用 Vant Button 组件 -->
    <van-button type="primary" @click="handleClick"> primary 按钮 </van-button>
  </div>
</template>

<script setup>
// 无需手动 import Button 和 ref,插件会自动引入
const handleClick = () => {
  alert('Vant 组件点击成功!')
}
</script>

<style scoped>
.app {
  padding: 20px;
}
</style>

保存后查看浏览器,若显示蓝色的 Vant 按钮,点击弹出提示,则 Vant 集成成功。

四、核心特性实践

结合三者的核心特性,实现一个简单的「用户登录表单」示例,覆盖 Script Setup、Vant 表单组件、Vite 热更新

示例:用户登录表单

<template>
  <div class="login-page">
    <h2 class="title">用户登录</h2>
    <!-- Vant 表单组件 -->
    <van-form @submit="onSubmit">
      <!-- 手机号输入 -->
      <van-field
        v-model="phone"
        name="phone"
        label="手机号"
        placeholder="请输入手机号"
        :rules="[{ required: true, message: '请输入手机号' }]"
      />
      <!-- 密码输入 -->
      <van-field
        v-model="password"
        type="password"
        name="password"
        label="密码"
        placeholder="请输入密码"
        :rules="[{ required: true, message: '请输入密码' }]"
      />
      <!-- 登录按钮 -->
      <van-button type="primary" block form-type="submit" class="login-btn">
        登录
      </van-button>
    </van-form>
  </div>
</template>

<script setup>
// 1. Vue3 Script Setup:无需 export default,直接声明变量和函数
// 2. 自动引入:ref、VanForm、VanField 等无需手动 import
const phone = ref('') // 响应式变量
const password = ref('')

// 表单提交事件
const onSubmit = (values) => {
  console.log('登录信息:', values)
  // 调用接口逻辑(示例)
  if (phone.value && password.value) {
    alert('登录请求已发送!')
  }
}
</script>

<style scoped>
.login-page {
  padding: 30px 20px;
}
.title {
  text-align: center;
  margin-bottom: 30px;
  font-size: 20px;
}
.login-btn {
  margin-top: 20px;
}
</style>
特性说明:
  1. Vue3 Script Setup:简化组件代码,减少模板代码,响应式变量直接用 ref 声明。
  2. Vant 表单能力van-form 提供表单校验(rules)、提交事件(@submit),van-field 封装了输入框逻辑,无需手动处理校验。
  3. Vite 热更新:修改代码后,浏览器无需刷新即可实时更新,开发效率极高。

五、项目优化(可选)

针对移动端项目的特点,进行以下优化,提升性能和用户体验。

1. 移动端适配(viewport)

Vant 基于 375px 设计稿,推荐使用 viewport 适配方案,步骤如下:

  1. 安装依赖:
    npm i postcss-px-to-viewport -D
    
  2. 项目根目录创建 postcss.config.js,添加配置:
    module.exports = {
      plugins: {
        'postcss-px-to-viewport': {
          viewportWidth: 375, // 设计稿宽度(Vant 默认 375)
          viewportHeight: 667, // 设计稿高度(可选)
          unitPrecision: 5, // 转换后保留的小数位数
          viewportUnit: 'vw', // 转换后的单位(vw 适配性更好)
          selectorBlackList: ['van-'], // 排除 Vant 组件(避免重复适配)
          minPixelValue: 1, // 最小转换像素(小于 1px 不转换)
          mediaQuery: false // 是否在媒体查询中转换 px
        }
      }
    }
    
    配置后,项目中写的 px 会自动转换为 vw,适配不同屏幕宽度的手机。

2. 按需加载图片(Vite 内置)

Vite 支持通过 ?url?raw 语法按需加载图片,避免大图片一次性加载:

<template>
  <!-- 按需加载图片 -->
  <img :src="logo" alt="logo" />
</template>

<script setup>
// 按需导入图片(开发环境下是路径,生产环境下是哈希文件名)
import logo from './assets/logo.png?url'
</script>

3. 生产环境打包优化

修改 vite.config.js,添加打包配置:

export default defineConfig({
  // 其他配置...
  build: {
    target: 'es2015', // 兼容更低版本的浏览器
    outDir: 'dist', // 打包输出目录
    assetsDir: 'assets', // 静态资源目录
    minify: 'esbuild', // 压缩工具(esbuild 比 terser 更快)
    rollupOptions: {
      // 分割代码:将第三方依赖(如 vant、vue)单独打包
      output: {
        chunkFileNames: 'js/[name]-[hash].js',
        entryFileNames: 'js/[name]-[hash].js',
        assetFileNames: '[ext]/[name]-[hash].[ext]',
        manualChunks: {
          vendor: ['vue', 'vant'] // 第三方依赖打包为 vendor.js
        }
      }
    }
  }
})

六、常见问题解决

  1. Vant 组件样式不生效?
    检查 vite.config.js 中是否配置了 VantResolver,且插件 Components 已正确引入;若手动引入组件,需同时引入样式(import 'vant/es/button/style')。

  2. 开发环境热更新失效?
    确保 Vite 版本是最新的,且项目目录中没有特殊字符;若使用 Windows 系统,避免路径包含中文。

  3. 移动端适配后字体模糊?
    index.html<head> 中添加 meta 标签:

    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
    

通过以上步骤,即可完成 Vite + Vue3.0 + Vant 的完整整合,快速启动一个高性能的移动端 Vue 项目。如需进一步扩展,可结合 Vue Router 实现路由管理、Pinia 实现状态管理,构建更复杂的应用。

更多推荐