主题开发工具
工欲善其事,必先利其器。本文档将介绍 VitePress 主题开发中常用的工具、插件和配置,帮助你提高开发效率。
版本说明
- 本文档基于 VitePress v1.0.0+ 编写
- 推荐使用 VS Code 作为主要开发工具
- 列出工具均为免费或开源工具
VS Code 扩展
必备扩展
1. Vue - Official (Vue Language Features, Volar)
json
// 扩展 ID
Vue.volar功能:
- Vue 3 语法高亮
- TypeScript 支持
- 智能提示
- 错误检测
2. VitePress Snippets
json
// 扩展 ID
dingyi.code-snippets功能:
- VitePress 代码片段
- 快速创建模板
- 提高编码效率
3. Markdown All in One
json
// 扩展 ID
yzhang.markdown-all-in-one功能:
- Markdown 快捷键
- 实时预览
- 目录生成
4. MDX
json
// 扩展 ID
unifiedjs.vscode-mdx功能:
- MDX 语法支持
- JSX 高亮
推荐扩展
5. ESLint
json
// 扩展 ID
dbaeumer.vscode-eslint功能:
- JavaScript/TypeScript 代码检查
- 自动修复
6. Prettier
json
// 扩展 ID
esbenp.prettier-vscode功能:
- 代码格式化
- 支持多种语言
7. Tailwind CSS IntelliSense
json
// 扩展 ID
bradlc.vscode-tailwindcss功能:
- Tailwind CSS 智能提示
- 类名自动补全
8. Error Lens
json
// 扩展 ID
usernamehw.errorlens功能:
- 行内显示错误
- 快速定位问题
9. Path Intellisense
json
// 扩展 ID
christian-kohler.path-intellisense功能:
- 路径自动补全
- 图片路径提示
10. Auto Rename Tag
json
// 扩展 ID
formulahendry.auto-rename-tag功能:
- 自动重命名配对标签
- HTML/Vue 标签修改
VS Code 配置
json
// .vscode/settings.json
{
// 编辑器设置
"editor.formatOnSave": true,
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.codeActionsOnSave": {
"source.fixAll.eslint": "explicit"
},
// Vue 设置
"[vue]": {
"editor.defaultFormatter": "Vue.volar"
},
// TypeScript 设置
"[typescript]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
// Markdown 设置
"[markdown]": {
"editor.defaultFormatter": "yzhang.markdown-all-in-one",
"editor.wordWrap": "on",
"editor.quickSuggestions": {
"other": true,
"comments": false,
"strings": true
}
},
// 文件关联
"files.associations": {
"*.md": "markdown",
"*.vue": "vue"
},
// Volar 设置
"volar.takeOverMode.enabled": true,
"volar.completion.preferredTagNameCase": "kebab",
"volar.completion.preferredAttrNameCase": "kebab"
}json
// .vscode/extensions.json
{
"recommendations": [
"Vue.volar",
"dbaeumer.vscode-eslint",
"esbenp.prettier-vscode",
"yzhang.markdown-all-in-one",
"usernamehw.errorlens"
]
}代码质量工具
ESLint 配置
bash
# 安装依赖
npm install -D eslint @eslint/js typescript-eslint eslint-plugin-vuejavascript
// eslint.config.js
import js from '@eslint/js'
import tseslint from 'typescript-eslint'
import vue from 'eslint-plugin-vue'
export default [
js.configs.recommended,
...tseslint.configs.recommended,
...vue.configs['flat/recommended'],
{
files: ['**/*.vue'],
languageOptions: {
parserOptions: {
parser: tseslint.parser
}
}
},
{
rules: {
// 自定义规则
'vue/multi-word-component-names': 'off',
'vue/no-v-html': 'warn',
'@typescript-eslint/no-unused-vars': 'error',
'@typescript-eslint/no-explicit-any': 'warn'
}
},
{
ignores: [
'node_modules/**',
'dist/**',
'.vitepress/dist/**',
'.vitepress/cache/**'
]
}
]Prettier 配置
bash
# 安装依赖
npm install -D prettier eslint-config-prettierjson
// .prettierrc
{
"semi": false,
"singleQuote": true,
"tabWidth": 2,
"trailingComma": "none",
"printWidth": 100,
"vueIndentScriptAndStyle": true,
"endOfLine": "lf"
}json
// .prettierignore
node_modules
dist
.vitepress/dist
.vitepress/cache
*.mdTypeScript 配置
json
// tsconfig.json
{
"compilerOptions": {
"target": "ESNext",
"module": "ESNext",
"moduleResolution": "bundler",
"strict": true,
"jsx": "preserve",
"importHelpers": true,
"experimentalDecorators": true,
"strictFunctionTypes": true,
"noImplicitAny": true,
"skipLibCheck": true,
"esModuleInterop": true,
"allowSyntheticDefaultImports": true,
"forceConsistentCasingInFileNames": true,
"resolveJsonModule": true,
"isolatedModules": true,
"types": ["vitepress/client"],
"paths": {
"@/*": ["./src/*"]
}
},
"include": [
".vitepress/**/*.ts",
".vitepress/**/*.vue",
"src/**/*.ts",
"src/**/*.vue"
],
"exclude": [
"node_modules",
"dist"
]
}开发工具
Vite 插件
1. vite-plugin-inspect
bash
npm install -D vite-plugin-inspecttypescript
// .vitepress/config.ts
import Inspect from 'vite-plugin-inspect'
export default defineConfig({
vite: {
plugins: [
Inspect() // http://localhost:5173/__inspect/
]
}
})2. vite-plugin-vue-devtools
bash
npm install -D vite-plugin-vue-devtoolstypescript
// .vitepress/config.ts
import VueDevTools from 'vite-plugin-vue-devtools'
export default defineConfig({
vite: {
plugins: [
VueDevTools()
]
}
})3. vite-plugin-compression
bash
npm install -D vite-plugin-compressiontypescript
// .vitepress/config.ts
import viteCompression from 'vite-plugin-compression'
export default defineConfig({
vite: {
plugins: [
viteCompression({
algorithm: 'gzip',
ext: '.gz'
})
]
}
})Markdown 插件
1. markdown-it-katex
bash
npm install -D markdown-it-katextypescript
// .vitepress/config.ts
import katex from 'markdown-it-katex'
export default defineConfig({
markdown: {
config: (md) => {
md.use(katex)
}
}
})2. markdown-it-emoji
bash
npm install -D markdown-it-emojitypescript
// .vitepress/config.ts
import emoji from 'markdown-it-emoji'
export default defineConfig({
markdown: {
config: (md) => {
md.use(emoji)
}
}
})图标工具
1. Iconify
bash
npm install -D @iconify/json @iconify/utilstypescript
// 使用图标
import { icons } from '@iconify/json'
// 在配置中使用
{
text: '🏠 首页',
link: '/'
}2. unplugin-icons
bash
npm install -D unplugin-iconstypescript
// .vitepress/config.ts
import Icons from 'unplugin-icons/vite'
export default defineConfig({
vite: {
plugins: [
Icons({
compiler: 'vue3',
autoInstall: true
})
]
}
})vue
<!-- 使用 -->
<script setup>
import IconHome from '~icons/mdi/home'
</script>
<template>
<IconHome />
</template>调试工具
Vue DevTools
bash
# 浏览器扩展
# Chrome: https://chrome.google.com/webstore/detail/vuejs-devtools/nhdogjmejiglipccpnnnanhbledajbpd
# Firefox: https://addons.mozilla.org/en-US/firefox/addon/vue-js-devtools/功能:
- 组件树查看
- 状态调试
- 性能分析
- 路由检查
Chrome DevTools
快捷键
F12 - 打开开发者工具
Ctrl+Shift+I (Mac: Cmd+Opt+I) - 打开开发者工具
Ctrl+Shift+C (Mac: Cmd+Opt+C) - 元素选择器
Ctrl+Shift+J (Mac: Cmd+Opt+J) - 控制台
Ctrl+Shift+M (Mac: Cmd+Opt+M) - 设备模拟有用的控制台命令
javascript
// 查看当前页面信息
console.log('当前路径:', window.location.pathname)
// 性能分析
console.time('操作')
// ... 执行代码
console.timeEnd('操作')
// 查看所有 Vue 实例
document.querySelectorAll('[data-v-app]')
// 检查内存使用
console.log('内存使用:', performance.memory)命令行工具
concurrently
并行运行多个命令:
bash
npm install -D concurrentlyjson
// package.json
{
"scripts": {
"dev": "concurrently \"npm run dev:vite\" \"npm run dev:theme\"",
"dev:vite": "vitepress dev",
"dev:theme": "vite build --watch"
}
}nodemon
监听文件变化:
bash
npm install -D nodemonjson
// package.json
{
"scripts": {
"dev:watch": "nodemon --watch .vitepress --exec 'vitepress dev'"
}
}rimraf
跨平台删除:
bash
npm install -D rimrafjson
// package.json
{
"scripts": {
"clean": "rimraf dist .vitepress/dist .vitepress/cache"
}
}实用脚本
自动生成页面
javascript
// scripts/create-page.js
import fs from 'fs'
import path from 'path'
import readline from 'readline'
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
})
rl.question('页面标题: ', (title) => {
const fileName = title
.toLowerCase()
.replace(/\s+/g, '-')
.replace(/[^\w-]/g, '')
const content = `---
title: ${title}
---
# ${title}
内容...
`
const filePath = path.join(process.cwd(), 'docs', `${fileName}.md`)
fs.writeFileSync(filePath, content)
console.log(`✅ 页面已创建: ${filePath}`)
rl.close()
})批量处理图片
javascript
// scripts/optimize-images.js
import sharp from 'sharp'
import glob from 'fast-glob'
async function optimizeImages() {
const images = await glob('docs/public/**/*.{jpg,jpeg,png}')
for (const image of images) {
const outputPath = image.replace(/\.(jpg|jpeg|png)$/, '.webp')
await sharp(image)
.webp({ quality: 80 })
.toFile(outputPath)
console.log(`✅ 已优化: ${outputPath}`)
}
}
optimizeImages()生成 sitemap
javascript
// scripts/generate-sitemap.js
import fs from 'fs'
import glob from 'fast-glob'
async function generateSitemap() {
const pages = await glob('docs/**/*.md')
const urls = pages
.map(page => page
.replace('docs/', '/')
.replace('.md', '/')
.replace('/index/', '/')
)
.filter(url => !url.includes('__tests__'))
const sitemap = `<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
${urls.map(url => ` <url>
<loc>https://your-domain.com${url}</loc>
<lastmod>${new Date().toISOString().split('T')[0]}</lastmod>
</url>`).join('\n')}
</urlset>`
fs.writeFileSync('docs/public/sitemap.xml', sitemap)
console.log('✅ Sitemap 已生成')
}
generateSitemap()包管理器
npm
bash
# 常用命令
npm install # 安装依赖
npm install package-name # 安装包
npm install -D package-name # 安装开发依赖
npm update # 更新依赖
npm outdated # 检查过期依赖
npm audit # 安全审计
npm run script-name # 运行脚本pnpm(推荐)
bash
# 安装
npm install -g pnpm
# 常用命令
pnpm install # 安装依赖
pnpm add package-name # 安装包
pnpm add -D package-name # 安装开发依赖
pnpm update # 更新依赖
pnpm outdated # 检查过期依赖
pnpm audit # 安全审计yarn
bash
# 常用命令
yarn # 安装依赖
yarn add package-name # 安装包
yarn add -D package-name # 安装开发依赖
yarn upgrade # 更新依赖
yarn outdated # 检查过期依赖在线工具
设计工具
开发工具
- CodeSandbox - 在线 IDE
- StackBlitz - 在线开发环境
- Vue SFC Playground - Vue 在线测试
性能工具
- Lighthouse - 性能测试
- WebPageTest - 网页测试
- Bundlephobia - 包大小分析
图标资源
- Iconify - 图标搜索
- Font Awesome - 图标库
- Heroicons - SVG 图标
开发环境配置
Node.js 版本管理
nvm
bash
# 安装 nvm
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash
# 使用 nvm
nvm install 20 # 安装 Node.js 20
nvm use 20 # 切换到 Node.js 20
nvm alias default 20 # 设置默认版本fnm
bash
# 安装 fnm
curl -fsSL https://fnm.vercel.app/install | bash
# 使用 fnm
fnm install 20
fnm use 20环境变量
bash
# .env
NODE_ENV=development
VITE_API_URL=http://localhost:3000bash
# .env.production
NODE_ENV=production
VITE_API_URL=https://api.example.comtypescript
// 使用环境变量
const apiUrl = import.meta.env.VITE_API_URL快捷键参考
VS Code
Ctrl+P - 快速打开文件
Ctrl+Shift+P - 命令面板
Ctrl+` - 打开终端
Ctrl+B - 切换侧边栏
Ctrl+D - 选择下一个匹配项
Ctrl+Shift+F - 全局搜索
Ctrl+G - 跳转到行
Alt+Up/Down - 移动行
Ctrl+/ - 注释/取消注释
Ctrl+Shift+K - 删除整行Chrome DevTools
F12 - 打开开发者工具
Ctrl+Shift+C - 元素选择器
Ctrl+Shift+J - 控制台
Ctrl+Shift+M - 设备模拟
Ctrl+R - 刷新
Ctrl+Shift+R - 强制刷新