# MeshRay - 缓存清理指南

**更新时间**: 2026-03-24  
**适用场景**: 前端修改后未生效、MIME 类型错误、页面显示异常

---

## 🎯 **需要清理的缓存类型**

### 1️⃣ **Go 编译缓存** ⭐⭐⭐

**命令**:
```bash
go clean -cache
```

**作用**: 
- 清理 Go 编译器的构建缓存
- 确保重新编译所有包
- 解决 IDE 标红但编译通过的奇怪问题

**何时使用**:
- ✅ 修改了 embed.go 或静态资源
- ✅ 修改了后端代码
- ✅ 遇到奇怪的编译错误
- ✅ IDE 提示与编译结果不一致

---

### 2️⃣ **前端 Vite 构建缓存** ⭐⭐

**清理方法**:

#### 方法 A: 删除 node_modules/.vite
```bash
cd web
Remove-Item -Recurse -Force "node_modules/.vite"
npm run build
```

#### 方法 B: 强制重新编译
```bash
cd web
npm run build -- --force
```

**作用**:
- 清理 Vite 的预构建依赖
- 解决模块解析错误
- 强制重新分析依赖

**何时使用**:
- ✅ 安装了新的 npm 包
- ✅ 修改了 vite.config.js
- ✅ 遇到 import 错误
- ✅ 编译产物异常

---

### 3️⃣ **浏览器缓存** ⭐⭐⭐

#### Chrome/Edge 浏览器：

**方法 A: 硬性重新加载（推荐）**
1. 打开开发者工具 `F12`
2. **右键点击**刷新按钮🔄
3. 选择 **"清空缓存并硬性重新加载"**

**方法 B: 禁用缓存（开发环境必备）**
1. 按 `F12` 打开开发者工具
2. 进入 **Network** 标签
3. ✅ 勾选 **"Disable cache"**

**方法 C: 完全清除**
1. 按 `Ctrl + Shift + Delete`
2. 时间范围：**时间不限**
3. 勾选：
   - ✅ 浏览历史记录
   - ✅ Cookie 及其他网站数据
   - ✅ 缓存的图片和文件
4. 点击 **"清除数据"**

---

#### Firefox 浏览器：

**方法 A: 硬性重新加载**
- `Ctrl + F5` 或 `Ctrl + Shift + R`

**方法 B: 清除所有缓存**
1. 按 `Ctrl + Shift + Delete`
2. 时间范围：**全部**
3. 勾选：**缓存**
4. 点击 **"确定"**

---

### 4️⃣ **dist 目录清理** ⭐⭐

**场景**: 需要彻底清理前端编译产物

**命令**:
```bash
cd web
Remove-Item -Recurse -Force "dist/*"
npm run build
```

**作用**:
- 清空旧的编译产物
- 确保生成最新的文件
- 避免文件残留导致的问题

**何时使用**:
- ✅ 删除了某些 Vue 组件
- ✅ 重构了目录结构
- ✅ 怀疑编译产物有问题

---

## 🔄 **完整的清理流程**

### 标准流程（推荐）⭐⭐⭐

```bash
# 1. 停止服务
Get-Process -Name "meshray*" -ErrorAction SilentlyContinue | Stop-Process -Force

# 2. 清理 Go 缓存
go clean -cache

# 3. 清理前端缓存（可选）
cd web
Remove-Item -Recurse -Force "node_modules/.vite"

# 4. 重新编译前端
npm run build

# 5. 重新创建 embed.go（重要！）
cat > dist/embed.go << 'EOF'
package dist

import "embed"

//go:embed *
var WebAssets embed.FS
EOF

# 6. 返回项目根目录
cd ..

# 7. 重新编译后端
go build -o meshray.exe -ldflags "-s -w -H=windowsgui" ./cmd/meshray

# 8. 启动服务
.\meshray.exe

# 9. 测试访问
curl.exe http://localhost:9531/
```

---

### 快速流程（日常开发）⭐⭐

```bash
# 1. 清理 Go 缓存
go clean -cache

# 2. 重新编译前端
cd web; npm run build; cd ..

# 3. 重新创建 embed.go
echo "package dist`n`nimport `"embed`"`n`n//go:embed *`nvar WebAssets embed.FS" > web\dist\embed.go

# 4. 重新编译后端
go build -o meshray.exe -ldflags "-s -w -H=windowsgui" ./cmd/meshray

# 5. 重启服务
Get-Process meshray* | Stop-Process -Force; .\meshray.exe
```

---

## 🛠️ **PowerShell 一键清理脚本**

创建文件：`clean_and_build.ps1`

```powershell
# MeshRay 清理并重建脚本

Write-Host "🧹 开始清理..." -ForegroundColor Cyan

# 1. 停止服务
Write-Host "`n📴 停止 MeshRay 服务..." -ForegroundColor Yellow
Get-Process -Name "meshray*" -ErrorAction SilentlyContinue | Stop-Process -Force
Start-Sleep -Seconds 2

# 2. 清理 Go 缓存
Write-Host "`n🗑️ 清理 Go 编译缓存..." -ForegroundColor Yellow
go clean -cache

# 3. 清理前端缓存
Write-Host "`n🗑️ 清理 Vite 缓存..." -ForegroundColor Yellow
if (Test-Path "web\node_modules\.vite") {
    Remove-Item -Recurse -Force "web\node_modules\.vite"
}

# 4. 清理 dist 目录（可选）
# Write-Host "`n🗑️ 清理 dist 目录..." -ForegroundColor Yellow
# Remove-Item -Recurse -Force "web\dist\*"

# 5. 重新编译前端
Write-Host "`n🔨 编译前端..." -ForegroundColor Yellow
Set-Location web
npm run build
Set-Location ..

# 6. 重新创建 embed.go
Write-Host "`n📝 创建 embed.go..." -ForegroundColor Yellow
@"
package dist

import "embed"

//go:embed *
var WebAssets embed.FS
"@ | Out-File -FilePath "web\dist\embed.go" -Encoding utf8 -NoNewline

# 7. 重新编译后端
Write-Host "`n🔨 编译后端..." -ForegroundColor Yellow
go build -o meshray.exe -ldflags "-s -w -H=windowsgui" ./cmd/meshray

# 8. 启动服务
Write-Host "`n🚀 启动 MeshRay..." -ForegroundColor Yellow
Start-Process ".\meshray.exe"

# 9. 等待启动
Start-Sleep -Seconds 3

# 10. 测试访问
Write-Host "`n🧪 测试访问..." -ForegroundColor Yellow
$response = curl.exe http://localhost:9531/ -s
if ($response -match "DOCTYPE") {
    Write-Host "`n✅ 成功！前端页面可访问" -ForegroundColor Green
} else {
    Write-Host "`n❌ 失败！请检查日志" -ForegroundColor Red
}

Write-Host "`n✨ 完成！" -ForegroundColor Green
Write-Host "`n📱 访问地址：http://localhost:9531" -ForegroundColor Cyan
```

**使用方法**:
```bash
.\clean_and_build.ps1
```

---

## 📊 **常见问题排查**

### 问题 1: 前端修改后不生效

**排查步骤**:
```bash
# 1. 检查 dist 目录是否更新
ls web\dist\index.html | Select-Object LastWriteTime

# 2. 清理浏览器缓存
# F12 → Network → Disable cache

# 3. 硬性重新加载
# Ctrl + Shift + R
```

---

### 问题 2: MIME 类型错误

**解决方案**:
```bash
# 1. 清理所有缓存
go clean -cache
Remove-Item -Recurse -Force "web\dist\*"
npm run build

# 2. 重新创建 embed.go
# （见上方脚本）

# 3. 重新编译
go build

# 4. 浏览器禁用缓存
# F12 → Network → ✅ Disable cache
```

---

### 问题 3: embed.go 丢失

**症状**:
```
no required module provides package git.zkcoi.com/zkcoi/meshray/web/dist
```

**解决**:
```bash
# 重新创建 embed.go
@"
package dist

import "embed"

//go:embed *
var WebAssets embed.FS
"@ | Out-File -FilePath "web\dist\embed.go" -Encoding utf8 -NoNewline

# 重新编译
go build
```

---

### 问题 4: 浏览器仍然显示旧页面

**强制刷新方法**:

#### Chrome/Edge:
1. `Ctrl + Shift + Delete`
2. 时间范围：**时间不限**
3. 勾选所有选项
4. 清除数据
5. **关闭浏览器**
6. 重新打开

#### 隐私模式测试:
```bash
chrome.exe --incognito http://localhost:9531
msedge.exe --inprivate http://localhost:9531
```

---

## 📋 **检查清单**

完成以下检查确保缓存已完全清理：

- [x] ✅ `go clean -cache` 执行成功
- [x] ✅ 前端已重新编译 (`npm run build`)
- [x] ✅ `web/dist/embed.go` 已重新创建
- [x] ✅ 后端已重新编译
- [x] ✅ 服务已重启
- [x] ✅ 浏览器缓存已禁用（Disable cache）
- [x] ✅ 硬性重新加载执行（Ctrl+Shift+R）
- [ ] ⏳ curl 测试返回正确的 HTML
- [ ] ⏳ 浏览器中页面正常显示

---

## 💡 **最佳实践**

### 开发习惯：

1. **每次修改前端后**:
   ```bash
   npm run build
   # 然后刷新浏览器（禁用缓存）
   ```

2. **每次修改后端后**:
   ```bash
   go clean -cache
   go build
   # 然后重启服务
   ```

3. **遇到奇怪的问题时**:
   - 先清理所有缓存
   - 重新编译前后端
   - 浏览器隐私模式测试

---

### 自动化建议：

**VS Code Tasks**:

创建 `.vscode/tasks.json`:
```json
{
  "version": "2.0.0",
  "tasks": [
    {
      "label": "Clean and Rebuild",
      "type": "shell",
      "command": ".\\clean_and_build.ps1",
      "group": "build",
      "presentation": {
        "reveal": "always",
        "panel": "new"
      }
    }
  ]
}
```

**快捷键**: `Ctrl+Shift+P` → `Tasks: Run Task` → `Clean and Rebuild`

---

## 🎯 **总结**

### 缓存清理优先级：

| 场景 | 优先级 | 操作 |
|------|--------|------|
| **前端修改** | ⭐⭐ | `npm run build` + 浏览器硬刷新 |
| **后端修改** | ⭐⭐ | `go clean -cache` + 重启服务 |
| **路由/组件删除** | ⭐⭐⭐ | 清理 dist + 重新编译 + 浏览器清缓存 |
| **MIME 类型错误** | ⭐⭐⭐ | 全部清理 + 隐私模式测试 |
| **embed.go 问题** | ⭐⭐⭐ | 重新创建 embed.go + 重新编译 |

---

**状态**: ✅ **缓存已清理，服务已重启**  
**下一步**: 请在浏览器中访问 http://localhost:9531 并测试  

*MeshRay - 清理缓存，焕然一新！* ✨🔧
