Skip to content

调试与排错

本文档汇总了 VitePress 开发过程中常见的问题、错误信息和解决方案,帮助你快速定位和解决问题。

开发环境调试

使用浏览器 DevTools

VitePress 基于 Vue 3,可以充分利用浏览器开发者工具:

1. Vue DevTools

安装 Vue DevTools 浏览器扩展:

bash
# 支持 Chrome、Firefox、Edge
# 在扩展商店搜索 "Vue.js devtools" 安装

功能包括:

  • 查看组件树结构
  • 检查组件 props、data、computed
  • 追踪事件和 Pinia 状态
  • 性能分析

2. Chrome DevTools 技巧

javascript
// 在控制台中使用 VitePress API
import { useData } from 'vitepress'
const { page, frontmatter } = useData()

// 查看 frontmatter 数据
console.log(frontmatter.value)

控制台输出调试

在 Vue 组件中添加调试信息:

vue
<script setup>
import { onMounted, ref } from 'vue'

const data = ref(null)

onMounted(() => {
  console.log('组件已挂载')
  console.log('数据:', data.value)
  
  // 使用 debugger 设置断点
  // debugger
})
</script>

Vite 调试模式

启动开发服务器时开启调试:

bash
# 启用 Vite 调试日志
DEBUG=vite:* npm run docs:dev

# 只看特定模块
DEBUG=vite:config npm run docs:dev

常见错误及解决方案

1. 端口占用

错误信息:

Port 5173 is in use, trying another one...

解决方案:

ts
// docs/.vitepress/config.mts
export default defineConfig({
  vite: {
    server: {
      port: 3000,  // 更改端口
      strictPort: true  // 端口被占用时报错而不是尝试下一个
    }
  }
})

或使用命令行:

bash
# 查找占用端口的进程
lsof -i :5173

# 终止进程
kill -9 <PID>

2. 模块未找到

错误信息:

Cannot find module 'xxx' or its corresponding type declarations

解决方案:

bash
# 1. 检查是否安装依赖
npm ls xxx

# 2. 重新安装
npm install xxx

# 3. 清除缓存后重装
rm -rf node_modules package-lock.json
npm install

3. 内存溢出

错误信息:

JavaScript heap out of memory

解决方案:

bash
# 增加内存限制
NODE_OPTIONS="--max-old-space-size=8192" npm run docs:build

# 或在 package.json 中配置
{
  "scripts": {
    "build": "NODE_OPTIONS='--max-old-space-size=8192' vitepress build docs"
  }
}

优化建议:

  • 减少页面数量
  • 优化图片资源
  • 检查是否有循环依赖

4. 热更新不工作

问题: 修改文件后页面不自动刷新

解决方案:

ts
// docs/.vitepress/config.mts
export default defineConfig({
  vite: {
    server: {
      watch: {
        usePolling: true  // 在某些系统上需要轮询
      }
    }
  }
})

检查文件排除:

ts
export default defineConfig({
  srcExclude: ['README.md'],  // 确保文件没有被排除
})

5. 样式不生效

问题: CSS 样式未应用或被覆盖

解决方案:

vue
<style scoped>
/* 使用 scoped 避免样式污染 */
.custom-class {
  color: red;
}
</style>

<style>
/* 全局样式放在非 scoped 块中 */
:root {
  --vp-c-brand-1: #6366f1;
}
</style>

检查 CSS 优先级:

css
/* 使用 !important(最后手段) */
.my-style {
  color: red !important;
}

/* 或使用更具体的选择器 */
.custom-container .my-style {
  color: red;
}

6. 构建失败

错误信息:

Build failed with errors

排查步骤:

bash
# 1. 清除缓存
rm -rf docs/.vitepress/cache
rm -rf docs/.vitepress/dist

# 2. 检查 Markdown 语法
# 确保没有未闭合的标签或语法错误

# 3. 详细日志模式
DEBUG=* npm run docs:build 2>&1 | tee build.log

7. 图片加载失败

问题: 图片显示为 404

解决方案:

markdown
<!-- 正确的图片路径 -->
![Logo](/logo.svg)  <!-- public 目录 -->

![Screenshot](./images/screenshot.png)  <!-- 相对路径 -->

检查 public 目录结构:

docs/
├── public/
│   └── logo.svg  ✅ 通过 /logo.svg 访问
├── images/
│   └── screenshot.png  ✅ 通过相对路径访问

8. 组件注册失败

错误信息:

Failed to resolve component: XxxComponent

解决方案:

ts
// docs/.vitepress/theme/index.ts
import DefaultTheme from 'vitepress/theme'
import MyComponent from './components/MyComponent.vue'

export default {
  extends: DefaultTheme,
  enhanceApp({ app }) {
    // 全局注册组件
    app.component('MyComponent', MyComponent)
  }
}

或在 Markdown 中局部导入:

markdown
<script setup>
import MyComponent from './components/MyComponent.vue'
</script>

<MyComponent />

9. TypeScript 类型错误

错误信息:

Could not find declaration file for module 'xxx'

解决方案:

ts
// docs/.vitepress/config.mts
import { defineConfig } from 'vitepress'

// 或创建类型声明文件
// docs/types/shims.d.ts
declare module 'xxx' {
  export default function(): void
}

10. Algolia 搜索失败

问题: Algolia 搜索无法工作

解决方案:

ts
// 检查配置是否正确
export default defineConfig({
  themeConfig: {
    search: {
      provider: 'algolia',
      options: {
        appId: 'YOUR_APP_ID',      // 确保正确
        apiKey: 'YOUR_API_KEY',    // 确保正确
        indexName: 'YOUR_INDEX'    // 确保正确
      }
    }
  }
})

验证步骤:

  1. 登录 Algolia 控制台确认凭证
  2. 检查索引是否已创建
  3. 使用浏览器 DevTools 检查网络请求

构建问题排查

详细构建日志

bash
# 启用详细日志
npm run docs:build -- --debug

# 或使用环境变量
VITE_DEBUG=true npm run docs:build

检查构建产物

bash
# 构建后检查产物
ls -la docs/.vitepress/dist

# 检查特定文件
cat docs/.vitepress/dist/index.html

预览构建结果

bash
# 本地预览构建产物
npm run docs:preview

# 指定端口
npm run docs:preview -- --port 4173

性能问题调试

分析包体积

bash
# 安装分析工具
npm add -D rollup-plugin-visualizer

# 配置
ts
// docs/.vitepress/config.mts
import { visualizer } from 'rollup-plugin-visualizer'

export default defineConfig({
  vite: {
    build: {
      rollupOptions: {
        plugins: [
          visualizer({
            open: true,
            filename: 'dist/stats.html'
          })
        ]
      }
    }
  }
})

分析开发服务器性能

bash
# 使用 Vite 插件检查
npm add -D vite-plugin-inspect
ts
import Inspect from 'vite-plugin-inspect'

export default defineConfig({
  vite: {
    plugins: [Inspect()]
  }
})

访问 http://localhost:5173/__inspect/ 查看详情。

常用调试命令

bash
# 查看依赖树
npm ls

# 检查过期依赖
npm outdated

# 检查安全漏洞
npm audit

# 更新依赖
npm update

# 强制重新构建
rm -rf node_modules/.vite
rm -rf docs/.vitepress/cache
npm run docs:build

日志调试技巧

自定义日志函数

ts
// docs/.vitepress/utils/debug.ts
const isDev = import.meta.env.DEV

export function debug(...args: any[]) {
  if (isDev) {
    console.log('[Debug]', ...args)
  }
}

export function warn(...args: any[]) {
  console.warn('[Warning]', ...args)
}

export function error(...args: any[]) {
  console.error('[Error]', ...args)
}

使用:

vue
<script setup>
import { debug } from '../utils/debug'

debug('当前数据:', data.value)
</script>

构建时日志

ts
// docs/.vitepress/config.mts
export default defineConfig({
  buildEnd(siteConfig) {
    console.log('构建完成!')
    console.log('输出目录:', siteConfig.outDir)
  },
  
  transformHead({ pageData }) {
    console.log('处理页面:', pageData.title)
    return {}
  }
})

问题排查清单

遇到问题时,按以下顺序检查:

  • [ ] 1. 清除缓存 (rm -rf docs/.vitepress/cache)
  • [ ] 2. 删除 node_modules 重新安装
  • [ ] 3. 检查 Node.js 版本 (需要 >= 18)
  • [ ] 4. 检查 VitePress 版本 (npm ls vitepress)
  • [ ] 5. 查看 package.json 依赖冲突
  • [ ] 6. 检查 Markdown 语法错误
  • [ ] 7. 检查路径是否正确
  • [ ] 8. 检查组件是否正确注册
  • [ ] 9. 检查配置文件语法
  • [ ] 10. 查看完整错误日志

获取帮助

如果以上方法都无法解决问题:

  1. 搜索 IssuesVitePress GitHub Issues
  2. 社区讨论GitHub Discussions
  3. Discord 社区VitePress Discord
  4. 提交 Issue:提供完整复现步骤和环境信息

提交 Issue 模板:

markdown
## 环境信息
- VitePress 版本:
- Node.js 版本:
- 操作系统:
- 包管理器 (npm/yarn/pnpm):

## 复现步骤
1. 
2. 
3. 

## 期望行为


## 实际行为


## 日志/截图

下一步

学习 CI/CD 自动化部署 来自动化你的构建流程。

贡献者

加载中...

想要成为贡献者?

在 CNB 上参与贡献