产品上线需要接入公司打包平台
使用web端执行打包脚本执行打包任务
打包过程中需要完成引擎生成、项目生成、图片压缩、文件名MD5重命名、ZIP打包压缩等操作
由于打包机器是公司‘内定’的mac机
所以打包脚本选择了shell+nodejs
转载注明出处http://www.cnblogs.com/billyrun/articles/7474937.html
1.引擎代码生成
引擎代码就是项目中的cocos2d-js.js/cocos2d-js-min.js
当使用默认js引擎时是不需要手动生成引擎代码的
若此次打包修改了引擎源码,就需要手动生成新的引擎代码文件
项目中可以记录引擎目录的svn版本号来确认引擎是否有更新
若有更新,执行gulp build即可(如果不想配环境变量,可以直接执行node ./node_modules/gulp/bin/gulp.js build)
配置方法参考官方文档http://www.cocos.com/docs/creator/advanced-topics/engine-customization.html
使用自定义引擎还需要手动设置引擎地址
具体的讲就是修改一个json文件
C:\Users\xxx\.CocosCreator\settings.json(windows)
/Users/xxx/.CocosCreator/settings.json(mac)
将json文件中js-engine-path改写为自定义引擎路径,use-default-js-engine设为false
2.项目生成
脚本生成项目如同面板中点击‘项目’-‘构建发布’
命令形如
$CREATOR_PATH --path $PROJECT_PATH --build "buildPath=${BUILD_PATH};platform=${PLATFORM}"
build中其余常用参数还有 startScene/webOrientation/debug等
详细可参考官方文档http://www.cocos.com/docs/creator/publish/publish-in-command-line.html
3.文件名MD5
项目采用了类似页游的更新策略
文件名后缀+md5码唯一确定文件版本
在Creator1.6+版本好像可以自动MD5
无奈我做的时候还没有1.6
这里使用nodejs完成文件遍历与MD5操作
几个常用模块和操作如下
require('fs') 文件处理
require('path') 路径/文件名处理
require('crypto') MD5计算
require('child_process') 子进程/调用其他程序
fs.stat 判断isFile 文件还是文件夹
fs.readdir 遍历指定目录
fs.writeFileSync 写入记录文件名与MD5码映射关系
fs.renameSync 重命名
MD5具体操作如下
var md5sum = crypto.createHash('md5') var stream = fs.createReadStream(path) stream.on('data' , function(chunk){md5sum.update(chunk)}) stream.on('end' , function(){ var md5Code = md5sum.digest('hex') // rename by md5 code })
4.图片压缩
图片压缩使用了两个工具分别处理png/jpg
分别是pngquant/ImageMagick
具体调用在遍历文件时使用path.extname判断后缀名
然后由child_process.exec(commandString , callback)子进程中异步压缩
png命令
command = pngEnginePath + ' --force --ext .png ' + imgPath
jpg命令
commang = 'export DYLD_LIBRARY_PATH="'+JPG_ENGINE_LIB+'" && ' + jpgEnginePath + ' -quality 70 -strip ' + imgPath + ' ' + imgPath
这个略复杂,首先要export它的library,然后设置原图路径和压缩后图片路径
在执行图片压缩以前
还需要处理这两个工具的执行权限
command = ‘chmod a+x ’ + enginePath
5.ZIP打包
mac命令如下
zip -qr to from
zip -qr ../${zipName} res src cocos2d*
即压缩res/src两个文件夹和cocos2d开头的文件(cocos2d-js.js/cocos2d-js-min.js)至指定目录保存为zipName
大概就总结这么多吧
nodejs效率还是蛮高的
循环遍历文件夹要比shell快很多!
转载于:https://www.cnblogs.com/billyrun/articles/7474937.html