Vue3 迁移不是“改完代码就上线”,还要确保测试通过、发布流程顺畅、线上监控稳稳的。今天我们以一个真实项目为例,梳理 Vue3 升级后的测试、构建、部署和监控策略,帮你把最后一公里走稳。

🎯 升级完成后的 Checklist

  • ✅ 单元测试覆盖核心组件。
  • ✅ E2E 测试回归关键业务流程。
  • ✅ TypeScript 类型检查无误。
  • ✅ CI/CD 流程自动化。
  • ✅ 线上监控告警配置完成。

🧪 单元测试:Vitest + Testing Library

安装:

npm install -D vitest @vitest/ui @vitejs/plugin-vue-jsx @testing-library/vue

配置 vitest.config.ts

import { defineConfig } from 'vitest/config';
import vue from '@vitejs/plugin-vue';

export default defineConfig({
  plugins: [vue()],
  test: {
    globals: true,
    environment: 'jsdom',
    setupFiles: './tests/setup.ts',
  },
});

编写测试:

import { render, fireEvent } from '@testing-library/vue';
import OrderForm from '@/components/OrderForm.vue';

test('提交表单', async () => {
  const { getByPlaceholderText, getByText } = render(OrderForm);
  await fireEvent.update(getByPlaceholderText('请输入商品名'), 'Vue3 课程');
  await fireEvent.click(getByText('提交'));
  expect(getByText('提交成功')).toBeTruthy();
});

🧪 E2E 测试:Playwright

npm install -D @playwright/test
npx playwright install

示例测试:

import { test, expect } from '@playwright/test';

test('登录流程', async ({ page }) => {
  await page.goto('http://localhost:5173');
  await page.fill('input[name="username"]', 'admin');
  await page.fill('input[name="password"]', '123456');
  await page.click('button:text("登录")');
  await expect(page.locator('text=欢迎回来')).toBeVisible();
});

🧰 类型检查 + Lint

  • npm run typecheck
    {
      "scripts": {
        "typecheck": "vue-tsc --noEmit",
        "lint": "eslint --ext .ts,.vue src"
      }
    }
    
  • 在 CI 中执行,保证类型和规范。

⚙️ CI/CD 流程(GitHub Actions 示例)

name: CI

on: [push, pull_request]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-node@v3
        with:
          node-version: 18
      - run: npm install
      - run: npm run typecheck
      - run: npm run lint
      - run: npm run test
      - run: npm run build
      - name: Upload dist
        uses: actions/upload-artifact@v3
        with:
          name: dist
          path: dist
  • 可配合 deploy workflow 发布到 OSS、Vercel、Netlify。

🌐 部署建议

场景 推荐方案
企业内网 Jenkins + 私有服务器 + Nginx
公有云 Vercel/Netlify/Cloudflare Pages
微前端 各子应用独立部署,主应用配合 CDN

Nginx 配置示例:

server {
  listen 80;
  server_name admin.example.com;
  root /var/www/app;

  location / {
    try_files $uri $uri/ /index.html;
  }
}

📈 监控与告警

  • 前端监控平台:前端埋点(神策、GrowingIO、阿里云 ARMS)。
  • 性能监控:Lighthouse CI、Web Vitals。
  • 错误追踪:Sentry、LogRocket。
  • 自建方案:window.onerror + 上传日志。

🧯 常见遗留问题

问题 排查方向
某些 IE/老版浏览器异常 核对 Vite 构建目标、polyfill
Pinia 状态丢失 检查持久化插件、版本兼容
动态导入失败 路径或 CDN 配置错误
多环境配置混乱 统一在 .env.* 中维护

🏁 小练习

  1. 给项目加上 npm run test:ui(Vitest UI),观察测试覆盖率。
  2. 编写 Playwright 测试覆盖关键路径,接入 CI。
Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐