بروزرسانی اپلیکیشن ها در الکترون

برای بروزرسانی اپلیکیشن Electron چندین روش وجود دارد. راحتترین روشی که رسما پشتیبانی شده بهره بردن از چهارچوب Squirrel و ماژول autoUpdater است.

استفاده از update.electronjs.org

تیم GitHub الکترون، update.electronjs.org را پشتیبانی می کند، یک وب سرویس رایگان و منبع باز که اپلیکیشن های Electron می توانند برای بروزرسانی خود استفاده کنند. این سرویس برای اپلیکیشن هایی طراحی شده که با ضوابط زیر مطابقت دارند:
– اپلیکیشن در ویندوز یا macOS اجرا می شود.
– اپلیکیشن یک (repository) مخزن عمومی GitHub دارد.
– انتشار ها برای GitHub نیز صورت گرفته اند.
– انتشارها کد امضا هستند.
راحتترین راه برای استفاده از این سرویس توسط نصب update-electron-app است، یک ماژول Node.js از پیش ساخته شده برای استفاده با update.electronjs.org.

ماژول را نصب کنید:
npm install update-electron-app

از فایل فرایند اصلی اپلیکیشن تان، بروزرساننده را فراخوانید:
require('update-electron-app')()

در حالت پیش فرض، این ماژول هر ده دقیقه یکبار بروزرسانی ها را در startup اپلیکیشن بررسی خواهد کرد. هنگامی که یک بروزرسانی پیدا شود، بصورت خودکار در پس زمینه دانلود خواهد شد. بعد از تکمیل دانلود دیالوگی نمایش داده میشود که به کاربر اجازه راه اندازی دوباره اپلیکیشن را می دهد.
اگر نیاز به شخصی سازی پیکربندی اپلیکیشن دارید می توانید از گزینه هایی برای update-electron-app عبور کرده یا مستقیما از سرویس بروزرسانی استفاده کنید.

استفاده از electron-builder

اگر اپلیکیشن تان با electron-builder دسته بندی شده می توانید از ماژول electron-updater استفاده کنید که نیازی به سرور ندارد و اجازه بروزرسانی از S3، GitHub یا هر میزبان فایل ایستایی را میدهد. این مکانیزم مراحل جانبی توکار Electron به این معنی است که بقیه این اسناد برای بروزرساننده electron-builder اجرا نخواهد شد.

استقرار یک سرور بروزرسانی

اگر در حال توسعه یک اپلیکیشن Electron شخصی هستید، یا اگر نسخه ها را برای GitHub Releases منتشر نکنید، ممکن است لازم باشد سرور بروزرسانی خود را اجرا کنید
نسبت به نیاز خود میتوانید یکی از موارد زیر را انتخاب کنید:
Hazel : سرور بروزرسانی برای اپلیکیشن های شخصی یا منبع باز که میتواند بصورت رایگان در Now گسترش پیدا کند. از GitHub Releases گرفته شده و قدرت GitHub’s CDN را افزایش می دهد.

Nuts : از GitHub Releases استفاده کرده، اما بروزرسانی های اپلیکیشن را روی دیسک ذخیره و مخازن خصوصی را پشتیبانی میکند.
electron-release-server : داشبوردی برای اداره انتشارات تعیین کرده و نیازی به انتشارات GitHub ندارد.
Nucleus : یک سرور کامل بروزرسانی برای اپلیکیشن های Electron که توسط Atlassian نگهداری میشود. اپلیکیشن ها و چنل های چندگانه را پشتیبانی میکند و از یک منبع فایل ایستا برای کاهش هزینه های سرور استفاده می کند.

پیاده سازی بروزرسانی در اپلیکیشن شما

وقتی سرور اپلیکیشن خود را توسعه دادید، با وارد کردن ماژول های مورد نیاز در کد خود ادامه می دهید. کدهای زیر ممکن است برای نرم افزار مختلف سرور، متفاوت باشد، اما هنگام استفاده از Hazel همانطور که توصیف شد کار می کند.
نکته مهم: مطمئن شوید که کد زیر در پکیج اپلیکشن شما اجرا شده باشد نه در توسعه آن. می توانید از electron-is-dev برای بررسی محیط استفاده کنید.
const { app, autoUpdater, dialog } = require('electron')

سپس URL سرور بروزرسانی را اجرا کنید و آن را به autoUpdater اطلاع دهید:

const server = 'https://your-deployment-url.com'
  const feed = `${server}/update/${process.platform}/${app.getVersion()}` 
  autoUpdater.setFeedURL(feed)

به عنوان قدم آخر بروزرسانی ها را چک کنید، مثال زیر هر دقیقه چک خواهد شد:

setInterval(() => {
    autoUpdater.checkForUpdates()
  }, ۶۰۰۰۰)

وقتی اپلیکیشن شما دسته بندی شد، برای هر GitHub Release جدید یک بروزرسانی دریافت خواهد کرد که شما منتشر می کنید.

اعمال بروزرسانی ها

حالا که مکانیزم پایه ای بروزرسانی را گردآوری کرده اید، باید مطمئن شوید که درصورت وجود یک بروزرسانی کاربر پیام آن را دریافت خواهد کرد که این با استفاده از رویدادهای autoUpdater API ممکن خواهد بود:


autoUpdater.on('update-downloaded', (event, releaseNotes, releaseName) => {
    const dialogOpts = {
      type: 'info',
      buttons: ['Restart', 'Later'],
      title: 'Application Update',
      message: process.platform === 'win32' ? releaseNotes : releaseName,
      detail: 'A new version has been downloaded. Restart the application to apply the updates.'
    } 
    dialog.showMessageBox(dialogOpts, (response) => {
      if (response === 0) autoUpdater.quitAndInstall()
    })
  })

همچنین مطمئن شوید که خطاها در حال پردازش هستند. در زیر مثالی برای ورود آنها در stderr آمده است:

autoUpdater.on('error', message => {
    console.error('There was a problem updating the application')
    console.error(message)
  })
1 Star2 Stars3 Stars4 Stars5 Stars (2 votes, average: 5٫00 out of 5)
Loading...
counter customizable free hit