关于 Electron App 代码管理的思考

引子

最近部门在推进 electron base 的 app 开发。 之前我们采用 electron-builder 做构建,但是由于它不支持客制化 file description,所以我的一个同事开发了一个支持 file description 的程序(包装了 electron-packager)来取代之前的配置(其实我觉得提一个 requet 给 electron-builder 会更好)。后来不知什么时候,这个小程序又被迫必须支持从 Jenkens 抽取版本号。同事很头疼,我们就聊了一会。也就有了下面的一些思考。

构建

目前构建走的的是 Jenkens。 从 Jenkens 选择项目构建,后台会从代码仓库拉最新的主分支代码下来,然后安装依赖,依次编译(包括编译web资源,比如 es2015代码,scss, react 代码),打包(electron-builder)。总共下来,需要花费大约八分钟。

下载代码 -> 安装依赖 -> 编译(es2015, react, scss etc)-> 打包为可执行文件

下面是几个我觉得还有优化空间的地方。

  • 下载代码

代码中包含大量的 dll,下载花费的时间较长且本身更新频率并不高,我建议在 server 中维护一个 git repo,用 git pull 代码代替直接下载。

  • 安装依赖

依赖中包含很多开发(dev)工具,比如各种 hot-loader 和 middleware,这些包对构建(production)毫无用处。如果可以忽略再好不过。

一般在 package.json 中,构建工具例如 gulp 都会加入 devDependencies 中,下面的命令不会安装 devDependencies

npm install --only=production

但是这样做是有问题的,gulp 不会被安装了,那么,构建也就无法谈起。所以要区分开发工具和构建工具。比如: react-hot-loader 就是开发工具,css-loader 就是构建工具。也就是说,原本对于 dependencies 和 devDependencies 的定义方式,我们要重新规划。

扯远了,目前看起来,优化空间是有,但是想法还不够成熟。

版本号管理

PO 希望构建的项目的版本号从 Jenkens 中抽取,这就需要项目在构建过程中分析 Jenkens 提供的一个链接,从中抽取版本号,然后加入项目。这样带来一个问题就是,同样的代码可能打包出两个版本号不同的安装包。而且也无法知道安装包对应到代码的具体版本,也就无法在 bug 出现的时候做 hot fix。如果非要维护这样的关系也不是不可以,那就要额外加入版本映射了。

我认为版本号还是应该和代码绑定在一起,即,代码中就预先配置好版本号,譬如在 package.json 的 version 字段中配置当前的版本号。这样如果有线上 bug 的话,也方便做 hot fix。当然 Jenkens 可以提供类似版本名这样的东西,作为一个可选的配置项,存在于安装包之中。比如这样。

config.ini

version_name=alpha

程序可以根据需要,读取并呈现。

(未完待续)

posted @ 2017-02-23 15:25  六月的海  阅读(809)  评论(0编辑  收藏  举报