Lu Blog

Segment fault!

Electron 更新app.asar

开发Electron时发现app.asar无法在运行时修改,搜索了一圈,不是重新安装就是更新没打包过的单个文件,似乎没有能更新app.asar的。
研究了一下,发现通过修改底层的加载代码还是可以做到的。
app.asar在electron.asar\browser\init.js中被加载,所以只需要在调用app.asar之前加几行代码检测处理即可。

实现

// Update app.asar
const updatePack = path.join(process.resourcesPath, 'update.bin')
if (fs.existsSync(updatePack)) {
  const currentPack = path.join(process.resourcesPath, 'app.asar')
    // delete old app.asar
    fs.unlinkSync(currentPack)
    fs.renameSync(updatePack, currentPack)
}

在截图中的代码前面加上即可
electron.asarbrowserinit.js

效果

  1. Electron启动时检查有没有更新文件update.bin
  2. 如果有update.bin则删除原来的app.asar
  3. 将update.bin重命名为app.asar
  4. 回到正常启动流程

评论卡

已有 3 条评论

  1. colin
    colin
    2019年09月10日

    你好啊 这个你是怎么控制init.js的呢 虽然可以修改 但是每次打包的时候 都被从新替换了 ....源头在哪呢

    1. 小撸
      小撸
      2019年09月23日

      部署版本生成后去修改这个init.js,以后的打包版本不部署electron.asar,只发放新的app.asar给客户端。如果要改源头,那估计得自己编译electron了

  2. 水牛叔叔
    水牛叔叔
    2019年10月27日

    找了一圈,你这个方案最满意,不用引入其他乱七八糟的东西,谢谢