产品上线需要接入公司打包平台

使用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快很多!