Cocos Creator—如何給資源打MD5版本號
Cocos Creator 是Cocos最新一代的游戲開發者工具,基于 Cocos2d-x,組件化,腳本化,數據驅動,跨平臺發布。Cocos Creator的開發思路已經逐步跟Unity 3D靠攏,寫起來也更方便快捷,開發效率更高。
但既然是新東西,免不了各種坑。其中在發布Web Mobile平臺上,就有各種小問題,例如給資源加上md5版本號,Cocos Creator就不支持。從16年底開發組就說要支持MD5 Cache,等了大半年,新的1.6內測版本終于增加了MD5 Cache的功能,但效果也是差強人意。
為什么呢?因為正常來說,一般頁面除了首頁的index.html,其他資源都是要添加md5版本號的,1.6內測版確實增加了版本號,但只給圖片等資源做了md5,cocos2d-js-min.js,main.js并沒有加,這根本不能用啊喂!

官方不支持,只好自己動手豐衣足食了,具體思路是通過gulp等構建工具實現。
gulp安裝請訪問:https://gulpjs.com/
nodejs安裝請訪問:http://nodejs.org/
另外需要安裝gulp相關插件:[gulp-rev](https://github.com/sindresorhus/gulp-rev) [gulp-rev-collector](https://github.com/shonny-ua/gulp-rev-collector)
思路如下:
1. 把build/web-mobile/src里面的project.js拷貝到build/web-mobile/,目的是為了匹配main.js里的‘project.js’
2. 通過gulp-rev給js和png圖片打md5版本號
3. 通過gulp-rev-collector替換文件原路徑到打版本號的路徑
gulpfile文件代碼:
```javascript
var gulp = require('gulp');
var fileInline = require('gulp-file-inline');
var concat = require('gulp-concat');
var htmlmin = require('gulp-htmlmin');
var rev = require('gulp-rev');
const imagemin = require('gulp-imagemin');
var revCollector = require('gulp-rev-collector');
gulp.task('resRev', function (cb) {
// res, thm資源文件打版本號
gulp.src(['./build/web-mobile/**/*.js', './build/web-mobile/*.png', './build/web-mobile/**/*.css'])
.pipe(rev())
.pipe(gulp.dest('./build/web-mobile/'))
.pipe(rev.manifest())
.pipe(gulp.dest('./build/web-mobile/')
.on('end', cb));
});
gulp.task('default',['resRev'], function(cb) {
gulp.src(['./build/web-mobile/*.json', './build/web-mobile/index.html'])
.pipe(revCollector())
.pipe(gulp.dest('./build/web-mobile/'));
gulp.src(['./build/web-mobile/*.json', './build/web-mobile/main*.js'])
.pipe(revCollector({
replaceReved: true
}))
.pipe(gulp.dest('./build/web-mobile/'));
});
```
在命令行里面執行`gulp`就可以給相應的文件打版本號啦!
對比前后的版本打包情況,執行之前,除了圖片,js和css還是沒有加md5的:

可以看到,css和js都是沒有打md5的,這個文件發到cdn會導致文件無法更新
執行gulp之后:

js和css已經打上版本號。
細心的開發者可能看到project.js和圖片沒有打md5。這里由于是提供思路,所以不把所有的功能完善,有興趣的讀者可以自己完善。實際上我不會把這幾個js和css打版本號的。最后產出會把這幾個文件合并到index.html中。
完整代碼可以訪問:[https://github.com/babyzone2004/cocosMd5](https://github.com/babyzone2004/cocosMd5),這個示例包含了Cocos Creator圖片壓縮優化,減少首次文件請求,html壓縮,動態更新定制loading圖等功能哦。
ps:
我們團隊正在招聘優秀的H5游戲開發工程師,如果你符合以下條件:
1. 白鷺引擎/Cocos2d-js/Layabox等H5相關的開發經驗
2. 希望快速成長,不甘平庸
請聯系我吧:babyzone2004@qq.com
[1]: /img/bVRYqr
[2]: /img/bVRYq6
浙公網安備 33010602011771號