egret随笔-publish命令的改进

缘由

  导了几天的ipa,每次publish后都要改zip包名的代码,终于鼓起勇气翻看了一下egret publish的代码,唉,这代码。。。
应该不会是北京的那几个大牛写的吧???


正题
  看了源码才知道为什么android版的publish会直接把代码改掉,而ios版的不会了
先来分析一下publish的Entrance吧,对于android版的代码,因为是java的代码,而android的包名就是app的标识,所以找到包名就能找到目标java文件,然后那个谁就很机智的找到了AndroidManifest.xml文件,里面正好配置有主类的包名和类名,然后顺理成章地找到java文件,然后replace掉版本号和其他东东。。。
  那么,问题来了,xcode的project是没有AndroidManifest.xml的,那怎么办呢?
没办法,我试着在function run(dir, args, opts){}的三个参数里找答案,结果没找到,都没有想要的xcode project的name。
  然后我想到了egretProperties.json,心里想着这里会不会配置native project name之类的东西呢,结果还是失望,只有两个path:android_path和ios_path,其实这两个是可以拿来提取nativePorjectName的,但是,如果,path很长呢,那就没办法(约定可以解决这个问题
  还是没办法,那只能从目录结构上找答案了,结果还真有,在proj.ios目录下,有两个文件夹,一个就是对应的nativePorjectName,还有一个就是nativePorjectName + “.xcodeproj”,那岂不美哉,然后我就只能用传统方法来处理了,遍历proj.ios目录,直到找到.xcodeproj结尾的文件夹,然后取其前面部分作为nativePorjectName,然后就定位到了AppDelegate.mm文件,然后replace掉版本号和其他东东。。。


约定
  但是,因为egret解决方案的局限,我的解决方案是需要一个约定的,约定开发者不擅自修改那个文件夹的名字否则就定位不到了。
随便说说
  看了publish.js的代码,一开始,其实我是拒绝的,但是没办法。那代码虽然完成了功能,但是那代码效率实在不行啊,不像是大牛的手笔

1 if (file.exists(path.join(url, "src", javaName + ".java"))) {
2     javaPath = path.join(url, "src", javaName + ".java");
3     javaContent = file.read(javaPath);
4 }
5 else if (file.exists(path.join(url, "src", filePath, javaName + ".java"))) {
6     javaPath = path.join(url, "src", filePath, javaName + ".java");
7     javaContent = file.read(javaPath);
8 }

  虽然v8引擎效率很高,但是egret的命令行毕竟是命令,必须要优化。
还有就是代码重用性比较弱,egret命令作为整个命令的入口,然后分派个几个自命令来执行,但是为什么不在分派前就把诸如项目名,开发平台信息,目标平台信息之类的全部准备好呢,看得我好惆怅,现在就给出了基础的命令参数而已。


建议
  也不敢怎么建议egret的开发者,就建议能把命令行规范定好了再动手,期待能在下一个大版本中能统一一下命令行,支持更多参数,这样第三方工具也会脱颖而出的,想必对egret来说是一个很好促进吧!

成果
  我修改了publish.js,添加了一个changeCodeEntrance.js,放弃了之前的changeJavaEntrance.js,changeCodeEntrance做了平台兼容,通过platform来识别平台,其实这个在changeJavaEntrance里已经携带了参数,但是没利用。。。定位java代码的那块没动。
  如果需要就拿去用用吧,亲测可用,download url:egret-publish.rar

转载于:https://www.cnblogs.com/rockyf/p/egret-publish.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Egret是一个HTML5游戏开发引擎,而Egret Webpack是Egret引擎团队为了提高项目编译效率而封装的一个Webpack插件。在Egret 5.3.6版本中,引入了对Webpack的支持。通过使用Webpack,开发者可以显著提高项目的增量编译效率,并能够更好地利用npm上丰富的第三方JavaScript库。Egret Webpack提供了两个插件,分别是WebpackDevServerPlugin和WebpackBundlerPlugin。这两个插件可以被所有Egret项目使用。在构建过程中,这两个插件包含了一个typescript.mode字段,可以设置为legacy或modern模式,用于配置编译设置。在使用Egret Webpack之前,首先需要初始化package.json文件并安装Webpack。可以通过运行npm init命令来初始化package.json文件,然后通过运行npm install --save-dev webpack命令来安装Webpack。Webpack是一款功能强大的模块加载器和打包工具,可以将各种Web开发中常用的静态资源进行统一的管理和打包发布。它可以处理JS(包括JSX)、CoffeeScript、TypeScript、样式(如less/sass)、图片等各种资源,并能够处理模块之间的依赖关系。Webpack具有强大的模块化功能,可以兼容多种JS书写规范。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Webpack 改进编译速度egret(理论)](https://blog.csdn.net/qq_37193522/article/details/121215099)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Egret应用开发实践(01) Egret与WebPack](https://blog.csdn.net/weixin_34060299/article/details/89443497)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值