配置与接口
📂 项目结构说明
├── assets/ # 素材根目录
│ ├── textures/ # 材质贴图
│ ├── images/ # 普通图片
│ ├── videos/ # 视频资源
│ ├── env/ # 环境资源
│ ├── json/ # JSON 配置
│ └── other/ # 其他资源
├── src/
│ ├── cli.js # 命令行参数与运行模式
│ ├── scanAssets.js # 素材扫描与 config 生成
│ ├── server.js # HTTP、CORS 与静态资源服务
│ ├── upload.js # 本地上传处理
│ ├── previewPage.js # 素材管理与预览页面
│ ├── buildStaticSite.js # 纯静态发布包构建
│ └── mime.js # MIME 类型映射
├── assetServeWatch.js # 命令行入口
└── package.json
⚙️ 命令行参数
node assetServeWatch.js [运行模式] [选项]
| 参数 | 说明 | 默认值 |
|---|---|---|
-serve、--serve | 启动本地 HTTP 调试服务 | 关闭 |
-build、--build | 构建可部署的静态站点 | 关闭 |
-p、--path <dir> | 素材根目录 | ./assets |
-port、--port <number> | 调试服务端口 | 4100 |
-host、--host <host> | 调试服务监听地址 | 0.0.0.0 |
-maxUploadSize、--max-upload-size <MB> | 单文件上传上限 | 512 |
-out、--out <file> | 单独生成 config 时的输出文件 | <素材目录>/asset-config.json |
-dist、--dist <dir> | 静态构建输出目录 | ./dist |
-baseUrl、--base-url <url> | config 中资源 URL 的公开根地址 | 空 |
-h、--help | 显示帮助 | — |
--serve与--build不能同时使用。
🧾 config 结构
资源清单示例:
{
"schemaVersion": "tvt-asset-manager-serve@0.1.0",
"generatedAt": "2026-07-02T00:00:00.000Z",
"rootName": "assets",
"baseUrl": "http://localhost:4100",
"counts": {
"total": 1,
"texture": 1
},
"assets": [
{
"id": "texture-textures-warning-line-a1b2c3d4",
"name": "warning-line.png",
"type": "texture",
"category": "textures",
"path": "textures/warning-line.png",
"url": "http://localhost:4100/assets/textures/warning-line.png",
"previewUrl": "http://localhost:4100/assets/textures/warning-line.png",
"mime": "image/png",
"size": 1024,
"updateTime": "2026-07-02T00:00:00.000Z",
"hash": "完整的 SHA-256 文件哈希"
}
]
}
顶层字段
| 字段 | 说明 |
|---|---|
schemaVersion | 清单结构版本 |
generatedAt | 本次扫描完成时间,ISO 8601 格式 |
rootName | 素材根目录名称 |
baseUrl | 资源服务公开根地址 |
counts | 资源总数及各类型数量 |
assets | 资源明细列表 |
单个资源字段
| 字段 | 说明 |
|---|---|
id | 根据资源类型和相对路径生成的稳定 ID |
name | 文件名 |
type | 统一资源类型 |
category | 素材根目录下的第一级目录 |
path | 相对于素材根目录的路径 |
url | 资源完整访问地址 |
previewUrl | 可预览资源的地址;不可预览类型为空字符串 |
mime | HTTP MIME 类型 |
size | 文件大小,单位为字节 |
updateTime | 文件最后修改时间 |
hash | 文件内容的 SHA-256 哈希 |
资源相对路径不变时,id 会保持稳定;文件内容变化时,hash 会同步变化。
🗂️ 类型识别规则
服务优先根据素材的第一级目录判断类型,再根据扩展名兜底:
| 目录 | 生成的 type |
|---|---|
textures、texture | texture |
images、image | image |
videos、video | video |
env、hdr、sky、skybox | env |
json | json |
other | other |
可预览类型为 env、image、texture 和 video。未识别的文件统一归入 other。
扫描时会忽略:
- 隐藏文件与隐藏目录
.DS_Store.gitkeep- 已生成的
asset-config.json
🔌 调试服务接口
| 方法 | 路径 | 说明 |
|---|---|---|
GET | / | 素材管理与预览页 |
GET | /preview | 素材管理与预览页别名 |
GET | /config | 实时扫描并返回资源清单 |
POST | /upload?category=<category> | 以 multipart/form-data 上传一个或多个 files |
GET | /assets/<relative-path> | 读取具体素材 |
HEAD | /assets/<relative-path> | 读取素材响应头和元信息 |
OPTIONS | * | CORS 预检 |
上传成功时返回 HTTP 201:
{
"uploaded": [
{
"id": "texture-textures-demo-a1b2c3d4",
"path": "textures/demo.png",
"url": "http://localhost:4100/assets/textures/demo.png"
}
],
"config": {
"schemaVersion": "tvt-asset-manager-serve@0.1.0",
"assets": [
{
"path": "textures/demo.png"
}
]
}
}
实际返回的 uploaded 项包含完整资源字段,config 为上传后的完整最新清单。
📦 静态发布入口
构建产物提供内容相同的多个 config 入口:
/config
/config.json
/asset-config.json
/assets/asset-config.json
推荐对外使用 /config.json。这些别名只属于静态构建产物;本地调试服务使用实时接口 /config。
🌐 CORS 配置
本地调试服务已返回:
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET,HEAD,POST,OPTIONS
Access-Control-Allow-Headers: Content-Type, Range
将 dist/ 部署到自己的服务器时,也需要为 config 和 assets 配置允许编辑器域名访问的 CORS 响应头。视频等大文件建议保留 Range 请求支持。
🔒 使用边界
- 上传能力仅用于本地调试,不包含鉴权与审核。
- 静态发布版本不提供上传或删除接口。
- 服务不会修改素材文件内容。
- 构建输出目录与素材目录必须相互独立,防止覆盖素材。
- 新增、替换或删除素材后,需要重新构建才能更新静态发布站点。
