项目文件夹

文件
2026-07-13 12:34:40 +08:00

138 行
6.2 KiB
Markdown

此文件含有模棱两可的 Unicode 字符
此文件含有可能会与其他字符混淆的 Unicode 字符。 如果您是想特意这样的,可以安全地忽略该警告。 使用 Escape 按钮显示他们。
# CLAUDE.md
本文档为 Claude Code (claude.ai/code) 提供仓库开发指南。
## 项目速览
**R2 Web** — 纯客户端 Cloudflare R2 存储桶文件管理器,零构建、零框架、零后端。
**核心特性** 文件上传、目录浏览、文件预览、文件操作、图片压缩、PWA、多语言(zh/zh_TW/en/ja)、浅色/深色主题、多选批量操作。
**快速启动**
```bash
npx serve src
# 或
python3 -m http.server 5500 --directory src
```
## 代码地图
### 快速定位表
| 任务 | 文件 |
| ------------------ | --------------------------------------------------------------------------- |
| 修改文件名模板逻辑 | `src/js/utils.js``applyFilenameTemplate` |
| 修改图片压缩逻辑 | `src/js/upload-manager.js``compressFile` |
| 添加 i18n 文案 | `src/js/i18n.js``const I18N` |
| 修改按钮样式 | `src/css/components.css``.btn` |
| 添加设计 Token | `src/css/tokens.css` |
| 修改 R2 API 操作 | `src/js/r2-client.js` |
| 修改文件浏览逻辑 | `src/js/file-explorer.js` |
| 修改上传管理逻辑 | `src/js/upload-manager.js` |
| 多选批量操作逻辑 | `src/js/file-explorer.js``toggleSelect` / `selectAll` / `clearSelection` |
### 工具函数列表
以下函数定义在 `src/js/utils.js`,供各模块导入:
- `t(key, vars)` — i18n 翻译(来自 `src/js/i18n.js`
- `applyFilenameTemplate(tpl, file)` — 文件名模板处理,占位符:`[name]``[ext]``[hash:N]``[date:FORMAT]``[timestamp]``[uuid]``/`
- `compressFile(file, config, onStatus)` — 图片压缩(定义在 `upload-manager.js`
- PNG 特殊处理:直接优化缓冲区,不重新编码
- 自适应逻辑:压缩后更大则使用原文件
## 项目结构
```
r2-web/
├── readme.md — 项目说明、使用指南
├── package.json — 依赖声明(仅用于类型提示)
├── jsconfig.json — JSDoc 类型检查配置
└── src/ — 源码目录(即部署目录)
├── index.html — 应用外壳、import map、对话框模板
├── main.js — 入口(仅 new App()
├── manifest.json — PWA 配置
├── style.css — 样式主入口(仅导入 css 子目录)
├── js/ — 业务逻辑模块
│ ├── app.js — 主协调器
│ ├── config-manager.js — 配置持久化、Base64 分享
│ ├── r2-client.js — S3 API 客户端
│ ├── ui-manager.js — 主题、Toast、对话框、Tooltip
│ ├── file-explorer.js — 目录导航、排序、分页、缩略图
│ ├── upload-manager.js — 上传、文件名模板、图片压缩
│ ├── file-preview.js — 图片/视频/音频/文本预览
│ ├── file-operations.js — 重命名、复制、移动、删除
│ ├── i18n.js — 多语言(zh/zh_TW/en/ja
│ ├── constants.js — 常量
│ └── utils.js — 工具函数
└── css/ — 样式模块(CSS Layers
├── reset.css — CSS Reset
├── tokens.css — 设计 Token(定义所有变量)
├── base.css — 全局基础样式
├── layout.css — 布局容器
├── components.css — 通用 UI 组件
├── utilities.css — 工具类
└── animations.css — 动画与过渡
```
## 架构速查
### JavaScript 类架构
每个类独立为一个模块,位于 `src/js/`
| 类 | 文件 | 职责 |
| ---------------- | -------------------- | -------------------------------------------- |
| `ConfigManager` | `config-manager.js` | localStorage 持久化、Base64 配置分享 |
| `R2Client` | `r2-client.js` | S3 API 客户端(基于 `aws4fetch` 签名) |
| `UIManager` | `ui-manager.js` | 主题、Toast、对话框、上下文菜单、Tooltip |
| `FileExplorer` | `file-explorer.js` | 目录导航、排序、分页、懒加载缩略图、列表缓存 |
| `UploadManager` | `upload-manager.js` | 拖拽/粘贴上传、文件名模板、图片压缩 |
| `FilePreview` | `file-preview.js` | 图片/视频/音频/文本预览 |
| `FileOperations` | `file-operations.js` | 重命名、复制、移动、删除(递归删除目录) |
| `App` | `app.js` | 主协调器、i18n 处理 |
## i18n 速查
### 多语言机制
- **I18N 对象** `src/js/i18n.js`zh / zh_TW / en / ja 四语言)
- **翻译函数** `t(key, vars)` 支持变量替换
- **支持语言** zh(中文)、zh_TW(繁体)、en(英语)、ja(日语)
- **语言切换** `App.updateLanguage()` 自动更新所有文案
### 添加新文案
1.`src/js/i18n.js``I18N` 对象添加 zh / zh_TW / en / ja 键值
2. 代码中使用 `t('key')``t('key', { var: 'value' })`
3. HTML 元素使用 `data-tooltip-key="key"` 支持动态更新
**示例**
```javascript
// 1. 在 I18N 对象添加
const I18N = {
zh: {
deleteConfirm: '确定删除 {name} 吗?',
deleteSuccess: '删除成功',
},
en: {
deleteConfirm: 'Delete {name}?',
deleteSuccess: 'Deleted successfully',
},
ja: {
deleteConfirm: '{name} を削除しますか?',
deleteSuccess: '削除しました',
},
}
// 2. 代码中使用
const message = t('deleteConfirm', { name: fileName })
uiManager.toast(t('deleteSuccess'), 'success')
// 3. Tooltip 使用
button.dataset.tooltipKey = 'deleteConfirm'
button.dataset.tooltip = t('deleteConfirm')
```