前言
Electron幫助我們突破瀏覽器的界限,通過Electron構建的桌面應用擁有各種瀏覽器應用夢寐以求的能力。
Electron提供的autoUpdater還可以幫助我們實現桌面應用的自動更新。
文件結構
首先,我們已經有了一個基于Electron做的應用,項目中有兩個package.json。這樣做的一個原因是將devDependencies和dependencies分開了,另外就是不需要在打包的時候再去指定哪些依賴不需要一起打到安裝包里面去了(通過ignore參數)。
目錄結構類似于這樣:
myapp -node_modules -package.json -app -js -css -index.html -main.js -package.json
外面的package.json內容類似于:
{ "name": "myapp", "main": "app/main.js", "scripts": { "start": "electron ." }, "devDependencies": { "electron-prebuilt": "^1.2.7" }}里面的package.json的內容類似于:
{ "name": "myapp", "version": "1.0", "main": "main.js", "description": "my app", "scripts": { "start": "electron ." }, "dependencies": {}}注意里面的package.json中的name,version,description是必填的,接下來打包會用到。
electron-squirrel-startup
為了使最后的安裝包能夠實現自動更新,我們需要對現有的應用做一些改動,使它可以處理一些啟動或者安裝時的事件。
我們可以在main.js里面加入一些處理的代碼或者方便起見,我們可以直接使用electron-squirrel-startup。
先安裝:
npm install electron-squirrel-startup --save
因為需要在main.js里面用到,我們需要將其安裝在app里面。
在main.js里面使用它,第一行加入如下代碼即可:
if (require('electron-squirrel-startup')) return;有興趣的童鞋可以一起跟我去看看electron-squirrel-startup做了什么事情,急著打包的童鞋可以直接忽略這一段:
在myapp/app/node_modules/electron-squirrel-startup下面有一個index.js:
var path = require('path');var spawn = require('child_process').spawn;var debug = require('debug')('electron-squirrel-startup');var app = require('electron').app; var run = function(args, done) { var updateExe = path.resolve(path.dirname(process.execPath), '..', 'Update.exe'); debug('Spawning `%s` with args `%s`', updateExe, args); spawn(updateExe, args, { detached: true }).on('close', done);}; var check = function() { if (process.platform === 'win32') { var cmd = process.argv[1]; debug('processing squirrel command `%s`', cmd); var target = path.basename(process.execPath); if (cmd === '--squirrel-install' || cmd === '--squirrel-updated') { run(['--createShortcut=' + target + ''], app.quit); return true; } if (cmd === '--squirrel-uninstall') { run(['--removeShortcut=' + target + ''], app.quit); return true; } if (cmd === '--squirrel-obsolete') { app.quit(); return true; } } return false;}; module.exports = check();
新聞熱點
疑難解答
圖片精選