Angular 如何使用electron updater自动更新electron应用程序?

Angular 如何使用electron updater自动更新electron应用程序?,angular,typescript,electron,electron-builder,Angular,Typescript,Electron,Electron Builder,我有一个angular应用程序,它已使用electron builder转换为桌面应用程序。现在,我正在尝试在其中实现自动更新功能。我不希望electron builder将更改发布到github存储库。(注意:整个应用程序都在私有github repo上。)我想手动将必要的.dmg、.zip、.yml文件上传到发布标签,并希望自动更新程序能够获取这些文件。我怎样才能做到这一点 目前,我将source.zip和.tar.gz作为发布标签的一部分。当应用程序准备就绪时,每当我尝试调用autoUpd

我有一个angular应用程序,它已使用electron builder转换为桌面应用程序。现在,我正在尝试在其中实现自动更新功能。我不希望electron builder将更改发布到github存储库。(注意:整个应用程序都在私有github repo上。)我想手动将必要的.dmg、.zip、.yml文件上传到发布标签,并希望自动更新程序能够获取这些文件。我怎样才能做到这一点

目前,我将source.zip和.tar.gz作为发布标签的一部分。当应用程序准备就绪时,每当我尝试调用
autoUpdater.checkForUpdates()
时,我都会收到以下错误消息:

Error: ENOENT, dev-app-update.yml not found in /Users/userX/project-web/build/node_modules/electron/dist/Electron.app/Contents/Resources/default_app.asar
at notFoundError (ELECTRON_ASAR.js:108:19)
    at fs.readFile (ELECTRON_ASAR.js:536:16)
    at go$readFile (/Users/userX/project-web/build/node_modules/graceful-fs/graceful-fs.js:85:14)
    at readFile (/Users/userX/project-web/build/node_modules/graceful-fs/graceful-fs.js:82:12)
    at readFile (/Users/userX/project-web/build/node_modules/universalify/index.js:5:67)
From previous event:
    at /Users/userX/project-web/build/node_modules/electron-updater/src/AppUpdater.ts:460:27
    at Generator.next (<anonymous>)
From previous event:
    at MacUpdater.loadUpdateConfig (/Users/userX/project-web/build/node_modules/electron-updater/src/AppUpdater.ts:456:33)
    at Lazy.AppUpdater.configOnDisk (/Users/userX/project-web/build/node_modules/electron-updater/src/AppUpdater.ts:142:43)
    at Lazy.get value [as value] (/Users/userX/project-web/build/node_modules/lazy-val/src/main.ts:18:23)
    at /Users/userX/project-web/build/node_modules/electron-updater/src/AppUpdater.ts:340:46
    at Generator.next (<anonymous>)
    at runCallback (timers.js:696:18)
    at tryOnImmediate (timers.js:667:5)
    at processImmediate (timers.js:649:5)
From previous event:
    at MacUpdater.getUpdateInfoAndProvider (/Users/userX/project-web/build/node_modules/electron-updater/src/AppUpdater.ts:336:43)
    at /Users/userX/project-web/build/node_modules/electron-updater/src/AppUpdater.ts:363:31
    at Generator.next (<anonymous>)
From previous event:
    at MacUpdater.doCheckForUpdates (/Users/userX/project-web/build/node_modules/electron-updater/src/AppUpdater.ts:360:34)
    at MacUpdater.checkForUpdates (/Users/userX/project-web/build/node_modules/electron-updater/src/AppUpdater.ts:220:35)
    at Timeout.check [as _onTimeout] (/Users/userX/project-web/desktop/src/updater.ts:15:17)
    at ontimeout (timers.js:427:11)
    at tryOnTimeout (timers.js:289:5)
    at listOnTimeout (timers.js:252:5)
    at Timer.processTimers (timers.js:212:10)
} 当应用程序准备就绪时,updater.ts中的
check()
方法将从main.ts调用,如下所示:

app.on('ready', async () => {
   mainWinProcess() // handles all the browser window ops.
   createTray();
   setTimeout(updater.check, 2000); 
});
{
    "name": "project-web",
    "productName": "Project Web X",
    "version": "1.0.0",
    "author": "applecool",
    "description": "A func app",
    "main": "./main.js",
    "dependencies": {
        "electron-log": "2.2.17",
        "electron-updater": "4.0.4",
        "path": "0.12.7",
        "url": "0.11.0",
        "fs-extra": "7.0.1",
        "decompress-zip": "0.3.1"
    },
    "scripts": {
        "mac": "NODE_ENV=production ./node_modules/gulp/bin/gulp.js --gulpfile ./ops/gulpfile.js mac",
        "mac-dev": "NODE_ENV=development ./node_modules/gulp/bin/gulp.js --gulpfile ./ops/gulpfile.js mac-dev",
        "start": "NODE_ENV=development ./node_modules/.bin/electron index.js --debug --enable-logging",
        "start-mac-setup-dev": "build --mac --config electron-builder-dev.yml",
        "start-mac-setup": "build --mac"
    },
    "devDependencies": {
        "@types/node": "^10.12.9",
        "electron": "3.0.10",
        "electron-builder": "20.36.2",
        "electron-is-dev": "1.0.1",
        "electron-reload": "1.3.0",
        "gulp": "4.0.0",
        "icon-gen": "2.0.0",
        "jimp": "0.5.6",
        "os": "0.1.1",
        "zip-folder": "1.0.0",
        "devtron": "1.4.0"
    },
    "build": {
        "appId": "com.projectweb.x"
    }
}
package.json如下所示:

app.on('ready', async () => {
   mainWinProcess() // handles all the browser window ops.
   createTray();
   setTimeout(updater.check, 2000); 
});
{
    "name": "project-web",
    "productName": "Project Web X",
    "version": "1.0.0",
    "author": "applecool",
    "description": "A func app",
    "main": "./main.js",
    "dependencies": {
        "electron-log": "2.2.17",
        "electron-updater": "4.0.4",
        "path": "0.12.7",
        "url": "0.11.0",
        "fs-extra": "7.0.1",
        "decompress-zip": "0.3.1"
    },
    "scripts": {
        "mac": "NODE_ENV=production ./node_modules/gulp/bin/gulp.js --gulpfile ./ops/gulpfile.js mac",
        "mac-dev": "NODE_ENV=development ./node_modules/gulp/bin/gulp.js --gulpfile ./ops/gulpfile.js mac-dev",
        "start": "NODE_ENV=development ./node_modules/.bin/electron index.js --debug --enable-logging",
        "start-mac-setup-dev": "build --mac --config electron-builder-dev.yml",
        "start-mac-setup": "build --mac"
    },
    "devDependencies": {
        "@types/node": "^10.12.9",
        "electron": "3.0.10",
        "electron-builder": "20.36.2",
        "electron-is-dev": "1.0.1",
        "electron-reload": "1.3.0",
        "gulp": "4.0.0",
        "icon-gen": "2.0.0",
        "jimp": "0.5.6",
        "os": "0.1.1",
        "zip-folder": "1.0.0",
        "devtron": "1.4.0"
    },
    "build": {
        "appId": "com.projectweb.x"
    }
}
谁能给我指个正确的方向吗。我正试图在dev环境中实现这一点


谢谢。

如果您想进行测试,只需启动一个本地服务器,然后将您的文件(dmg、zip、yml、json)放在那里(假设在localhost:3000上)。然后,调用API
.setFeedURL
()

例如:
autoUpdater.setFeedURL(“http://localhost:3000/latest-mac.json“
并调用
autoUpdater.checkForUpdates()

electron builder文档中的注释:

注意,为了开发/测试UI/UX,无需打包即可进行更新 应用程序中需要有一个名为dev-app-update.yml的文件 项目的根目录,它与中的发布设置相匹配 electron builder配置(但采用yaml格式)。但事实并非如此 推荐,最好测试已安装应用程序的自动更新 (尤其是在窗户上)。建议将Minio作为的本地服务器 测试更新


谢谢:)我会试着这样做,然后回来。这很有帮助。再次感谢:)@ShellZero没问题:)