zoukankan      html  css  js  c++  java
  • 关于 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
    

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

    (未完待续)

  • 相关阅读:
    LeetCode 252. Meeting Rooms
    LeetCode 161. One Edit Distance
    LeetCode 156. Binary Tree Upside Down
    LeetCode 173. Binary Search Tree Iterator
    LeetCode 285. Inorder Successor in BST
    LeetCode 305. Number of Islands II
    LeetCode 272. Closest Binary Search Tree Value II
    LeetCode 270. Closest Binary Search Tree Value
    LeetCode 329. Longest Increasing Path in a Matrix
    LintCode Subtree
  • 原文地址:https://www.cnblogs.com/Rexxar/p/6433653.html
Copyright © 2011-2022 走看看