Cocos Creator资源MD5缓存清理:开发与发布环境处理

Cocos Creator资源MD5缓存清理:开发与发布环境处理

【免费下载链接】cocos-engine Cocos simplifies game creation and distribution with Cocos Creator, a free, open-source, cross-platform game engine. Empowering millions of developers to create high-performance, engaging 2D/3D games and instant web entertainment. 【免费下载链接】cocos-engine 项目地址: https://gitcode.com/GitHub_Trending/co/cocos-engine

你是否曾遇到过Cocos Creator项目中资源更新后浏览器仍加载旧版本的问题?或者打包发布后用户反馈资源错乱?这些常见问题往往源于MD5缓存机制未正确处理。本文将从开发与发布两个场景,详解如何通过Cocos Engine内置工具与自定义脚本解决MD5缓存清理难题,确保资源更新准确高效。

MD5缓存机制原理

MD5缓存是Cocos Creator用于优化资源加载性能的核心机制。引擎会对每个资源文件计算唯一的MD5哈希值,并将其附加到文件名中(如texture.png变为texture.abc123.png)。当资源内容变化时,MD5值改变,浏览器/客户端会自动请求新文件,避免使用缓存的旧版本。

但在实际开发中,这一机制常引发两类问题:

  • 开发环境:临时文件堆积导致磁盘空间占用过大,编辑器资源引用异常
  • 发布环境:CDN缓存未及时刷新,用户端出现资源版本不匹配

开发环境清理方案

自动清理脚本

Cocos Engine提供了内置的缓存清理工具scripts/clear-cache.js,通过递归删除.gitignore中指定的缓存目录实现MD5缓存清理。核心实现如下:

function deleteFolderRecursive (dirPath) {
  if (fs.existsSync(dirPath)) {
    if (fs.lstatSync(dirPath).isDirectory()) {
      fs.readdirSync(dirPath).forEach((file) => {
        const curPath = path.join(dirPath, file);
        if (fs.lstatSync(curPath).isDirectory()) {
          deleteFolderRecursive(curPath);
        } else {
          fs.unlinkSync(curPath);  // 删除缓存文件
        }
      });
      fs.rmdirSync(dirPath);  // 删除空目录
      console.log(`deleting: ${dirPath}`);
    }
  }
}

使用方法:在项目根目录执行

node scripts/clear-cache.js

该脚本会读取项目根目录的.gitignore文件,清理所有匹配的缓存路径,包括MD5命名的临时资源文件和构建缓存。

编辑器内置功能

Cocos Creator编辑器提供了可视化的缓存清理入口:

  1. 顶部菜单栏选择 Cocos Creator > 偏好设置
  2. 项目设置 中找到 缓存清理 选项
  3. 勾选 MD5资源缓存 并点击 清理

此操作会触发与clear-cache.js相同的清理逻辑,但更适合不熟悉命令行的开发者。

发布环境处理策略

构建配置优化

在发布流程中正确配置MD5选项至关重要。通过 构建发布 面板的以下设置可最大化避免缓存问题:

  1. 启用MD5缓存:勾选后自动对所有资源应用MD5命名
  2. 合并资源:选择 合并所有JSON合并所有JS 减少文件数量
  3. 版本控制:在project.json中维护version字段,每次发布递增

CDN缓存控制

对于使用CDN部署的项目,需在服务器端配置缓存策略:

# Nginx配置示例
location ~* \.(png|jpg|jpeg|gif|js|css)$ {
  expires 1y;  # 长期缓存带MD5的资源
  add_header Cache-Control "public, max-age=31536000, immutable";
  # 对主入口文件设置不缓存
  if ($request_filename ~* "index\.html") {
    expires -1;
    add_header Cache-Control "no-cache";
  }
}

这种配置确保MD5命名的资源被长期缓存,而index.html等入口文件始终从服务器获取最新版本。

自动化清理工作流

集成到构建流程

通过修改项目package.json,可将缓存清理命令集成到构建脚本中:

{
  "scripts": {
    "build:web": "node scripts/clear-cache.js && cocos build -p web -m release"
  }
}

执行npm run build:web时会自动先清理缓存再构建,确保发布包不包含旧版本资源。

版本发布检查清单

发布前建议执行以下检查:

  •  运行clear-cache.js清理本地缓存
  •  确认构建面板中MD5选项已启用
  •  检查project.jsonversion字段已更新
  •  测试环境验证资源加载是否正常
  •  CDN缓存已按计划刷新

常见问题解决方案

清理后资源引用错误

若执行清理脚本后出现资源缺失,可能是因为:

  1. .gitignore配置错误导致必要文件被删除
  2. 编辑器进程锁定缓存文件,需关闭编辑器后重试

可通过检查clear-cache.js的执行日志定位问题文件:

=================== ready to delete ===================
[ '/path/to/project/library', '/path/to/project/local' ]
=================== processing ===================
deleting: /path/to/project/library

发布后CDN缓存未更新

当确认服务器已部署新版本但用户仍加载旧资源时:

  1. 通过浏览器开发者工具的 Network 面板检查资源URL的MD5值
  2. 验证CDN服务商的缓存刷新是否生效
  3. 临时解决方案:在资源URL后添加查询参数(如?v=20251003)强制刷新

总结与最佳实践

MD5缓存清理是Cocos Creator项目开发中保障资源一致性的关键环节。通过本文介绍的方法,你可以:

  • 使用scripts/clear-cache.js或编辑器功能高效清理开发环境
  • 配置构建选项与CDN策略确保发布环境资源准确更新
  • 建立自动化工作流减少人为操作失误

建议将缓存清理纳入每日开发流程,并在团队内部制定统一的资源更新规范。定期清理不仅能避免缓存问题,还能显著减少项目目录体积,提升构建速度。

官方文档:docs/CPP_CODING_STYLE.md 缓存清理工具源码:scripts/clear-cache.js 版本控制配置:package.json

【免费下载链接】cocos-engine Cocos simplifies game creation and distribution with Cocos Creator, a free, open-source, cross-platform game engine. Empowering millions of developers to create high-performance, engaging 2D/3D games and instant web entertainment. 【免费下载链接】cocos-engine 项目地址: https://gitcode.com/GitHub_Trending/co/cocos-engine

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值