본문 바로가기

ELECTRON

[electron] autoUpdater 사용 시 주의 사항.

반응형

electron-updater로 최신 릴리스가 있는 지 확인 할 때 checkForUpdates 함수를 사용한다.

이 함수의 결과로 "update-available" 또는 "update-not-available" 이벤트가 발생한다.

 

자동 업데이트를 구성하는 코드는 대략 아래와 같다.

import { autoUpdater } from "electron-updater";

......

autoUpdater.on("update-available", (info) => {
  console.log("Update available.");
  
  autoUpdater.downloadUpdate();
});

autoUpdater.on("update-not-available", (info) => {
  console.log("Update not available.");
});

autoUpdater.on("download-progress", (progressObj) => {
  let log_message = "Download speed: " + progressObj.bytesPerSecond;
  log_message = log_message + " - Downloaded " + progressObj.percent + "%";
  log_message = log_message + " (" + progressObj.transferred + "/" + progressObj.total + ")";

  console.log(log_message);
});

autoUpdater.on("update-downloaded", (info) => {
  console.log("Update downloaded");

  autoUpdater.quitAndInstall();
});
......

autoUpdater.checkForUpdates();

 

 

autoUpdater는 업데이트가 있으면 파일을 자동으로 다운로드 하는데 여기서 예상치 못 한 문제가 발생했다.

"update-available" 이벤트에서 downloadUpdate 함수를 호출했기 때문에 파일을 두 번 다운로드 하면서 예기치 않은 에러가 발생했고 디버깅 하는데 쓸데없는 시간을 낭비하고 말았다.

 

정리하면 선택은 2가지다.

 

1. 업데이트 다운로드 및 설치를 autoUpdater가 다 처리하도록 한다.

2. 세세한 제어 및 UX를 제공하기 위해 약간의 처리는 내가 한다.

 

1번을 선택할 경우 downloadUpdate함수 호출 부분을 빼주면 된다.

2번을 선택할 경우 autoUpdater.autoDownload = false로 자동 다운로드 속성을 꺼주면 된다.

 
2번의 코드는 아래와 같다.
import { autoUpdater } from "electron-updater";

......

autoUpdater.autoDownload = false;

autoUpdater.on("update-available", (info) => {
  console.log("Update available.");
  
  autoUpdater.downloadUpdate();
});

autoUpdater.on("update-not-available", (info) => {
  console.log("Update not available.");
});

autoUpdater.on("download-progress", (progressObj) => {
  let log_message = "Download speed: " + progressObj.bytesPerSecond;
  log_message = log_message + " - Downloaded " + progressObj.percent + "%";
  log_message = log_message + " (" + progressObj.transferred + "/" + progressObj.total + ")";

  console.log(log_message);
});

autoUpdater.on("update-downloaded", (info) => {
  console.log("Update downloaded");

  autoUpdater.quitAndInstall();
});

......

autoUpdater.checkForUpdates();

 

반응형