使用Amazon S3与Electron Builder的自动更新器

10

如何在我的electron应用程序中使用electron-builder自动更新功能,并与Amazon S3配合使用?

也许已经实现过的人,可以提供比electron-builder文档中提供的更多细节?

2个回答

14

我同意你的看法,最近我也有过类似经历...

即使我迟到了,我也会尽力告诉其他人我所知道的一切!

在我的情况下,我正在使用 electron-builder 来打包我的 electron/anguler 应用程序。

为了使用 electron-builder,我建议你在项目根目录下创建一个名为 electron-builder.json 的文件。

这是我的内容:

{
  "productName": "project-name",
  "appId": "org.project.project-name",
  "artifactName": "${productName}-setup-${version}.${ext}", // this will be the output artifact name
  "directories": {
    "output": "builds/"  // The output directory...
  },
  "files": [ //included/excluded files 
    "dist/",
    "node_modules/",
    "package.json",
    "**/*",
    "!**/*.ts",
    "!*.code-workspace",
    "!package-lock.json",
    "!src/",
    "!e2e/",
    "!hooks/",
    "!angular.json",
    "!_config.yml",
    "!karma.conf.js",
    "!tsconfig.json",
    "!tslint.json"
  ],
  "publish" : {
    "provider": "generic",
    "url": "https://project-release.s3.amazonaws.com",
    "path": "bucket-path"
  },
  "nsis": {
    "oneClick": false,
    "allowToChangeInstallationDirectory": true
  },
  "mac": {
    "icon": "src/favicon.ico"
  },
  "win": {
    "icon": "src/favicon.ico"
  },
  "linux": {
    "icon": "src/favicon.png"
  }
}

如您所见,如果您想使用 electron-builder 自动将应用程序发布到 s3,则需要添加发布配置。我不喜欢的是所有构件和文件都位于同一文件夹中。在我的情况下,如下所示的 package.json,我决定使用 electron-builder build -p never 手动打包它。这基本上告诉它永远不要发布,但我需要它,因为没有它,它不会生成 latest.yml 文件。我使用 Gitlab-ci 生成构件,然后使用脚本将其发布到 s3,但如果您愿意,可以使用 -p always 选项。

Electron-builder 需要 latest.yml 文件,因为这是它知道 s3 上构件是否更近期的方法。

latest.yml 内容示例:

version: 1.0.1
files:
  - url: project-setup-1.0.0.exe
    sha512: blablablablablablablabla==
    size: 72014605
path: project-setup-1.0.0.exe
sha512: blablablablablabla==
releaseDate: '2019-03-10T22:18:19.735Z'

另一个重要的事情是,electron-builder将尝试获取您在electron-builder.json publish配置中提供的url上的内容,如下所示:

https://project-release.s3.amazonaws.com/latest.yml

https://project-release.s3.amazonaws.com/project-setup-1.0.0.exe

这是默认上传的内容

enter image description here

因此,您需要让您的s3存储桶对公共用户开放,以便每个人都能获取最新版本...

enter image description here

这里是策略:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "PublicReadGetObject",
            "Effect": "Allow",
            "Principal": "*",
            "Action": [
                "s3:GetObject",
                "s3:GetObjectAcl",
                "s3:GetObjectVersion",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::your-bucket-name/*",
                "arn:aws:s3:::your-bucket-name"
            ]
        }
    ]
}

替换 your-bucket-name


其次,为了打包应用程序,我在package.json中添加了一个脚本。(仅适用于 Angular 的“build:prod”)

  "scripts": {
    "build:prod": "npm run build -- -c production",
    "package:linux": "npm run build:prod && electron-builder build --linux -p never",
    "package:windows": "npm run build:prod && electron-builder build --windows -p never",
    "package:mac": "npm run build:prod && electron-builder build --mac -p never",
  },

最后,这里有一篇写得非常好的文章(链接)可以与gitlab-ci一起使用。

我可能忘记了一些部分,请提出任何问题!


嗨,Francis,我正在尝试在electron-updater中使用Amazon S3,但是我遇到了访问被拒绝的错误。 我的AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY在我的.env文件中,但它们没有被任何地方使用。你知道我需要做什么吗? - Icecubelegacy
AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY不应该添加在前端的.env文件中,因为客户端可能会访问这些应该保密的变量。你使用的是什么后端?通过正确注入环境变量,你应该能够从后端访问你的存储桶。有一些教程可以帮助你实现这个功能。 - Francis Robitaille
1
那么,Express将被视为您的后端。此外,Electron应用程序可以进行解包,这意味着客户端可以访问源代码。这取决于您想要什么类型的应用程序。但出于安全考虑,最好将服务器单独提供服务,而不要将其打包在同一个Electron应用程序中。 - Francis Robitaille
1
这个支持差分下载吗? - Aniket Chowdhury
嗨@FrancisRobitaille,你是如何在main.js中更新它的? - Mahesh Gareja
显示剩余3条评论

4
以下是S3自动更新程序在electron-builder中的文档:

https://www.electron.build/configuration/publish#s3options

您需要将配置写入package.json的build标签中,例如:
{
  "name": "ps-documentation",
  "description": "Provides a design pattern for Precisão Sistemas",
    "build":{
      "publish": {
        "provider": "s3",
        "bucket": "your-bucket-name"
      },
    }
}

如何设置您的S3凭证? - Muhammad
1
@Muhammad 它使用了预先定义的 AWS_ACCESS_KEY_ID 和 AWS_SECRET_ACCESS_KEY 环境变量。 - Marcelo Formentão

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接