如何在我的electron应用程序中使用electron-builder自动更新功能,并与Amazon S3配合使用?
也许已经实现过的人,可以提供比electron-builder文档中提供的更多细节?
如何在我的electron应用程序中使用electron-builder自动更新功能,并与Amazon S3配合使用?
也许已经实现过的人,可以提供比electron-builder文档中提供的更多细节?
我同意你的看法,最近我也有过类似经历...
即使我迟到了,我也会尽力告诉其他人我所知道的一切!
在我的情况下,我正在使用 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
这是默认上传的内容
因此,您需要让您的s3存储桶对公共用户开放,以便每个人都能获取最新版本...
这里是策略:
{
"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一起使用。
我可能忘记了一些部分,请提出任何问题!
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"
},
}
}