Files
mengyanote/前端优化说明.md
2025-12-19 15:51:26 +08:00

195 lines
4.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 萌芽笔记 - 前端优化说明
## 📋 问题描述
原项目在部署到服务器后,某些浏览器(特别是移动端浏览器)会出现:
- localStorage 权限弹窗,点"允许"才能访问
- 某些浏览器不弹窗,直接阻止访问,导致页面一直加载
- 跨域或隐私模式下无法正常使用
## ✅ 解决方案
### 1. **完全移除对 localStorage 的强依赖**
- 实现了内存存储回退机制
- 即使 localStorage 被禁用也能正常运行
- 数据完全来自后端 API不依赖浏览器存储
### 2. **优化的存储 Shim**
文件:`src/utils/storageShim.js`
- 静默检测 localStorage 可用性
- 自动降级到内存存储
- 不会触发浏览器权限弹窗
### 3. **错误边界组件**
文件:`src/components/ErrorBoundary.jsx`
- 捕获所有运行时错误
- 提供友好的错误提示
- 给出解决方案建议
### 4. **网络请求优化**
文件:`src/utils/fileUtils.js`
- 添加请求超时控制15秒
- 更详细的错误日志
- 友好的错误提示信息
### 5. **支持相对路径部署**
- 前后端同域名部署时,使用相对路径
- 避免跨域问题
- 更好的安全性
## 🚀 部署建议
### 推荐方式:前后端同域名部署
**配置步骤:**
1. **修改 `.env.production` 文件**
```bash
# 留空表示使用相对路径
VITE_API_BASE=
```
2. **构建前端**
```bash
cd mengyanote-frontend
npm install
npm run build
```
3. **配置 Nginx**
```nginx
server {
listen 80;
server_name your-domain.com;
# 前端静态文件
location / {
root /path/to/mengyanote-frontend/dist;
try_files $uri $uri/ /index.html;
}
# 后端 API 代理
location /api/ {
proxy_pass http://127.0.0.1:2424;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
```
4. **启动后端**
```bash
cd mengyanote-backend
python main.py
```
### 方式二:前后端分离部署
**配置步骤:**
1. **修改 `.env.production` 文件**
```bash
# 填写后端完整URL
VITE_API_BASE=https://api.your-domain.com
```
2. **配置后端 CORS**
编辑 `mengyanote-backend/main.py`,确保 CORS 配置正确:
```python
app.add_middleware(
CORSMiddleware,
allow_origins=["https://your-frontend-domain.com"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
```
3. **构建并部署前端**
```bash
npm run build
# 将 dist 目录上传到前端服务器
```
## 🔍 测试验证
部署后请在以下环境测试:
1. **桌面浏览器**
- ✅ Chrome
- ✅ Edge
- ✅ Firefox
- ✅ Safari
2. **移动浏览器**
- ✅ Chrome Mobile
- ✅ Safari iOS
- ✅ 微信内置浏览器
- ✅ 其他移动浏览器
3. **特殊模式**
- ✅ 隐私/无痕模式
- ✅ 禁用 Cookie
- ✅ 禁用 JavaScript Storage
## 📊 变更内容
### 修改的文件
1. ✏️ `src/utils/storageShim.js` - 优化存储回退机制
2. ✏️ `src/utils/fileUtils.js` - 优化网络请求和错误处理
3. ✏️ `src/context/AppContext.jsx` - 添加详细日志
4. ✏️ `src/main.jsx` - 添加错误边界
5. ✏️ `.env.production` - 改为相对路径模式
6. `src/components/ErrorBoundary.jsx` - 新增错误边界组件
### 关键改进
1. **零依赖 localStorage**
- 所有数据从后端获取
- localStorage 仅用于临时缓存(可选)
2. **完善的错误处理**
- 网络超时控制
- 友好的错误提示
- 详细的调试日志
3. **跨浏览器兼容**
- 支持所有主流浏览器
- 移动端完美适配
- 隐私模式正常工作
## 🐛 问题排查
如果仍然遇到问题,请检查:
### 1. 打开浏览器控制台 (F12)
查看是否有错误信息,所有日志都以 `[MengyaNote]` 开头
### 2. 检查网络请求
- 确认 `/api/tree` 和 `/api/file` 请求是否成功
- 查看响应状态码
### 3. 验证后端服务
```bash
curl http://your-domain.com/api/tree
```
### 4. 检查 CORS 配置
如果跨域部署,确保后端允许前端域名访问
## 📞 技术支持
如有问题,请提供:
1. 浏览器控制台的完整日志
2. 网络请求的详细信息
3. 浏览器版本和操作系统信息
---
**最后更新:** 2025-12-19
**版本:** 2.0 - 移除 localStorage 依赖版本