【问题标题】:Electron-Builder Linux updates - APPIMAGE env is not definedElectron-Builder Linux 更新 - APPIMAGE 环境未定义
【发布时间】:2019-02-25 19:12:03
【问题描述】:

我正在使用 Electron + Create React App 堆栈。 我正在使用 Electron Updater (https://github.com/develar/electron-updater) 进行自动更新。

平台:Linux,格式:AppImage。

当我的应用检查更新时,我收到以下错误:

APPIMAGE 环境未定义。

有人遇到过同样的问题吗?需要建议。

【问题讨论】:

    标签: electron create-react-app electron-builder


    【解决方案1】:

    这通常发生在您尝试在开发模式(或非打包 AppImage 模式)下使用自动更新程序时。它仅适用于打包的生产版本。


    然而对我来说,这也发生在打包的 AppImage 中,结果是使用 webpack DefinePlugin 引起的,如下所示:

    plugins: [
        new webpack.DefinePlugin({
            "process.env": {
                NODE_ENV: JSON.stringify("production")
            },
            ...
    

    删除process.env 定义允许在分发包中再次定义APPIMAGE。其余的定义似乎可以安全地保留在原处,而不会破坏自动更新程序。

    如果您的用例无法删除此定义,according to some users 可以简单地在主线程(不是渲染器线程)文件的开头覆盖它,如下所示:

    process.env.APPIMAGE = path.join(__dirname, 'dist', `MyApp-${app.getVersion()}.AppImage`)
    

    ...显然在 Path.join 的第三个参数中具有正确的文件名。

    虽然这种覆盖方法似乎对我没有任何帮助,所以我自己只是从 DefinePlugin 定义中删除了 process.env,但它在其他情况下可能会有所帮助。

    【讨论】:

    • 正如预期的那样,因为从您的 sn-p 您正在覆盖值。请参阅文档webpack.js.org/plugins/define-plugin,其中指出:警告在为流程定义值时首选 'process.env.NODE_ENV': JSON.stringify('production') over process: { env: { NODE_ENV: JSON.stringify('production') } } .使用后者将覆盖进程对象,这可能会破坏与某些希望在进程对象上定义其他值的模块的兼容性。
    【解决方案2】:

    尝试使用 electron-builder 构建您的应用程序,因为此模块处于仅维护模式。 linux 的自动更新是不可能的,你只能在 mac 和 windows 上这样做尝试阅读这个documentation

    【讨论】:

      【解决方案3】:

      请不要再使用 electron-updater,因为它的 GitHub 页面不再支持它。

      【讨论】:

      • 是否还有其他库可以自动更新 Linux 平台的电子应用程序?
      • 仍然支持它,只是它现在是electron-builder 的一部分,如您引用的github页面上所述:github.com/develar/electron-updater
      猜你喜欢
      • 2019-12-23
      • 2021-11-17
      • 2019-09-01
      • 2019-06-10
      • 2018-05-30
      • 2018-06-08
      • 1970-01-01
      • 2020-03-27
      • 2015-12-13
      相关资源
      最近更新 更多