Vue 3 + TS + Vite + Pinia 开发提效插件攻略
1. 引言
Vue 3 + TypeScript + Vite + Pinia 技术栈已经成为现代前端开发的主流选择,其优秀的性能和开发体验备受开发者青睐。然而,要充分发挥这一技术栈的潜力,合理使用各种提效插件至关重要。
本文将全面介绍 Vue 3 + TS + Vite + Pinia 开发过程中最实用的提效插件,包括:
- 开发工具类插件
- 构建优化类插件
- 代码质量类插件
- 测试类插件
- 部署类插件
每个插件都将提供详细的安装方法、配置示例和使用场景,帮助你打造高效、规范的开发环境。
2. 开发工具类插件
2.1 Volar - Vue 3 语言工具
插件作用:
- 提供 Vue 3 单文件组件的语法高亮和智能提示
- 支持模板中的 TypeScript 类型检查
- 提供 Composition API 的完整智能提示
- 支持 Vue 3 的所有新特性
安装方法:
bash
# VS Code 插件市场搜索并安装 Volar
# 或使用命令行
code --install-extension Vue.volar
配置方法:
在项目根目录创建 volar.config.ts 文件:
typescript
// volar.config.ts
// Volar 语言服务器配置文件
import { defineConfig } from '@volar/vue-language-server'
/**
* 定义 Volar 配置
* @returns Volar 配置对象
*/
export default defineConfig({
// 服务配置
services: {
// 自定义服务配置
// 例如:可以在这里配置 TypeScript 语言服务的增强选项
},
// 语言特性配置
languageFeatures: {
// 启用/禁用特定的语言特性
implementation: true, // 启用实现查找
references: true, // 启用引用查找
definition: true, // 启用定义查找
typeDefinition: true, // 启用类型定义查找
callHierarchy: true, // 启用调用层次结构
hover: true, // 启用悬停提示
rename: true, // 启用重命名重构
renameFileRefactoring: true, // 启用文件重命名重构
signatureHelp: true, // 启用签名帮助
codeAction: true, // 启用代码操作
workspaceSymbol: true, // 启用工作区符号查找
completion: {
defaultTagNameCase: 'both', // 标签名大小写处理
defaultAttrNameCase: 'kebabCase', // 属性名大小写处理
getDocumentNameCasesRequest: true, // 启用文档名称大小写请求
getDocumentSelectionRequest: true, // 启用文档选择请求
},
documentHighlight: true, // 启用文档高亮
documentLink: true, // 启用文档链接
codeLens: true, // 启用代码镜头
diagnostics: true, // 启用诊断
semanticTokens: true, // 启用语义标记
inlayHints: true, // 启用内嵌提示
}
})
使用建议:
- 禁用 Vetur 插件,避免冲突
- 启用 TypeScript 语言服务增强
2.2 ESLint - 代码检查工具
插件作用:
- 检查代码中的语法错误和潜在问题
- 强制执行代码风格规范
- 与 TypeScript 集成,检查类型相关问题
- 与 Vue 3 集成,检查组件相关问题
安装方法:
bash
npm install --save-dev eslint @typescript-eslint/eslint-plugin @typescript-eslint/parser eslint-plugin-vue
配置方法:
创建 .eslintrc.js 文件:
javascript
// .eslintrc.js
// ESLint 配置文件
/**
* ESLint 配置对象
* 用于检查代码中的语法错误和潜在问题,强制执行代码风格规范
*/
module.exports = {
/**
* 根配置标志
* 设置为 true 时,ESLint 会停止在父级目录中查找配置文件
*/
root: true,
/**
* 环境配置
* 定义代码运行的环境,启用相应的全局变量
*/
env: {
/**
* Node.js 环境
* 启用 Node.js 全局变量和语法
*/
node: true
},
/**
* 扩展配置
* 继承其他 ESLint 配置
*/
extends: [
/**
* ESLint 推荐规则
* 使用 ESLint 官方推荐的规则集
*/
'eslint:recommended',
/**
* Vue TypeScript 推荐规则
* 使用 @vue/eslint-config-typescript 推荐的规则集
*/
'@vue/typescript/recommended',
/**
* Vue Prettier 配置
* 集成 Prettier 格式化规则
*/
'@vue/prettier',
/**
* TypeScript ESLint Prettier 配置
* 集成 TypeScript ESLint 与 Prettier
*/
'@vue/prettier/@typescript-eslint'
],
/**
* 解析器选项
* 配置 ESLint 解析器的行为
*/
parserOptions: {
/**
* ECMAScript 版本
* 使用 ECMAScript 2020 语法
*/
ecmaVersion: 2020,
/**
* 解析器
* 使用 @typescript-eslint/parser 解析 TypeScript 代码
*/
parser: '@typescript-eslint/parser',
/**
* 源码类型
* 使用 ES 模块语法
*/
sourceType: 'module'
},
/**
* 自定义规则
* 覆盖或添加自定义 ESLint 规则
*/
rules: {
/**
* 禁止使用 any 类型
* 强制使用具体类型,提高类型安全
*/
'@typescript-eslint/no-explicit-any': 'error',
/**
* 不强制函数返回类型
* 允许 TypeScript 自动推断函数返回类型
*/
'@typescript-eslint/explicit-function-return-type': 'off',
/**
* 不强制模块边界类型
* 允许 TypeScript 自动推断模块导出类型
*/
'@typescript-eslint/explicit-module-boundary-types': 'off',
/**
* 禁止未使用的变量
* 检测并报错未使用的变量
*/
'@typescript-eslint/no-unused-vars': ['error', {
/**
* 忽略以下划线开头的参数
*/
argsIgnorePattern: '^_',
/**
* 忽略以下划线开头的变量
*/
varsIgnorePattern: '^_'
}]
}
}
使用示例:
bash
# 检查所有文件
npm run lint
# 检查并自动修复
npm run lint -- --fix
2.3 Prettier - 代码格式化工具
插件作用:
- 自动格式化代码,保持代码风格一致
- 支持 Vue 单文件组件的格式化
- 与 ESLint 集成,避免规则冲突
- 支持 TypeScript、JavaScript、CSS 等多种文件类型
安装方法:
bash
npm install --save-dev prettier eslint-plugin-prettier eslint-config-prettier
配置方法:
创建 .prettierrc.js 文件:
javascript
// .prettierrc.js
// Prettier 配置文件
/**
* Prettier 配置对象
* 用于自动格式化代码,保持代码风格一致
*/
module.exports = {
/**
* 分号配置
* 设置为 false 时,Prettier 不会在语句末尾添加分号
*/
semi: false,
/**
* 尾随逗号配置
* 'es5' - 仅在 ES5 兼容的地方添加尾随逗号(对象、数组等)
* 'none' - 不添加尾随逗号
* 'all' - 在所有可能的地方都添加尾随逗号
*/
trailingComma: 'es5',
/**
* 引号配置
* 设置为 true 时,Prettier 会使用单引号而非双引号
*/
singleQuote: true,
/**
* 打印宽度配置
* 指定代码行的最大长度,超过此长度会自动换行
*/
printWidth: 80,
/**
* 缩进宽度配置
* 指定每个缩进级别的空格数
*/
tabWidth: 2,
/**
* 行尾换行符配置
* 'lf' - Unix 风格(\n)
* 'crlf' - Windows 风格(\r\n)
* 'cr' - 旧 Mac 风格(\r)
* 'auto' - 保持文件原有的行尾风格
*/
endOfLine: 'lf',
/**
* 覆盖配置
* 为特定文件类型配置不同的格式化规则
*/
overrides: [
{
/**
* 文件匹配模式
* 匹配 TypeScript 文件
*/
files: '*.ts',
/**
* 配置选项
* 为 TypeScript 文件指定解析器
*/
options: {
/**
* 解析器配置
* 使用 typescript 解析器处理 TypeScript 文件
*/
parser: 'typescript'
}
},
{
/**
* 文件匹配模式
* 匹配 Vue 单文件组件
*/
files: '*.vue',
/**
* 配置选项
* 为 Vue 文件指定解析器
*/
options: {
/**
* 解析器配置
* 使用 vue 解析器处理 Vue 文件
*/
parser: 'vue'
}
}
]
}
使用示例:
bash
# 格式化所有文件
npx prettier --write .
# 检查格式化状态
npx prettier --check .
2.4 TypeScript Vue Plugin (Volar) - TypeScript 增强
插件作用:
- 为 Vue 单文件组件提供更好的 TypeScript 支持
- 增强模板中的类型检查
- 提供更准确的智能提示
- 支持 Vue 3 的 Composition API 类型推断
安装方法:
bash
# VS Code 插件市场搜索并安装 TypeScript Vue Plugin (Volar)
code --install-extension Vue.vscode-typescript-vue-plugin
配置方法:
在 tsconfig.json 中添加相关配置:
json
// tsconfig.json
// TypeScript 配置文件
{
"compilerOptions": {
/**
* 目标 ECMAScript 版本
* 指定编译后的 JavaScript 代码使用的 ECMAScript 版本
*/
"target": "ES2020",
/**
* 类字段定义
* 设置为 true 时,使用 ECMAScript 标准的类字段定义
*/
"useDefineForClassFields": true,
/**
* 模块系统
* 指定编译后的 JavaScript 代码使用的模块系统
*/
"module": "ESNext",
/**
* 库文件
* 指定编译过程中需要包含的库文件
*/
"lib": ["ES2020", "DOM", "DOM.Iterable"],
/**
* 跳过库文件检查
* 设置为 true 时,跳过对声明文件 (.d.ts) 的类型检查
*/
"skipLibCheck": true,
/**
* 模块解析策略
* 指定模块解析的策略
* 'bundler' - 使用打包工具的模块解析策略
*/
"moduleResolution": "bundler",
/**
* 允许导入 TypeScript 文件扩展名
* 设置为 true 时,允许在导入语句中使用 .ts 扩展名
*/
"allowImportingTsExtensions": true,
/**
* 解析 JSON 模块
* 设置为 true 时,允许导入 JSON 文件
*/
"resolveJsonModule": true,
/**
* 隔离模块
* 设置为 true 时,确保每个文件都可以作为独立的模块编译
*/
"isolatedModules": true,
/**
* 不生成输出文件
* 设置为 true 时,只进行类型检查,不生成编译后的文件
*/
"noEmit": true,
/**
* JSX 处理模式
* 指定如何处理 JSX 语法
* 'preserve' - 保留 JSX 语法,不进行转换
*/
"jsx": "preserve",
/**
* 启用严格模式
* 启用所有严格类型检查选项
*/
"strict": true,
/**
* 未使用的局部变量检查
* 设置为 true 时,报告未使用的局部变量
*/
"noUnusedLocals": true,
/**
* 未使用的参数检查
* 设置为 true 时,报告未使用的参数
*/
"noUnusedParameters": true,
/**
* switch 语句穿透检查
* 设置为 true 时,报告 switch 语句中的穿透情况
*/
"noFallthroughCasesInSwitch": true
},
/**
* 包含文件
* 指定需要编译的文件
*/
"include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue"],
/**
* 项目引用
* 指定当前项目依赖的其他 TypeScript 项目
*/
"references": [{ "path": "./tsconfig.node.json" }]
}
3. 构建优化类插件
3.1 Vite - 核心构建工具
插件作用:
- 极速的开发服务器启动速度
- 即时的热模块替换 (HMR)
- 优化的生产构建
- 丰富的插件生态
安装方法:
bash
# 创建新项目
npm create vite@latest my-vue-ts-app -- --template vue-ts
# 或在现有项目中安装
npm install --save-dev vite
配置方法:
创建 vite.config.ts 文件:
typescript
// vite.config.ts
// Vite 配置文件
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import path from 'path'
/**
* 定义 Vite 配置
* @returns Vite 配置对象
* @description 配置 Vite 构建工具的行为,包括插件、解析、服务器和构建选项
*/
export default defineConfig({
/**
* 插件配置
* @description 用于扩展 Vite 的功能,添加各种插件来处理不同类型的文件
*/
plugins: [
/**
* Vue 插件
* @description 用于处理 Vue 单文件组件 (.vue 文件)
* @param options 插件配置选项
* @returns Vue 插件实例
*/
vue({
/**
* 模板配置
* 可以在这里配置模板编译选项
*/
template: {
/**
* 编译器选项
* 配置 Vue 模板编译器的行为
*/
compilerOptions: {
/**
* 自定义元素识别
* 告诉 Vue 编译器哪些标签是自定义元素,不需要编译
* @param tag 标签名
* @returns 是否为自定义元素
*/
isCustomElement: (tag) => tag.startsWith('custom-')
}
}
})
],
/**
* 解析配置
* @description 用于配置模块解析规则,包括路径别名、扩展名等
*/
resolve: {
/**
* 路径别名配置
* @description 用于创建 import 或 require 的别名,简化模块导入路径
*/
alias: {
/**
* 将 @ 别名映射到 src 目录
* @example import { User } from '@/types' 会解析为 import { User } from './src/types'
*/
'@': path.resolve(__dirname, './src'),
/**
* 可选:添加其他别名
*/
// '@components': path.resolve(__dirname, './src/components'),
// '@views': path.resolve(__dirname, './src/views')
},
/**
* 扩展名配置
* @description 指定在解析模块时尝试的扩展名
*/
extensions: ['.mjs', '.js', '.ts', '.jsx', '.tsx', '.json', '.vue']
},
/**
* 开发服务器配置
* @description 用于配置 Vite 开发服务器的行为,包括端口、代理等
*/
server: {
/**
* 端口配置
* @description 指定开发服务器监听的端口
*/
port: 3000,
/**
* 主机配置
* @description 指定开发服务器监听的主机
* @default 'localhost'
*/
host: 'localhost',
/**
* 自动打开配置
* @description 设置为 true 时,开发服务器启动后会自动打开浏览器
*/
open: true,
/**
* 热模块替换配置
* @description 配置热模块替换的行为
*/
hmr: {
/**
* 热模块替换主机
* @default 与 server.host 相同
*/
host: 'localhost',
/**
* 热模块替换端口
* @default 与 server.port 相同
*/
port: 3000
},
/**
* 代理配置
* @description 用于配置 API 代理,解决跨域问题
*/
proxy: {
/**
* 代理 /api 路径
* @description 将 /api 开头的请求代理到目标服务器
*/
'/api': {
/**
* 目标服务器地址
* @description 指定代理的目标服务器
*/
target: 'http://localhost:8080',
/**
* 更改源配置
* @description 设置为 true 时,会更改请求头中的 Host 字段为目标地址
*/
changeOrigin: true,
/**
* 路径重写配置
* @description 用于重写请求路径
* @param path 请求路径
* @returns 重写后的路径
*/
rewrite: (path) => path.replace(/^\/api/, ''),
/**
* 安全配置
* @description 设置为 false 时,不验证 SSL 证书
*/
secure: false
},
/**
* 可选:添加其他代理配置
*/
// '/auth': {
// target: 'http://localhost:8081',
// changeOrigin: true
// }
}
},
/**
* 构建配置
* @description 用于配置生产构建的行为,包括输出目录、源码映射等
*/
build: {
/**
* 输出目录配置
* @description 指定构建产物的输出目录
* @default 'dist'
*/
outDir: 'dist',
/**
* 源码映射配置
* @description 设置为 true 时,会生成 source map 文件,便于调试
*/
sourcemap: true,
/**
* 空输出目录配置
* @description 设置为 true 时,在构建前会清空输出目录
* @default true
*/
emptyOutDir: true,
/**
* 资产目录配置
* @description 指定静态资源的输出目录
* @default 'assets'
*/
assetsDir: 'assets',
/**
* 资源内联配置
* @description 配置资源内联的规则
*/
assetsInlineLimit: 4096, // 4KB 以下的资源会被内联
/**
* 最小化配置
* @description 配置代码最小化的行为
*/
minify: 'esbuild', // 使用 esbuild 进行代码最小化
/**
* Rollup 配置
* @description 用于配置底层的 Rollup 构建选项
*/
rollupOptions: {
/**
* 输入配置
* @description 指定构建的入口文件
*/
input: {
/**
* 主入口
*/
main: path.resolve(__dirname, 'index.html')
},
/**
* 输出配置
* @description 用于配置构建输出的行为
*/
output: {
/**
* 手动代码分割配置
* @description 用于将代码分割成多个 chunk,优化加载性能
*/
manualChunks: {
/**
* 第三方库 chunk
* @description 将 vue、vue-router、pinia 等核心库打包到一个 chunk
*/
vendor: ['vue', 'vue-router', 'pinia'],
/**
* UI 库 chunk
* @description 将 ant-design-vue 等 UI 库打包到一个 chunk
*/
ui: ['ant-design-vue'],
/**
* 工具库 chunk
* @description 将 lodash-es 等工具库打包到一个 chunk
*/
utils: ['lodash-es'],
/**
* 路由 chunk
* @description 将路由相关代码打包到一个 chunk
*/
router: ['vue-router']
},
/**
* 块名称格式
* @description 配置 chunk 名称的生成格式
*/
chunkFileNames: 'assets/js/[name]-[hash].js',
/**
* 入口文件名称格式
* @description 配置入口文件的生成格式
*/
entryFileNames: 'assets/js/[name]-[hash].js',
/**
* 资产文件名称格式
* @description 配置静态资产的生成格式
*/
assetFileNames: 'assets/[ext]/[name]-[hash].[ext]'
}
},
/**
* CSS 代码分割配置
* @description 设置为 true 时,会将 CSS 分割到单独的文件中
* @default true
*/
cssCodeSplit: true,
/**
* 目标配置
* @description 指定构建的目标环境
* @default 'modules'
*/
target: 'modules'
},
/**
* ESBuild 配置
* @description 用于配置 ESBuild 的行为,ESBuild 用于快速编译 TypeScript 和 JSX
*/
esbuild: {
/**
* 目标配置
* @description 指定 ESBuild 的目标环境
*/
target: 'es2015',
/**
* 源映射配置
* @description 配置 ESBuild 的源码映射行为
*/
sourcemap: true,
/**
* 字符集配置
* @description 指定 ESBuild 的字符集
* @default 'utf8'
*/
charset: 'utf8',
/**
* 警告配置
* @description 配置 ESBuild 的警告行为
*/
warnings: true
},
/**
* 预览服务器配置
* @description 用于配置 Vite 预览服务器的行为
*/
preview: {
/**
* 端口配置
* @description 指定预览服务器监听的端口
* @default 4173
*/
port: 4173,
/**
* 主机配置
* @description 指定预览服务器监听的主机
* @default 'localhost'
*/
host: 'localhost',
/**
* 自动打开配置
* @description 设置为 true 时,预览服务器启动后会自动打开浏览器
* @default false
*/
open: false
}
})
3.2 @vitejs/plugin-vue-jsx - JSX 支持
插件作用:
- 为 Vue 3 提供 JSX 语法支持
- 允许在 Vue 组件中使用 JSX 语法
- 与 TypeScript 完美集成
安装方法:
bash
npm install --save-dev @vitejs/plugin-vue-jsx
配置方法:
在 vite.config.ts 中添加配置:
typescript
// vite.config.ts
// Vite 配置文件(集成 JSX 插件)
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import vueJsx from '@vitejs/plugin-vue-jsx'
/**
* 定义 Vite 配置
* @returns Vite 配置对象
*/
export default defineConfig({
/**
* 插件配置
* 用于扩展 Vite 的功能
*/
plugins: [
/**
* Vue 插件
* 用于处理 Vue 单文件组件
*/
vue(),
/**
* Vue JSX 插件
* 用于处理 Vue 3 中的 JSX 语法
* 允许在 Vue 组件中使用 JSX 语法
* @param options JSX 插件配置选项
* @returns JSX 插件实例
*/
vueJsx({
/**
* 可选的 JSX 插件配置
* 例如:
* transformOn: true, // 将 on: { click: () => {} } 转换为 onClick: () => {}
* mergeProps: true, // 合并 props
* enableObjectSlots: true // 启用对象形式的 slots
*/
})
]
})
使用示例:
tsx
// src/components/HelloJSX.tsx
// Vue 3 JSX 组件示例
import { defineComponent } from 'vue'
/**
* 组件属性接口
* 定义组件接收的属性类型
*/
interface Props {
/**
* 消息属性
* 用于显示在组件中的消息
*/
msg: string
}
/**
* 定义 JSX 组件
* 使用 defineComponent 创建 Vue 组件
*/
export default defineComponent({
/**
* 组件名称
* 用于在调试和开发者工具中标识组件
*/
name: 'HelloJSX',
/**
* 组件属性定义
* 定义组件接收的属性及其验证规则
*/
props: {
/**
* 消息属性
* 类型为 String,且为必填
*/
msg: {
type: String, // 属性类型
required: true // 是否必填
}
},
/**
* 组件 setup 函数
* 用于设置组件的状态和行为
* @param props 组件属性
* @returns 渲染函数
*/
setup(props: Props) {
/**
* 返回 JSX 渲染函数
* 使用 JSX 语法描述组件的结构
* JSX 语法与 React 类似,但有一些 Vue 特有的差异
* 例如:使用 v-model 指令需要转换为 modelValue 和 onUpdate:modelValue
*/
return () => (
<div>
<h1>Hello JSX!</h1>
<p>{props.msg}</p>
</div>
)
}
})
3.3 vite-plugin-pwa - PWA 支持
插件作用:
- 为应用添加 Progressive Web App 支持
- 生成 Service Worker 和 manifest.json
- 支持离线访问和安装到主屏幕
安装方法:
bash
npm install --save-dev vite-plugin-pwa
配置方法:
在 vite.config.ts 中添加配置:
typescript
// vite.config.ts
// Vite 配置文件(集成 PWA 插件)
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import { VitePWA } from 'vite-plugin-pwa'
/**
* 定义 Vite 配置
* @returns Vite 配置对象
*/
export default defineConfig({
/**
* 插件配置
*/
plugins: [
/**
* Vue 插件
*/
vue(),
/**
* Vite PWA 插件
* @description 为应用添加 Progressive Web App 支持
* @param options PWA 插件配置选项
* @returns PWA 插件实例
*/
VitePWA({
/**
* 注册类型
* @description 配置 Service Worker 的注册方式
* 'autoUpdate' - 自动更新 Service Worker
* 'prompt' - 提示用户更新
*/
registerType: 'autoUpdate',
/**
* 包含的静态资源
* @description 指定需要包含在 PWA 中的静态资源
*/
includeAssets: ['favicon.ico', 'apple-touch-icon.png', 'masked-icon.svg'],
/**
* Web App 清单配置
* @description 配置 PWA 的 manifest.json 文件
*/
manifest: {
/**
* 应用名称
* @description 显示在安装对话框和启动屏幕上的应用名称
*/
name: 'My Vue 3 App',
/**
* 应用简称
* @description 显示在主屏幕上的应用简称
*/
short_name: 'Vue3App',
/**
* 应用描述
* @description 应用的简短描述
*/
description: 'A Vue 3 + TypeScript + Vite + Pinia application',
/**
* 主题颜色
* @description 应用的主题颜色,用于浏览器地址栏等
*/
theme_color: '#ffffff',
/**
* 应用图标
* @description 用于安装到主屏幕和启动屏幕的图标
*/
icons: [
{
/**
* 图标路径
*/
src: 'pwa-192x192.png',
/**
* 图标大小
*/
sizes: '192x192',
/**
* 图标类型
*/
type: 'image/png'
},
{
src: 'pwa-512x512.png',
sizes: '512x512',
type: 'image/png'
},
{
src: 'pwa-maskable-192x192.png',
sizes: '192x192',
type: 'image/png',
/**
* 图标用途
* 'maskable' - 可裁剪的图标,用于不同形状的启动图标
*/
purpose: 'maskable'
}
]
},
/**
* Workbox 配置
* @description 配置 Service Worker 的行为
*/
workbox: {
/**
* 全局模式
* @description 指定需要缓存的文件模式
*/
globPatterns: ['**/*.{js,css,html,ico,png,svg}'],
/**
* 运行时缓存
* @description 配置运行时的缓存策略
*/
runtimeCaching: [
{
/**
* URL 模式
* @description 指定需要缓存的 URL 模式
*/
urlPattern: /^https:\/\/api\.example\.com\//,
/**
* 缓存策略
* @description 指定缓存策略
* 'NetworkFirst' - 优先使用网络请求,失败时使用缓存
* 'CacheFirst' - 优先使用缓存,失败时使用网络请求
* 'StaleWhileRevalidate' - 使用缓存并后台更新
*/
handler: 'NetworkFirst',
/**
* 缓存选项
*/
options: {
/**
* 缓存名称
* @description 指定缓存的名称
*/
cacheName: 'api-cache',
/**
* 过期配置
*/
expiration: {
/**
* 最大缓存条目数
*/
maxEntries: 100,
/**
* 最大缓存时间(秒)
* 60 * 60 * 24 = 1 天
*/
maxAgeSeconds: 60 * 60 * 24 // 1 day
}
}
}
]
}
})
]
})
3.4 vite-plugin-compression - 资源压缩
插件作用:
- 在构建时自动压缩静态资源
- 支持 gzip、brotli 等压缩格式
- 减少文件体积,提高加载速度
安装方法:
bash
npm install --save-dev vite-plugin-compression
配置方法:
在 vite.config.ts 中添加配置:
typescript
// vite.config.ts
// Vite 配置文件(集成压缩插件)
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import compression from 'vite-plugin-compression'
/**
* 定义 Vite 配置
* @returns Vite 配置对象
*/
export default defineConfig({
/**
* 插件配置
* 用于扩展 Vite 的功能
*/
plugins: [
/**
* Vue 插件
* 用于处理 Vue 单文件组件
*/
vue(),
/**
* 压缩插件
* 用于在构建时自动压缩静态资源
* @param options 压缩插件配置选项
* @returns 压缩插件实例
*/
compression({
/**
* 压缩算法
* 指定使用的压缩算法
* 可选值:'gzip' | 'brotliCompress' | 'deflate' | 'deflateRaw'
* 默认值:'gzip'
*/
algorithm: 'gzip',
/**
* 压缩文件扩展名
* 指定压缩后的文件扩展名
* 默认值:'.gz'
*/
ext: '.gz',
/**
* 压缩阈值
* 指定文件大小阈值,超过此阈值的文件才会被压缩
* 单位:字节
* 这里设置为 10KB,即 10240 字节
*/
threshold: 10240, // 10KB 以上才压缩
/**
* 是否删除原始文件
* 设置为 true 时,压缩后会删除原始文件
* 设置为 false 时,会保留原始文件
* 默认值:false
*/
deleteOriginFile: false, // 保留原始文件
/**
* 压缩级别
* 指定压缩级别,值范围为 0-9
* 0: 无压缩,9: 最高压缩率
* 默认值:6
*/
// level: 6,
/**
* 压缩文件的模式
* 指定需要压缩的文件模式
* 默认值:['**/*.{js,css,html,ico,png,svg}']
*/
// include: ['**/*.{js,css,html,ico,png,svg}'],
/**
* 排除压缩的文件模式
* 指定不需要压缩的文件模式
*/
// exclude: ['node_modules/**']
})
]
})
4. 开发提效类插件
4.1 Vue DevTools - 调试工具
插件作用:
- 提供 Vue 3 应用的可视化调试界面
- 支持 Composition API 的状态查看
- 支持 Pinia 状态管理的调试
- 提供组件树、性能分析等功能
安装方法:
bash
# 浏览器扩展安装
# Chrome: 从 Chrome Web Store 安装
# Firefox: 从 Firefox Add-ons 安装
# 或使用 npm 安装(开发依赖)
npm install --save-dev @vue/devtools
使用方法:
在 main.ts 中添加配置:
typescript
// src/main.ts
// Vue 3 应用入口文件
import { createApp } from 'vue'
import App from './App.vue'
import { createPinia } from 'pinia'
/**
* 创建 Vue 应用实例
* 使用 createApp 函数创建 Vue 应用
* @param App 根组件
* @returns Vue 应用实例
*/
const app = createApp(App)
/**
* 创建 Pinia 状态管理实例
* 使用 createPinia 函数创建 Pinia 实例
* @returns Pinia 实例
*/
const pinia = createPinia()
/**
* 使用 Pinia 插件
* 将 Pinia 实例注册到 Vue 应用中
*/
app.use(pinia)
/**
* 在开发环境启用 Vue DevTools
* 通过 import.meta.env.DEV 检查当前环境
* Vue DevTools 是一个浏览器扩展,用于调试 Vue 应用
* 它会自动检测 Vue 应用,无需额外配置
*
* 主要功能:
* 1. 组件树查看:可视化查看应用的组件层次结构
* 2. 状态管理:查看和修改 Pinia 存储的状态
* 3. 事件跟踪:跟踪组件事件和生命周期钩子
* 4. 性能分析:分析组件渲染性能
* 5. 路由调试:查看和管理路由状态
*/
if (import.meta.env.DEV) {
// Vue DevTools 会自动检测 Vue 应用
// 当应用启动时,浏览器扩展会识别并连接到应用
console.log('Vue DevTools enabled in development mode')
/**
* 注意:
* 1. Vue DevTools 仅在开发环境中可用
* 2. 确保已在浏览器中安装 Vue DevTools 扩展
* 3. 对于生产环境构建,Vue DevTools 会自动禁用
*/
}
/**
* 挂载应用
* 将 Vue 应用挂载到 DOM 元素上
* @param '#app' DOM 元素选择器
*/
app.mount('#app')
4.2 pinia-plugin-persistedstate - Pinia 状态持久化
插件作用:
- 为 Pinia store 提供状态持久化功能
- 支持 localStorage、sessionStorage 等存储方式
- 自动序列化和反序列化状态
安装方法:
bash
npm install pinia-plugin-persistedstate
配置方法:
在 main.ts 中添加配置:
typescript
// src/main.ts
// Vue 3 应用入口文件(集成 Pinia 持久化插件)
import { createApp } from 'vue'
import App from './App.vue'
import { createPinia } from 'pinia'
import piniaPluginPersistedstate from 'pinia-plugin-persistedstate'
/**
* 创建 Vue 应用实例
* 使用 createApp 函数创建 Vue 应用
* @param App 根组件
* @returns Vue 应用实例
*/
const app = createApp(App)
/**
* 创建 Pinia 状态管理实例
* 使用 createPinia 函数创建 Pinia 实例
* @returns Pinia 实例
*/
const pinia = createPinia()
/**
* 使用 Pinia 持久化插件
* 将 pinia-plugin-persistedstate 插件注册到 Pinia 实例中
* 该插件用于实现 Pinia store 状态的持久化
*/
pinia.use(piniaPluginPersistedstate)
/**
* 使用 Pinia 插件
* 将 Pinia 实例注册到 Vue 应用中
*/
app.use(pinia)
/**
* 挂载应用
* 将 Vue 应用挂载到 DOM 元素上
* @param '#app' DOM 元素选择器
*/
app.mount('#app')
使用示例:
typescript
// src/stores/user.ts
// Pinia 用户状态管理 store
import { defineStore } from 'pinia'
import { ref } from 'vue'
/**
* 用户接口定义
* 描述用户对象的结构
*/
interface User {
/**
* 用户 ID
*/
id: number
/**
* 用户名
*/
name: string
/**
* 用户邮箱
*/
email: string
}
/**
* 定义用户状态管理 store
* @returns 用户状态管理 store
*/
export const useUserStore = defineStore('user', () => {
/**
* 当前用户状态
* 使用 ref 创建响应式引用
*/
const currentUser = ref<User | null>(null)
/**
* 用户认证令牌
* 使用 ref 创建响应式引用
*/
const token = ref<string | null>(null)
/**
* 设置用户信息
* @param user 用户信息
* @param userToken 用户认证令牌
*/
function setUser(user: User, userToken: string) {
currentUser.value = user
token.value = userToken
}
/**
* 用户登出
* 清空用户信息和认证令牌
*/
function logout() {
currentUser.value = null
token.value = null
}
/**
* 返回 store 的状态和方法
* 这些状态和方法可以在组件中使用
*/
return {
currentUser, // 当前用户状态
token, // 用户认证令牌
setUser, // 设置用户信息方法
logout // 用户登出方法
}
}, {
/**
* 持久化配置
* 用于配置 store 状态的持久化
*/
persist: {
/**
* 存储键名
* 用于在存储中标识此 store 的数据
*/
key: 'user-storage',
/**
* 存储方式
* 可以是 localStorage、sessionStorage 或自定义存储
*/
storage: localStorage,
/**
* 持久化路径
* 指定哪些状态需要被持久化
*/
paths: ['currentUser', 'token']
}
})
4.3 vue-router - 路由管理
插件作用:
- 为 Vue 3 应用提供路由管理功能
- 支持动态路由、嵌套路由等高级特性
- 与 Composition API 完美集成
- 与 TypeScript 类型安全集成
安装方法:
bash
npm install vue-router@4
配置方法:
创建 src/router/index.ts 文件:
typescript
// src/router/index.ts
// Vue Router 配置文件
import { createRouter, createWebHistory, RouteRecordRaw } from 'vue-router'
/**
* 路由元信息接口
* 用于定义路由的额外信息
*/
interface RouteMeta {
/**
* 是否需要认证
* 设置为 true 时,访问该路由需要登录
*/
requiresAuth?: boolean
/**
* 页面标题
* 用于设置页面的 document.title
*/
title?: string
/**
* 角色权限
* 用于控制不同角色对路由的访问权限
*/
roles?: string[]
}
/**
* 扩展的路由记录类型
* 集成自定义的元信息接口
*/
type AppRouteRecordRaw = RouteRecordRaw & {
/**
* 路由元信息
*/
meta?: RouteMeta
/**
* 子路由
*/
children?: AppRouteRecordRaw[]
}
/**
* 路由配置数组
* 定义应用的所有路由
*/
const routes: AppRouteRecordRaw[] = [
{
/**
* 路由路径
*/
path: '/',
/**
* 路由名称
* 用于通过名称导航到该路由
*/
name: 'Home',
/**
* 路由组件
* 使用动态导入实现懒加载
*/
component: () => import('@/views/Home.vue'),
/**
* 路由元信息
*/
meta: {
title: '首页' // 页面标题
}
},
{
path: '/dashboard',
name: 'Dashboard',
component: () => import('@/views/Dashboard.vue'),
meta: {
requiresAuth: true, // 需要认证
title: '仪表盘', // 页面标题
roles: ['admin', 'user'] // 允许访问的角色
}
},
{
path: '/login',
name: 'Login',
component: () => import('@/views/Login.vue'),
meta: {
title: '登录' // 页面标题
}
}
]
/**
* 创建路由实例
*/
const router = createRouter({
/**
* 路由历史模式
* createWebHistory() - 使用 HTML5 History API
* createWebHashHistory() - 使用 URL hash
* createMemoryHistory() - 使用内存历史(用于测试)
*/
history: createWebHistory(),
/**
* 路由配置
*/
routes
})
/**
* 全局前置守卫
* 在路由跳转前执行
*/
router.beforeEach((to, from, next) => {
/**
* 设置页面标题
* 如果路由有 title 元信息,则设置 document.title
*/
if (to.meta.title) {
document.title = `${to.meta.title} - My App`
}
/**
* 权限检查
* 如果路由需要认证且用户未登录,则重定向到登录页
*/
const requiresAuth = to.meta.requiresAuth
const token = localStorage.getItem('token')
if (requiresAuth && !token) {
// 未登录,重定向到登录页
next({ name: 'Login' })
} else {
// 已登录或不需要认证,继续导航
next()
}
})
/**
* 导出路由实例
*/
export default router
使用方法:
在 main.ts 中添加配置:
typescript
// src/main.ts
import { createApp } from 'vue'
import App from './App.vue'
import { createPinia } from 'pinia'
import router from './router'
const app = createApp(App)
const pinia = createPinia()
app.use(pinia)
app.use(router)
app.mount('#app')
5. 代码质量类插件
5.1 @typescript-eslint/eslint-plugin - TypeScript ESLint 插件
插件作用:
- 为 TypeScript 代码提供 ESLint 规则检查
- 检测 TypeScript 特有的代码问题
- 与 Vue 3 完美集成
安装方法:
bash
npm install --save-dev @typescript-eslint/eslint-plugin @typescript-eslint/parser
配置方法:
在 .eslintrc.js 中添加配置:
javascript
// .eslintrc.js
// ESLint 配置文件(TypeScript 规则部分)
/**
* ESLint 配置对象
* 用于检查 TypeScript 代码中的语法错误和潜在问题
*/
module.exports = {
/**
* 解析器配置
* 指定 ESLint 使用的解析器
* @typescript-eslint/parser 是专门用于解析 TypeScript 代码的解析器
*/
parser: '@typescript-eslint/parser',
/**
* 插件配置
* 指定 ESLint 使用的插件
* @typescript-eslint 插件提供了 TypeScript 特有的 ESLint 规则
*/
plugins: ['@typescript-eslint'],
/**
* 扩展配置
* 继承其他 ESLint 配置
*/
extends: [
/**
* ESLint 推荐规则
* 使用 ESLint 官方推荐的规则集
*/
'eslint:recommended',
/**
* TypeScript ESLint 推荐规则
* 使用 @typescript-eslint 官方推荐的规则集
*/
'@typescript-eslint/recommended',
/**
* Vue TypeScript 推荐规则
* 使用 @vue/eslint-config-typescript 推荐的规则集
*/
'@vue/typescript/recommended'
],
/**
* 自定义规则
* 覆盖或添加自定义 ESLint 规则
*/
rules: {
/**
* 禁止使用 any 类型
* 设置为 'error' 时,使用 any 类型会报错
* 这有助于提高代码的类型安全性
*/
'@typescript-eslint/no-explicit-any': 'error',
/**
* 不强制函数返回类型
* 设置为 'off' 时,不强制要求显式声明函数返回类型
* 允许 TypeScript 自动推断函数返回类型
*/
'@typescript-eslint/explicit-function-return-type': 'off',
/**
* 不强制模块边界类型
* 设置为 'off' 时,不强制要求显式声明模块导出类型
* 允许 TypeScript 自动推断模块导出类型
*/
'@typescript-eslint/explicit-module-boundary-types': 'off',
/**
* 禁止未使用的变量
* 设置为 'error' 时,未使用的变量会报错
* 配置了忽略以下划线开头的参数和变量
*/
'@typescript-eslint/no-unused-vars': ['error', {
/**
* 忽略以下划线开头的参数
* 使用正则表达式匹配以下划线开头的参数名
*/
argsIgnorePattern: '^_',
/**
* 忽略以下划线开头的变量
* 使用正则表达式匹配以下划线开头的变量名
*/
varsIgnorePattern: '^_'
}]
}
}
5.2 eslint-plugin-vue - Vue ESLint 插件
插件作用:
- 为 Vue 单文件组件提供 ESLint 规则检查
- 检测 Vue 特有的代码问题
- 支持 Vue 3 的新特性和语法
安装方法:
bash
npm install --save-dev eslint-plugin-vue
配置方法:
在 .eslintrc.js 中添加配置:
javascript
// .eslintrc.js
// ESLint 配置文件(Vue 规则部分)
/**
* ESLint 配置对象
* 用于检查 Vue 组件代码中的语法错误和潜在问题
*/
module.exports = {
/**
* 扩展配置
* 继承其他 ESLint 配置
*/
extends: [
/**
* Vue 3 推荐规则
* 使用 eslint-plugin-vue 官方推荐的 Vue 3 规则集
* 包含了一系列针对 Vue 3 单文件组件的最佳实践规则
*/
'plugin:vue/vue3-recommended'
],
/**
* 自定义规则
* 覆盖或添加自定义 ESLint 规则
*/
rules: {
/**
* 脚本设置使用变量
* 确保在 <script setup> 中声明的变量被使用
* 设置为 'error' 时,未使用的变量会报错
*/
'vue/script-setup-uses-vars': 'error',
/**
* 禁止未使用的组件
* 确保在模板中使用的组件都被正确导入
* 设置为 'error' 时,未使用的组件会报错
*/
'vue/no-unused-components': 'error',
/**
* 禁止未使用的变量
* 确保在组件中声明的变量被使用
* 设置为 'error' 时,未使用的变量会报错
*/
'vue/no-unused-vars': 'error',
/**
* 属性连字符命名
* 确保 HTML 属性使用连字符命名法(kebab-case)
* 设置为 'error' 时,未使用连字符命名的属性会报错
*/
'vue/attribute-hyphenation': 'error',
/**
* 要求默认属性值
* 设置为 'off' 时,不强制要求为 props 提供默认值
* 这在某些情况下可以简化代码
*/
'vue/require-default-prop': 'off',
/**
* 多单词组件名称
* 设置为 'off' 时,不强制要求组件名称使用多单词命名
* 这在某些情况下可以使用更简洁的组件名称
*/
'vue/multi-word-component-names': 'off'
}
}
5.3 prettier-plugin-tailwindcss - Tailwind CSS 格式化
插件作用:
- 为 Tailwind CSS 类名提供自动排序和格式化
- 保持 Tailwind CSS 类名的一致性
- 与 Prettier 完美集成
安装方法:
bash
npm install --save-dev prettier-plugin-tailwindcss
配置方法:
在 .prettierrc.js 中添加配置:
javascript
// .prettierrc.js
// Prettier 配置文件(Tailwind CSS 格式化部分)
/**
* Prettier 配置对象
* 用于自动格式化代码,保持代码风格一致
*/
module.exports = {
/**
* 插件配置
* 指定 Prettier 使用的插件
* prettier-plugin-tailwindcss 插件用于自动排序和格式化 Tailwind CSS 类名
*/
plugins: ['prettier-plugin-tailwindcss'],
/**
* Tailwind 配置文件路径
* 指定 Tailwind CSS 的配置文件路径
* 这有助于插件正确识别自定义的 Tailwind 配置
* 默认值:'./tailwind.config.js'
*/
tailwindConfig: './tailwind.config.js',
/**
* 其他 Prettier 配置选项
* 可以在这里添加其他 Prettier 配置,例如:
* semi: false, // 不使用分号
* singleQuote: true, // 使用单引号
* printWidth: 80, // 打印宽度
* tabWidth: 2 // 缩进宽度
*/
}
使用示例:
vue
<template>
<!-- 格式化前 -->
<div class="bg-blue-500 text-white p-4 rounded-md shadow-md flex items-center justify-between">
<h1>Hello</h1>
<button class="bg-white text-blue-500 px-4 py-2 rounded-md">Click</button>
</div>
<!-- 格式化后 -->
<div class="flex items-center justify-between rounded-md bg-blue-500 px-4 py-4 text-white shadow-md">
<h1>Hello</h1>
<button class="rounded-md bg-white px-4 py-2 text-blue-500">Click</button>
</div>
</template>
6. 测试类插件
6.1 Vitest - 测试框架
插件作用:
- 与 Vite 集成的极速测试框架
- 支持单元测试、集成测试和端到端测试
- 与 TypeScript 完美集成
- 支持 Vue 组件测试
安装方法:
bash
npm install --save-dev vitest @vue/test-utils
配置方法:
创建 vitest.config.ts 文件:
typescript
// vitest.config.ts
// Vitest 配置文件
import { defineConfig } from 'vitest/config'
import vue from '@vitejs/plugin-vue'
import path from 'path'
/**
* 定义 Vitest 配置
* @returns Vitest 配置对象
*/
export default defineConfig({
/**
* 插件配置
* 用于扩展 Vitest 的功能
*/
plugins: [
/**
* Vue 插件
* 用于处理 Vue 单文件组件
*/
vue()
],
/**
* 解析配置
* 用于配置模块解析规则
*/
resolve: {
/**
* 路径别名配置
* 与 Vite 配置保持一致
*/
alias: {
'@': path.resolve(__dirname, './src')
}
},
/**
* 测试配置
* 用于配置测试环境和行为
*/
test: {
/**
* 测试环境
* 'happy-dom' - 轻量级的 DOM 实现,用于模拟浏览器环境
* 'jsdom' - 更完整的 DOM 实现
* 'node' - Node.js 环境
*/
environment: 'happy-dom',
/**
* 全局变量配置
* 设置为 true 时,测试文件中可以直接使用 describe、it、expect 等全局变量
*/
globals: true,
/**
* 覆盖率配置
* 用于配置测试覆盖率报告
*/
coverage: {
/**
* 覆盖率报告格式
* 'text' - 文本格式
* 'json' - JSON 格式
* 'html' - HTML 格式
*/
reporter: ['text', 'json', 'html'],
/**
* 覆盖率阈值配置
* 可以设置不同指标的最低覆盖率要求
*/
thresholds: {
lines: 80, // 行覆盖率
functions: 80, // 函数覆盖率
branches: 70, // 分支覆盖率
statements: 80 // 语句覆盖率
}
},
/**
* 测试文件匹配模式
* 用于指定哪些文件是测试文件
*/
include: [
'src/**/*.spec.{ts,tsx,vue}',
'src/**/*.test.{ts,tsx,vue}',
'tests/**/*.{ts,tsx,vue}'
],
/**
* 测试文件排除模式
* 用于指定哪些文件不是测试文件
*/
exclude: [
'node_modules',
'dist',
'build'
],
/**
* 测试设置文件
* 用于在测试前执行一些设置操作
*/
setupFiles: ['./tests/setup.ts']
}
})
使用示例:
typescript
// src/components/__tests__/HelloWorld.spec.ts
import { describe, it, expect } from 'vitest'
import { mount } from '@vue/test-utils'
import HelloWorld from '../HelloWorld.vue'
describe('HelloWorld Component', () => {
it('renders correctly with props', () => {
const msg = 'Hello Vitest'
const wrapper = mount(HelloWorld, {
props: {
msg
}
})
expect(wrapper.text()).toContain(msg)
})
it('emits click event when button is clicked', async () => {
const wrapper = mount(HelloWorld)
await wrapper.find('button').trigger('click')
expect(wrapper.emitted('click')).toBeTruthy()
})
})
6.2 @testing-library/vue - 测试库
插件作用:
- 提供用户行为驱动的测试方法
- 鼓励编写更符合用户使用场景的测试
- 与 Vue 3 完美集成
- 支持 TypeScript
安装方法:
bash
npm install --save-dev @testing-library/vue @testing-library/jest-dom
配置方法:
在 vitest.config.ts 中添加配置:
typescript
// vitest.config.ts
import { defineConfig } from 'vitest/config'
export default defineConfig({
test: {
setupFiles: ['./tests/setup.ts']
}
})
创建 tests/setup.ts 文件:
typescript
// tests/setup.ts
// 测试设置文件
/**
* 导入 @testing-library/jest-dom
* 为 Jest 提供 DOM 匹配器,如 toBeInTheDocument() 等
* 用于在测试中进行 DOM 元素的断言
*/
import '@testing-library/jest-dom'
/**
* 全局测试设置
* 可以在这里添加其他测试全局配置
* 例如:
* - 模拟全局变量
* - 设置测试环境
* - 配置测试工具
*/
// 示例:模拟全局 fetch 函数
// if (!global.fetch) {
// global.fetch = vi.fn() as any
// }
// 示例:设置测试超时时间
// vi.setDefaultTimeout(10000)
使用示例:
typescript
// src/components/__tests__/HelloWorld.test.ts
import { describe, it, expect } from 'vitest'
import { render, screen, fireEvent } from '@testing-library/vue'
import HelloWorld from '../HelloWorld.vue'
describe('HelloWorld Component', () => {
it('renders greeting', () => {
render(HelloWorld, {
props: {
msg: 'Hello Testing Library'
}
})
expect(screen.getByText('Hello Testing Library')).toBeInTheDocument()
})
it('triggers click event', async () => {
const { emitted } = render(HelloWorld)
await fireEvent.click(screen.getByRole('button'))
expect(emitted('click')).toBeTruthy()
})
})
7. 部署类插件
7.1 @vitejs/plugin-legacy - 传统浏览器支持
插件作用:
- 为传统浏览器提供兼容性支持
- 自动生成现代和传统版本的代码
- 支持 IE11 等旧浏览器
安装方法:
bash
npm install --save-dev @vitejs/plugin-legacy
配置方法:
在 vite.config.ts 中添加配置:
typescript
// vite.config.ts
// Vite 配置文件(集成传统浏览器支持插件)
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import legacy from '@vitejs/plugin-legacy'
/**
* 定义 Vite 配置
* @returns Vite 配置对象
*/
export default defineConfig({
/**
* 插件配置
* 用于扩展 Vite 的功能
*/
plugins: [
/**
* Vue 插件
* 用于处理 Vue 单文件组件
*/
vue(),
/**
* 传统浏览器支持插件
* 用于为传统浏览器提供兼容性支持
* 自动生成现代和传统版本的代码
* @param options 传统浏览器支持插件配置选项
* @returns 传统浏览器支持插件实例
*/
legacy({
/**
* 目标浏览器配置
* 指定需要支持的浏览器
* 可以使用浏览器列表查询字符串或数组
* 这里设置为支持默认浏览器和非 IE 11 浏览器
*/
targets: ['defaults', 'not IE 11'],
/**
* 额外的传统浏览器 polyfills
* 指定需要添加的额外 polyfills
* regenerator-runtime/runtime 用于支持 async/await 语法
*/
additionalLegacyPolyfills: ['regenerator-runtime/runtime'],
/**
* 现代构建配置
* 设置为 true 时,会生成现代版本的代码
* 默认值:true
*/
// modernPolyfills: true,
/**
* 渲染现代构建的脚本标签
* 设置为 true 时,会在 HTML 中渲染现代构建的脚本标签
* 默认值:true
*/
// renderModernChunks: true,
/**
* 最低支持的 ES 版本
* 指定传统构建的最低 ES 版本
* 默认值:'es5'
*/
// polyfills: ['es.array.iterator', 'es.promise', 'es.object.assign']
})
]
})
7.2 vite-plugin-sitemap - 站点地图生成
插件作用:
- 自动生成网站的 sitemap.xml 文件
- 帮助搜索引擎更好地索引网站内容
- 支持动态路由和自定义配置
安装方法:
bash
npm install --save-dev vite-plugin-sitemap
配置方法:
在 vite.config.ts 中添加配置:
typescript
// vite.config.ts
// Vite 配置文件(集成站点地图生成插件)
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import { sitemap } from 'vite-plugin-sitemap'
/**
* 定义 Vite 配置
* @returns Vite 配置对象
*/
export default defineConfig({
/**
* 插件配置
* 用于扩展 Vite 的功能
*/
plugins: [
/**
* Vue 插件
* 用于处理 Vue 单文件组件
*/
vue(),
/**
* 站点地图生成插件
* 用于自动生成网站的 sitemap.xml 文件
* 帮助搜索引擎更好地索引网站内容
* @param options 站点地图生成插件配置选项
* @returns 站点地图生成插件实例
*/
sitemap({
/**
* 主机名配置
* 指定网站的主机名
* 这是生成的 sitemap.xml 文件中 URL 的基础部分
* 请替换为您实际的网站域名
*/
hostname: 'https://example.com',
/**
* 路由配置
* 指定需要包含在站点地图中的路由
* 可以是静态路由数组或动态生成的路由
* 这里列出了示例路由
*/
routes: [
'/', // 首页
'/about', // 关于页面
'/contact', // 联系页面
'/products', // 产品列表页
'/products/1', // 产品详情页 1
'/products/2' // 产品详情页 2
],
/**
* 输出路径配置
* 指定生成的 sitemap.xml 文件的输出路径
* 默认值:'sitemap.xml'
*/
// outFile: 'sitemap.xml',
/**
* 变更频率配置
* 指定页面的变更频率
* 可选值:'always' | 'hourly' | 'daily' | 'weekly' | 'monthly' | 'yearly' | 'never'
* 默认值:'daily'
*/
// changefreq: 'daily',
/**
* 优先级配置
* 指定页面的优先级
* 值范围:0.0 - 1.0
* 默认值:0.5
*/
// priority: 0.5,
/**
* 生成模式配置
* 指定生成模式
* 可选值:'build' | 'serve'
* 默认值:'build'
*/
// generateOnBuild: true
})
]
})
8. 总结与推荐插件组合
8.1 核心插件组合
开发必备插件:
- Volar + TypeScript Vue Plugin (Volar):Vue 3 + TS 开发的核心工具
- ESLint + Prettier:代码质量和格式化
- Vite + @vitejs/plugin-vue:构建工具核心
- Pinia + pinia-plugin-persistedstate:状态管理
- Vue Router:路由管理
- Vitest + @vue/test-utils:测试框架
构建优化插件:
- vite-plugin-compression:资源压缩
- @vitejs/plugin-legacy:传统浏览器支持
- vite-plugin-pwa:PWA 支持
8.2 推荐的开发环境配置
package.json 脚本配置:
json
// package.json
// 项目配置文件(脚本部分)
{
"scripts": {
/**
* 开发服务器启动脚本
* 使用 Vite 启动开发服务器
*/
"dev": "vite",
/**
* 生产构建脚本
* 1. 先运行 vue-tsc --noEmit 进行类型检查
* 2. 然后运行 vite build 进行生产构建
*/
"build": "vue-tsc --noEmit && vite build",
/**
* 预览构建结果脚本
* 使用 Vite 预览生产构建的结果
*/
"preview": "vite preview",
/**
* 运行测试脚本
* 使用 Vitest 运行测试
*/
"test": "vitest",
/**
* 运行测试并生成覆盖率报告脚本
* 使用 Vitest 运行测试并生成覆盖率报告
*/
"test:coverage": "vitest run --coverage",
/**
* 代码检查脚本
* 使用 ESLint 检查代码并自动修复
* 检查所有支持的文件扩展名
*/
"lint": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore",
/**
* 代码格式化脚本
* 使用 Prettier 格式化所有文件
*/
"format": "prettier --write .",
/**
* 类型检查脚本
* 使用 vue-tsc 进行 TypeScript 类型检查
* --noEmit 表示只进行类型检查,不生成编译产物
*/
"type-check": "vue-tsc --noEmit"
}
}
8.3 最佳实践建议
- 按需安装插件:根据项目需求选择必要的插件,避免过度安装
- 保持插件更新:定期更新插件版本,获取新特性和 bug 修复
- 统一配置规范:在团队中建立统一的插件配置规范
- 集成 CI/CD:在 CI/CD 流程中集成代码检查和测试
- 持续优化:根据项目实际情况,持续优化插件配置
9. 附录:插件版本兼容性表
| 插件名称 | 推荐版本 | 兼容的 Vue 版本 | 兼容的 TypeScript 版本 |
|---|---|---|---|
| Volar | v1.8.0+ | Vue 3.0+ | TypeScript 4.5+ |
| ESLint | v8.40.0+ | Vue 3.0+ | TypeScript 4.5+ |
| Prettier | v3.0.0+ | Vue 3.0+ | TypeScript 4.5+ |
| Vite | v4.3.0+ | Vue 3.0+ | TypeScript 4.5+ |
| Pinia | v2.1.0+ | Vue 3.0+ | TypeScript 4.5+ |
| Vue Router | v4.2.0+ | Vue 3.0+ | TypeScript 4.5+ |
| Vitest | v0.31.0+ | Vue 3.0+ | TypeScript 4.5+ |
| @vitejs/plugin-vue | v4.2.0+ | Vue 3.0+ | TypeScript 4.5+ |
| @vitejs/plugin-vue-jsx | v3.0.0+ | Vue 3.0+ | TypeScript 4.5+ |
通过合理使用这些插件,你可以显著提升 Vue 3 + TS + Vite + Pinia 项目的开发效率和代码质量,打造更加专业、高效的前端开发环境。