# html-editor-service
**Repository Path**: devqiaoyu/html-editor-service
## Basic Information
- **Project Name**: html-editor-service
- **Description**: 一个基于Next.js的Docker服务,提供简洁的HTML文件实时编辑功能。
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-01-24
- **Last Updated**: 2026-01-25
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# HTML Editor Service
一个基于 Next.js 的现代化 HTML 编辑器服务,提供安全、直观的可视化编辑体验。
## ✨ 功能特性
### 🎯 核心功能
- 📁 **智能文件管理** - 自动扫描并列出指定目录中的HTML文件
- 🗑️ **可视化元素删除** - 点击任意HTML元素即可删除
- 🔄 **实时刷新机制** - 支持手动刷新和自动检测新文件
- 💾 **一键保存** - 修改后立即保存到原始文件
- 🎨 **现代化UI** - 响应式设计,流畅动画效果
### 🔒 安全特性
- 🛡️ **路径遍历防护** - 严格的文件路径验证,防止目录穿越攻击
- 🔐 **XSS攻击防护** - CSP策略和安全头保护,禁用脚本执行
- 🚫 **危险元素过滤** - 自动隐藏或禁用script、iframe等危险标签
### 🛠️ 技术特性
- 🏗️ **模块化架构** - 组件化设计,代码清晰可维护
- ⚡ **性能优化** - 事件委托,减少内存占用
- 🎭 **智能状态管理** - 完善的错误处理和用户反馈
- 🐳 **多架构部署** - 支持 AMD64、ARM64、ARMv7 等架构
- 🌐 **云原生** - 完整的容器化和 CI/CD 支持
## 🚀 快速开始
### 🐳 多架构 Docker 部署(推荐)
#### 快速启动
```bash
# 1. 克隆项目
git clone
cd html-editor-service
# 2. 使用预构建镜像
docker run -d \
--name html-editor-service \
-p 3000:3000 \
-v $(pwd)/html-files:/app/html-files \
registry.cn-hangzhou.aliyuncs.com/devqiaoyu/html-editor-service:v1.0.0
# 3. 访问应用
open http://localhost:3000
```
#### Docker Compose 多架构部署
```bash
# 1. 使用多架构配置
docker-compose -f docker-compose.multi-arch.yml up -d
# 2. 带 Nginx 反向代理
docker-compose -f docker-compose.multi-arch.yml --profile with-nginx up -d
```
#### 支持的架构
- **linux/amd64** - x86_64 服务器 (Intel/AMD)
- **linux/arm64** - ARM64 服务器 (Apple Silicon, AWS Graviton)
- **linux/arm/v7** - ARM32 设备 (Raspberry Pi 3/4)
### 本地开发
```bash
# 1. 安装依赖
npm install
# 2. 启动开发服务器
npm run dev
# 3. 访问应用
open http://localhost:3000
```
### 🔨 构建多架构镜像
```bash
# 1. 构建并推送所有架构
./build-multi-arch.sh
# 2. 构建不使用缓存
./build-multi-arch.sh --no-cache
# 3. 测试多架构镜像
./test-multi-arch.sh
```
## 📖 使用指南
### 基础操作
1. **选择文件** 📂
- 在左侧文件列表中选择要编辑的HTML文件
- 支持文件名搜索和排序
- 实时显示文件修改时间
2. **编辑元素** 🎯
- 在右侧编辑区域点击任意HTML元素
- 选中元素会显示红色高亮边框
- 删除按钮自动出现在元素附近
3. **删除元素** 🗑️
- 点击红色删除按钮移除选中元素
- 支持删除文本、图片、容器等所有HTML元素
- 删除操作立即生效,支持连续删除
4. **保存文件** 💾
- 点击右上角"保存"按钮
- 修改会实时保存到原始HTML文件
- 保存后文件列表会自动刷新
### 高级功能
#### 🔄 文件刷新
- **手动刷新**:点击侧边栏顶部刷新按钮
- **自动检测**:新文件添加时会显示"新文件"提示
- **定时更新**:每30秒自动检查文件变化
#### ⚡ 性能优化
- **事件委托**:使用单一事件监听器处理所有元素点击
- **智能高亮**:高效的DOM操作和样式管理
- **内存管理**:自动清理事件监听器和定时器
## ⚙️ 配置选项
### 环境变量
| 变量名 | 默认值 | 说明 |
|---------|--------|------|
| `HTML_DIR` | `./html-files` | HTML文件存储目录 |
| `PORT` | `3000` | 服务监听端口 |
| `NODE_ENV` | `development` | 运行环境 |
### Docker 配置
```yaml
version: '3.8'
services:
html-editor:
build: .
ports:
- "3000:3000"
volumes:
- ./html-files:/app/html-files
environment:
- HTML_DIR=/app/html-files
restart: unless-stopped
```
## 🏗️ 项目架构
### 目录结构
```
html-editor-service/
├── 📁 html-files/ # HTML文件存储
│ ├── 📄 sample.html # 示例文件
│ └── 📄 test.html # 测试文件
├── 📁 src/
│ ├── 📁 app/ # Next.js App Router
│ │ ├── 📁 api/ # API 路由
│ │ │ ├── 📄 html-files/route.ts # 文件列表API
│ │ │ ├── 📄 html-file/route.ts # 文件读取API
│ │ │ └── 📄 save-file/route.ts # 文件保存API
│ │ ├── 📄 layout.tsx # 应用布局
│ │ └── 📄 page.tsx # 主页面组件
│ ├── 📁 components/ # React 组件
│ │ ├── 📄 FileSidebar.tsx # 文件侧边栏
│ │ ├── 📄 HTMLEditor.tsx # HTML 编辑器
│ │ └── 📄 DeleteButton.tsx # 删除按钮
│ └── 📁 types/ # TypeScript 类型
│ └── 📄 index.ts # 类型定义
├── 🐳 Dockerfile # Docker 构建文件
├── 📦 docker-compose.yml # Docker Compose 配置
├── ⚙️ next.config.ts # Next.js 配置
├── 📦 package.json # 项目依赖
└── 📖 README.md # 项目文档
```
### 组件架构
```
📱 App (page.tsx)
├── 📂 FileSidebar
│ ├── 🔄 刷新按钮
│ ├── 🆕 新文件提示
│ └── 📋 文件列表
├── 🖥️ HTMLEditor
│ ├── 📝 编辑器界面
│ └── 🎯 交互处理
└── 🗑️ DeleteButton
└── 🎯 删除操作
```
## 🔐 安全措施
### 路径验证
```typescript
// 严格的路径验证,防止目录遍历攻击
function validateFilePath(filePath: string) {
const resolvedPath = path.resolve(filePath);
const allowedDir = path.resolve(htmlDir);
// 检查路径是否在允许目录内
if (!resolvedPath.startsWith(allowedDir)) {
return { isValid: false, error: 'Access denied' };
}
// 检查文件扩展名
if (!filePath.endsWith('.html')) {
return { isValid: false, error: 'Only HTML files allowed' };
}
return { isValid: true, resolvedPath };
}
```
### XSS 防护
```html
```
## 🛠️ API 接口
### 文件管理 API
| 方法 | 路径 | 说明 |
|------|------|------|
| `GET` | `/api/html-files` | 获取HTML文件列表 |
| `POST` | `/api/html-file` | 读取指定HTML文件内容 |
| `POST` | `/api/save-file` | 保存HTML文件内容 |
### 请求示例
**获取文件列表**
```bash
curl -X GET http://localhost:3000/api/html-files
```
**读取文件内容**
```bash
curl -X POST http://localhost:3000/api/html-file \
-H "Content-Type: application/json" \
-d '{"filePath": "/app/html-files/example.html"}'
```
**保存文件**
```bash
curl -X POST http://localhost:3000/api/save-file \
-H "Content-Type: application/json" \
-d '{
"filePath": "/app/html-files/example.html",
"content": "Updated
"
}'
```
## 🧪 测试
### 自动化测试
```bash
# 运行类型检查
npm run type-check
# 运行代码规范检查
npm run lint
# 构建测试
npm run build
```
### 功能测试
```bash
# 创建测试文件
npm run test:create-files
# 清理测试文件
npm run test:cleanup
# 测试自动刷新功能
bash test-auto-refresh.sh
```
## 🎯 使用场景
### 1. 网页内容清理
- 移除广告横幅
- 清理侧边栏元素
- 删除多余的装饰性内容
### 2. 页面原型制作
- 快速删除不需要的部分
- 简化复杂页面结构
- 创建最小化版本
### 3. 内容提取
- 保留核心内容
- 移除导航和页脚
- 提取主要文本信息
## 🔧 开发指南
### 本地开发环境
```bash
# 1. 克隆项目
git clone
cd html-editor-service
# 2. 安装依赖
npm install
# 3. 启动开发服务器
npm run dev
# 4. 访问应用
open http://localhost:3000
```
### 构建生产版本
```bash
# 构建优化版本
npm run build
# 启动生产服务器
npm start
```
### 多架构 Docker 部署
#### 生产环境推荐配置
```bash
# 1. 使用预构建的多架构镜像
docker run -d \
--name html-editor-service \
-p 3000:3000 \
-v $(pwd)/html-files:/app/html-files \
-e NODE_ENV=production \
--restart unless-stopped \
registry.cn-hangzhou.aliyuncs.com/devqiaoyu/html-editor-service:v1.0.0
# 2. 健康检查
docker ps
curl http://localhost:3000/api/html-files
```
#### Docker Compose 生产部署
```bash
# 基础部署
docker-compose -f docker-compose.multi-arch.yml up -d
# 带 Nginx 反向代理
docker-compose -f docker-compose.multi-arch.yml --profile with-nginx up -d
```
#### 架构特定部署
```bash
# AMD64 服务器
docker run -d --platform linux/amd64 registry.cn-hangzhou.aliyuncs.com/devqiaoyu/html-editor-service:v1.0.0
# ARM64 服务器 (Apple Silicon, AWS Graviton)
docker run -d --platform linux/arm64 registry.cn-hangzhou.aliyuncs.com/devqiaoyu/html-editor-service:v1.0.0
# ARM32 设备 (Raspberry Pi)
docker run -d --platform linux/arm/v7 registry.cn-hangzhou.aliyuncs.com/devqiaoyu/html-editor-service:v1.0.0
```
## 📊 性能优化
### 前端优化
- **事件委托**:减少事件监听器数量
- **懒加载**:按需加载文件内容
- **内存管理**:自动清理定时器和事件监听
### 后端优化
- **路径缓存**:缓存已解析的文件路径
- **并发控制**:限制同时操作的文件数量
- **错误处理**:完善的异常捕获和恢复机制
## 🐛 故障排除
### 常见问题
**Q: 文件列表为空?**
A: 检查 `html-files` 目录是否存在,确保有 `.html` 文件。
**Q: 删除元素没有反应?**
A: 确保点击的是HTML元素,不是空白区域。
**Q: 保存失败?**
A: 检查文件权限和磁盘空间,查看控制台错误信息。
**Q: 刷新按钮不工作?**
A: 检查网络连接和API服务状态。
### 调试模式
```bash
# 启用详细日志
DEBUG=1 npm run dev
# 查看网络请求
# 打开浏览器开发者工具 -> Network 标签
```
## 🤝 贡献指南
1. Fork 项目
2. 创建功能分支 (`git checkout -b feature/amazing-feature`)
3. 提交更改 (`git commit -m 'feat: add amazing feature'`)
4. 推送到分支 (`git push origin feature/amazing-feature`)
5. 创建 Pull Request
### 代码规范
- 使用 TypeScript 严格模式
- 遵循 ESLint 规则
- 编写清晰的 commit message
- 添加必要的类型定义
## 📄 许可证
MIT License - 详见 [LICENSE](LICENSE) 文件
## 🔗 相关链接
- [Next.js 文档](https://nextjs.org/docs)
- [Tailwind CSS](https://tailwindcss.com)
- [Lucide Icons](https://lucide.dev)
- [Docker 文档](https://docs.docker.com)
---
⭐ 如果这个项目对你有帮助,请给个 Star!
🐛 发现问题?欢迎提交 Issue