参考文档:https://docs.cocos.com/creator/1.9/manual/zh/advanced-topics/engine-customization.html
PS: 1.8的文档已经没了,只能看1.9的,所幸这两个版本差别不大
获取 JS 引擎
原文中github上的分支已经找不到了,这里直接从creator里复制一份出来,在里边做修改。
mac路径:/Applications/CocosCreator.app/Contents/Resources/engine
把这个拷贝出来,然后初始化为git本地仓库(这一步主要是方便查看后边要做的代码变更)。
然后在编辑器中设置使用新的代码路径:
构建发布
在构建项目时会根据设置来对engine/中的引擎源码进行裁剪、编译(这里我遇到一个问题,就是没有修改源码,重新编出的minijs文件有时会发生变化,表现为勾选md5 cahce
后会发现md5不一致,把两个文件对比发现(由于minjs是单行文本,用正则表达式处理一下再比会好看一些 ,(\d+):\[\(function\( >> ,\n$1:[(function(
)两份minijs文件中,有一份代码把几个局部变量展开到表达式中,这里可能是压缩工具的问题,虽然没啥大的影响,但以后可能会成为一个暗坑),裁剪过的引擎会缓存在engine/bin/.cache/
目录下,在之后的构建中如果模块设置没有变更会优先使用cache中的引擎。
#展开的情况说明
var i="test";
if (i==a)...
变成了:
if ("test"==a)...
PS:后续修改源码后发布,如果不生效 可以试着删除一下 engine/bin。
插曲
注意这里设置引擎是creator级别的,并不能说我A项目使用内置的,B项目使用自定义的,而我这边就有这个需求。后边的方案是:编辑器还是使用默认的,engine修改后 手动导出minijs,在项目B构建后,使用脚本把minijs替换掉,下边是手动编译的步骤:
安装手动编译的依赖
由于这个是cocosCreator很久之前的版本,有很多软件包的版本已经不兼容了,所以要安装旧版本的node和gulp。根目录下 的 package.json 中可以查到 "gulp": "^3.9.1",
。然后网上搜一下node 8.17.0
与这个版本的gulp兼容。所以先安装node 8.17.0
,这里有安装多个版本的 nodejs 的教程。
node 安装之后再执行:
# 安装 gulp 构建工具
npm install gulp@3.9.1 -g
# 在命令行中进入引擎路径
npm install
进行修改然后编译
新增gulp任务:
# 第三个参数 [] 里控制引擎裁剪的
# 插入第四个参数 这里要定义一些宏 ['jsb', 'wechatgame', 'debug']; 根据需要进行配置
gulp.task('build-wechatgame-min', function (done) {
Engine.buildCocosJsMin('./index.js', './bin/cocos2d-js-min.js', [], {wechatgame:true}, done);
});
./index.js 里的宏 也许要根据平台修改一下:
接下来定制引擎修改了,修改之后请在命令行中执行:
# 在命令行中进入引擎路径
gulp build-wechatgame-min
新编译的代码会在bin
目录下。