条件编译,剔除不需要的代码,让渠道分包更简单

这是一个命令行工具,帮助你切换条件块之间的代码,

这是 VS Code 中的效果

image

安装
npm install -g conditional-compile-helper

使用方法,在打开项目的VS Code的终端执行以下命令即可
define-cli

更多用法可以查看帮助
define-cli -h

特色功能

  1. 用法与 C# 的编译参数一样,支持 #if、#elif、#else、#endif

  2. 支持嵌套

3.支持测试模式,只打印信息,不修改代码,大胆试,不怕搞错

4.利用现有的VS Code插件 Better Comments,可以做到上图的代码着色效果

5.它是命令行工具,非常容易集成到你现有的构建工作流当中,可以完全契合你的一键多渠道打包的能力

6.极高的性能,处理400个文件 、10万行代码只需要1-2秒的时间

7.安全性,内置解析器会充分验证你的编译条件,不规范的写法报错提示,不会乱来

8.逻辑简单,工具只会在你的代码前面加注释符、或者去掉注释符,不会弄丢你任何一行代码

9.支持2.x 和 3.x 的 Cocos 项目、支持Laya项目、或者其他纯TypeScript项目、支持 Flutter / Dart 项目。
只所以会奇怪的支持 Flutter / Dart 项目,因为这个命令行工具就是用Dart开发的。

原理说明:
1.利用 ast-grep 读取代码,解析并提取包含条件编译的单行注释(推荐一下开源的 ast-grep
2.拆分代码块
3.通过逻辑解析器求解条件语句,比如这种复杂的条件 #if (XIAOMI || OPPO) && !VIVO
4.执行注释或者取消注释条件控制的代码

这是npm包的地址,里面也有更详细的用法说明

集成到现有的构建流程中,主要有两种方式

  1. 使用命令行构建,参见文档

  2. 自定义构建流程,参见文档

两种方式都是需要在正式构建前,先执行 define-cli 命令,当 define-cli 命令的退出码为0时就进入下一步构建,如果 define-cli 退出码不为0,那么说明条件编译存在错误,停止构建。查看输出的错误信息解决了之后再执行构建即可

上述的文档是3.x的版本,2.x的也是类似,切换到对应版本的文档查看就可以了

1赞

不错,后面看看

怎样配合cocos的构建呢

使用命令行构建,执行构建命令之前先执行define-cli命令即可
官方文档

大佬,我测试了下js也支持的,只是工具不支持js文件,可否提供一个支持js文件的版本呢

执行下面的命令
define-cli --settings-init
会在工作目录生成一个define.settings.yaml文件,这个文件可以改成你喜欢的名字,打开此文件,修改上图箭头指向的两个字段,把默认的语言 dart 改成 js ,并且去掉行开头的 #注释符。
接着执行下面的命令试试看:
define-cli --settings=define.settings.yaml

如果你的项目中同时要处理 js 和 ts ,那得分别执行两次 define-cli 命令,并传入对应的参数。

尝试了下,使用的还是默认的yaml配置,–settings= 参数指定的yaml没有效果
ts文件的宏:image
js文件的宏:image
生成的yaml配置:image
使用settings:image

settings.yaml里面最下面的输入文件 inputs 注释打开,并且填一下 js 脚本的所在的文件夹或者路径,不填的话默认cocos项目会按 ts 处理

OK了,感谢大佬 :+1:

我以为大家都在用ts开发,所以js就没有加入到命令行参数上面。
你截图的inputs列表,第一行示例的 lib/difine_tool.dart 可以删掉,然后可以使用相对路径比如assets\

:+1:相对路径测试正常。
这个老项目来的 :3: