Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
Electron ×Ô¶¯¸üеÄÍêÕû½Ì³Ì£¨Windows ºÍ OSX£©
 
×÷ÕßרÀ¸êdzƣºË¼¿¼ÖÐ
  4993  次浏览      28
  2020-3-27
 
±à¼­ÍƼö:
±¾ÎÄÖ÷Òª½²½âÈçºÎÔÚMac OSX 10.11 ÉÏÖ´ÐвÙ×÷½øÐÐElectron Ó¦ÓÃʵÏÖ×Ô¶¯¸üУ¬Ï£Íû¶ÔÄúÄÜÓÐËù°ïÖú¡£
±¾ÎÄÀ´×ÔÓÚSegmentFault,ÓÉ»ðÁú¹ûÈí¼þAlice±à¼­ÍƼö¡£

ͨ¹ý Electron£¬Äã¿ÉÄÜÖ»ÐèÒ»Õ£ÑÛµÄʱ¼ä¾ÍÍê³ÉÁËÒ»¸ö²»´íµÄ×ÀÃæÓ¦Ó㬲¢·Ö·¢µ½Óû§ÊÖÖС£µ±Äã¾õµÃ×Ô¼ºÄÜÏñÒ»¸ö½ÄÐҵϵµ°Ò»ÑùÇáËÉʱ£¬Äã¿ÉÄÜ»áÒâʶµ½ÄãÒÅ©ÁËÒ»¸öÖØÒªµÄµã£ºÓû§ÈçºÎ»ñÈ¡ÏÂÒ»¸ö°æ±¾ÄØ£¿ÉõÖÁ¸Ãа汾ÐÂÔöÁËһЩÓÅÐãµÄ¹¦ÄÜ¡£µ±È»£¬ËûÃÇÄÜɾ³ýºóÔÙÖØÐ°²×°¸ÃÓ¦Ó㬵«ÕâÄѵÀ²»õ¿½ÅÂð£¿

¿ìËÙä¯ÀÀ Electron Îĵµ ʱ£¬Äã»á×¢Òâµ½¸ÃÎĵµÖк¬ÓÐ auto-updater Ä£¿é£¬Ëü½ö½öÊÇÁíÒ»¸ö¿ò¼Ü¡ª¡ªSquirrel µÄ½Ó¿Ú¡£Squirrel »áÔÚ±³ºó¼ì²â£¨»òÄãÖ÷¶¯´¥·¢£©ÊÇ·ñÓÐа汾¡¢ÏÂÔØÐ°汾£¬²¢ÔÚÄãÆô¶¯»òÖØÆôÓ¦ÓÃʱ×Ô¶¯¸üÐÂÓ¦Óá£

µ«±¯É˵ÄÊÇ£ºÊµ¼ÊʵÏÖÆðÀ´²¢²»ÊÇÎĵµÉÏдµÄÕâô¼òµ¥¡£ÒòΪ×Ô¶¯¸üÐÂÔÚ OSX ºÍ Windows ÉϵŤ×÷·½Ê½²¢²»Ïàͬ£¨Ä¿Ç°²¢²»Ö§³Ö Linux£©£¬²¢ÇÒÕâÁ½ÕßµÄÎĵµÊÇ·ÖÉ¢ÔÚ¶à¸ö¿â£¨repository£©ÖС£ÎÒÒѾ­»¨·ÑÁË´óÁ¿µÄʱ¼ä°Ñ¸Ã¹¦ÄÜʵÏÖÁË¡£ËùÒÔÎÒ¾õµÃ½«ÎÒËùѧϰµ½µÄ֪ʶ×ܽá³Éһƪ½Ì³ÌÊÇÖµµÃµÄ£¬Ï£ÍûËüÄܽÚÊ¡ÄãµÄʱ¼ä¡£

ËäÈ»ÕâÀïËù½²µÄÒ»ÇÐÓ¦¸Ã¾ùÄÜÔÚ Windows ºÍ OSX ÉÏÔËÐУ¬µ«ÎªÁ˼õÉÙÒìÒ飬ÎÒÏÈÉùÃ÷ÎÒÊÇÔÚ Mac OSX 10.11 ÉÏÖ´ÐеIJÙ×÷£¬³ýÁËΪ Windows ϵͳ¹¹½¨°²×°°ü£¨ÔÚÐéÄâ»úÉÏ£©¡£

Ó¦Óôò°ü

ÔÚʵÏÖ×Ô¶¯¸üÐÂ֮ǰ£¬ÓÐÒ»¸öÖØÒªµÄ²½Öè ¡ª¡ª ´ò°ü¡£ÎÒ¼ÙÉè´ó¶àÊýÈËÒѾ­ÖªµÀÈçºÎͨ¹ý electron-packager ʵÏָòÙ×÷£¬µ«ÓÐÁ½¼þÊÂÊÇʱ³£±»ºöÂԵġ£

{
"name": "MyApp",
"main": "app.js",
"private": true,
"productName": "MyApp",
"version": "1.0.0",
"author": "My Company Ltd",
"description": "MyApp",
"devDependencies": {
"electron-installer-squirrel-windows": "^1.3.0",
"electron-packager": "^5.1.1",
"electron-prebuilt": "0.36.7"
},
"scripts": {
"start": "NODE_ENV=development ./node_modules/.bin/electron .",
"pack:osx": "./node_modules/.bin/electron-packager . $npm_package_productName --app-version=$npm_package_version --version=0.36.7 --out=builds --ignore='^/builds$' --platform=darwin --arch=x64 --sign='Developer ID Application: My Company Ltd (ABCDEFGH10)' --icon=icon.icns --overwrite",
"pack:win": "./node_modules/.bin/electron-packager . $npm_package_productName --app-version=$npm_package_version --version=0.36.7 --out=builds --ignore='^/builds$' --platform=win32 --arch=ia32 --version-string.CompanyName='My Company Ltd' --version-string.LegalCopyright='Copyright (C) 2016 My Company Ltd' --version-string.FileDescription=$npm_package_productName --version-string.OriginalFilename='MyApp.exe' --version-string.InternalName=$npm_package_productName --version-string.ProductName=$npm_package_productName --version-string.ProductVersion=$npm_package_version --asar=true --icon=logo.ico --overwrite"
}
}

package.json

×¢Òâ package.json µÄ¶îÍâ×Ö¶Î ¡ª¡ª productName¡¢author ºÍ description£¬ËäÈ»Õ⼸¸ö×ֶβ¢²»ÊÇ´ò°ü±Ø±¸µÄ£¬µ«ËüÃÇ»áÔÚ Windows µÄ Squirrel °²×°°üÖÐʹÓõ½¡£

ΪӦÓÃÖ´ÐдúÂëÇ©Ãû£¨Code-signing£©µÄÕⲿ²Ù×÷²¢²»ÊÇ×Ô¶¯¸üеıر¸²½Ö裨ÒëÕß×¢£ºÒ²Ðí×÷Õßµ±Ê±µÄ Electron °æ±¾µÄ×Ô¶¯¸üÐÂÄ£¿é²»±Ø½øÐдúÂëÇ©Ãû£¬µ«µ±Ç°°æ±¾ÊDZØÐëÒª½øÐÐÕⲿ²Ù×÷µÄ£¬¹Ù·½ÎĵµÖÐдµÀ£ºYour application must be signed for automatic updates on macOS. This is a requirement of Squirrel.Mac. £©£¬µ«ÕâÊǷdz£¿ÉÈ¡µÄ²Ù×÷¡£¶ÔÓÚ OSX£¬ÄãÐèÒªÒ»¸ö Apple µÄ¿ª·¢ÕßÈÏÖ¤£¬È»ºóÔÚ script ×Ö¶ÎµÄ pack:osx Ìæ»»ÒÔϲÎÊý¼´¿É£º

--sign='Developer ID Application: My Company Ltd (ABCDEFGH10)'

ÔÚ OSX ÖУ¬Äã¿ÉÒÔͨ¹ý Keychain Access > My Certificates ²é¿´£¨Ó¦ÓóÌÐò -> Ô¿³×´® > ÎÒµÄÖ¤Ê飬Èç¹ûÓеϰ£©¡£

ÎÒ²¢Ã»ÓÐÔÚ Windows ÉÏÖ´ÐдúÂëÇ©ÃûÕâÏî²Ù×÷£¬µ«Äã¿ÉÒÔ¿´¿´¸ÃÖ÷ÌâÏà¹ØµÄÓÅÐã½Ì³Ì¡£

¶ÔÓÚ Windows£¬ÍƼöΪ electron-packager ´«µÝ version-string µÄËùÓпÉÑ¡²ÎÊý£¬Èç company name¡¢product name µÈ¡£ÒòΪһµ©ÎÒÃÇÉú³É Windows µÄ Squirrel °²×°°ü£¬¸ÃÓ¦ÓþÍÄÜÔÚ Windows µÄ¡º¿ªÊ¼¡»²Ëµ¥ÏÔʾÕýÈ·µÄÔªÐÅÏ¢£¨metadata£©£¬¶ø²»ÊÇ Atom µÄĬÈÏÐÅÏ¢¡£

Atom Shell is now called Electron¡£

ËùÒÔ£¬ÈÃÎÒÃÇ¿ªÊ¼°É£¡

OSX

ÔÚ OSX ÖУ¬×Ô¶¯¸üÐÂÊÇͨ¹ý Squirrel.Mac ´¦ÀíµÄ£¬ËüÊÇÄÚÖÃÓÚ Electron ÖС£ÕâÒâζ×ÅÄãÖ»Ðè´ò°üÄãµÄÓ¦Óã¬È»ºóÕÕ³£ÔËÐоͺã¡

¶÷£¬Æäʵ²»ÍêÈ«ÊÇ¡£

Squirrel.Mac µÄ¹¤×÷·½Ê½ÊÇͨ¹ý·ÃÎÊÒ»¸öÄãËùÌṩµÄ API ¡ºÂ·¾¶¡»£¨endpoint£©£¬ÅжÏÊÇ·ñÓÐа汾¡£Èç¹ûûÓÐа汾£¬ÄÇô¸Ã·¾¶Ó¦¸Ã·µ»Ø HTTP 204¡£Èç¹ûÓÐа汾£¬ÔòËü»áÆÚ´ý½ÓÊÕÒ»¸ö HTTP 200¡¢ÇÒÊÇ JSON ¸ñʽ µÄÏìÓ¦£¬ÆäÖаüº¬Ò»¸ö ÄÜ»ñÈ¡ .zip ÎļþµÄ url¡£

PS£º¡ºÂ·¾¶¡»ÓÖ³Æ"ÖÕµã"£¨endpoint£©£¬±íʾAPIµÄ¾ßÌåÍøÖ·¡£

{
"url": "http://mysite.com/path/to/zip/MyApp.zip"
}

Ôڵõ½¸Ã url ºó£¬Squirrel »á¹¹ÔìÒ»¸ö application/zip µÄÇëÇóÈ¥·ÃÎʸà url£¬ÏÂÔØÏàÓ¦Îļþ£¬È»ºó´¥·¢×îÖÕʼþ£¨ÏÂÔØÍê³É£©ÈÃÄãÖªµÀ¸üаü¼´½«°²×°¡£¶ÔÓÚÄãÀ´Ëµ£¬ËùÓÐÊÂÇéµÄ´¦Àí¶¼ÊÇ×Ô¶¯»¯µÄ¡£

Èç¹ûÄ㲻ʮ·ÖÈ·¶¨·þÎñÆ÷³ÌÐòÓ¦¸Ã³¤Ê²Ã´Ñù£¬¿É¿´¿´ÏÂÃæµÄÒ»¸ö³¬¼¶Ð¡Ð굀 Node.js/Express ·þÎñ£¬¼Ù¶¨ËüµÄĿ¼½á¹¹ÈçÏ£º

©¸©¤©¤ releases
©À©¤©¤ darwin
©¦ ©À©¤©¤ 1.0.0
©¦ ©À©¤©¤ 1.0.2
©¦ ©¸©¤©¤ 1.0.3
©¸©¤©¤ win32

{
"name": "squirrel-version-checker",
"version": "0.0.0",
"private": true,
"scripts": {
"start": "PORT=80 node app.js",
"dev": "./node_modules/.bin/nodemon app.js"
},
"dependencies": {
"express": "^4.9.8",
"morgan": "^1.3.2"
},
"devDependencies": {
"nodemon": "^1.8.1"
}
}

»ùÓÚ Node µÄ¸üзþÎñ package.json

'use strict';
const fs = require('fs');
const express = require('express');
const path = require('path');
const app = express();
app.use(require('morgan')('dev'));
app.use('/updates/releases', express.static(path.join(__dirname, 'releases')));
app.get('/updates/latest', (req, res) => {
const latest = getLatestRelease();
const clientVersion = req.query.v;
if (clientVersion === latest) {
res.status(204).end();
} else {
res.json({
url: `${getBaseUrl()}/releases/darwin/${latest}/MyApp.zip`
});
}
});
let getLatestRelease = () => {
const dir = `${__dirname}/releases/darwin`;
const versionsDesc = fs.readdirSync(dir).filter((file) => {
const filePath = path.join(dir, file);
return fs.statSync(filePath).isDirectory();
}).reverse();
return versionsDesc[0];
}
let getBaseUrl = () => {
if (process.env.NODE_ENV === 'development') {
return 'http://localhost:3000';
} else {
return 'http://download.mydomain.com'
}
}
app.listen(process.env.PORT, () => {
console.log(`Express server listening on port ${process.env.PORT}`);
});

Ò»¸ö¼òµ¥µØ¡¢ÓÃÓÚ²âÊÔ Squirrel.Mac ×Ô¶¯¸üÐ嵀 Express ·þÎñÆ÷

Õ⽫»á´Ó±¾µØµÄÎļþϵͳ½øÐзַ¢Îļþ£¬µ«Õâ²»ÊÇÀíÏëµÄ´¦Àí·½Ê½¡£ÎҵĽ¨ÒéÊÇ£º½«ÕâЩÎļþ·ÅÖÃÔÚ Amazon S3¡£

Amazon S3£ºAmazon Simple Storage Service

È»ºóÄã¿ÉÒÔÔÚ¿ª·¢»·¾³Ï£¬Í¨¹ý Electron ·ÃÎʸ÷¾¶£º

http://localhost:3000/updates/latest?v=1.0.1

?v=1.0.1 ÊÇÄ㵱ǰӦÓõİ汾¡£

ÏÖÔÚÄãÒѾ­ÓµÓÐÁË·þÎñÆ÷³ÌÐòºÍ·¾¶ÁË£¬ÄÇôÔÚÓ¦ÓÃÖд¦Àí¸üвÙ×÷¾ÍÊ®·Ö¼òµ¥ÁË¡£

ÔÚ Electron µÄÖ÷½ø³ÌÎļþÖУ¬ÒýÈë auto-updater Ä£¿é£¬È»ºó»ñÈ¡µ±Ç°ÏµÍ³ºÍÓ¦Óõİ汾£º

const autoUpdater = require('auto-updater');
const appVersion = require('./package.json').version;
const os = require('os').platform();

È»ºóÅäÖ÷¾¶£¬¸Ã·¾¶»áÒòϵͳ£¨Windows ºÍ Mac£©²»Í¬¶øÓÐËù²îÒ죨ÖÁÓÚÔ­Òò£¬»áÔÚ Windows Õ½ڿ´µ½£©£º

var updateFeed = 'http://localhost:3000/updates/latest';
if (process.env.NODE_ENV !== 'development') {
updateFeed = os === 'darwin' ?
'https://mysite.com/updates/latest' :
'http://download.mysite.com/releases/win32';
}
autoUpdater.setFeedURL(updateFeed + '?v=' + appVersion);

¸æËß Electron µ½ÄÄÀï¼ì²âа汾

autoUpdater Ä£¿éÌṩÁËһЩʼþ£¬Äã¿Éͨ¹ýäÖȾ½ø³Ì´¥·¢ËüÃÇ£¨ÒëÕß×¢£ºÍ¨¹ý IPC ͨѶģ¿é£©£¬Ïë»ñÈ¡¸ü¶àÐÅÏ¢£¬¿É²éÔÄ auto-Updater ÎĵµÒ³Ãæ ¡£Ïà¹Ø½»»¥µÄʵÏÖ¾ö¶¨È¡¾öÓÚÄãÈçºÎ´¦ÀíÕâЩʼþ£¨Èç·¢Éú´íÎóµÈ£©£¬²¢Í¨ÖªÓû§¡£µ«Äã×îºóÒ»²½Ó¦¸Ã×öµÄÊÇ£º

autoUpdater.quitAndInstall();

½«ÉÏÊöÓï¾ä·ÅÔÚÖ÷½ø³ÌÎļþºó£¬Ó¦ÓûáÒÔб¾°æµÄÐÎÊ½ÖØÆô¡£ÔÞ£¡

Windows

ÈçÄãÏëÏóµÄÄÇÑù£¬ÔÚ Windows ÉÏʵÏÖ×Ô¶¯¸üÐÂÊÇͨ¹ý Squirrel.Windows¡£µ«ËüµÄ´¦Àí·½Ê½Óë OSX ÍêÈ«²»Í¬¡£

Óë Squirrel.Mac ²»Í¬µÄµãÔÚÓÚ£ºSquirrel.Windows ²¢²»ÐèÒªÒ»¸öÓÃÓÚ¼ì²âа汾µÄ API ·¾¶£¬ËüÐèÒªµÄÊÇÒ»¸öÎļþ·þÎñÆ÷£¬ËùÒÔÄã¿ÉÒÔ¼òµ¥µØ½«ÎļþÍÏ×§µ½ Amazon S3 bucket ÉÏ¡£ÁíÍ⣬¸Ã Squirrel ¸üÐÂÆ÷²¢²»ÄÚÖÃÓÚ Electron£¬ËüÊÇÒ»¸öµÚÈý·½ÒÀÀµ¡£ÕâÒâζ×ÅÄãÐèҪΪÄãËù´ò°üµÄ Windows Ó¦ÓÃÉú³ÉÒ»¸ö°²×°Æ÷£¬ÕâÑùËü²Å»á°üº¬ Squirrel ¸üÐÂÆ÷¡£

Amazon S3 bucket£ºS3 µÄÊý¾Ý´æ´¢½á¹¹·Ç³£¼òµ¥£¬¾ÍÊÇÒ»¸ö±âƽ»¯µÄÁ½²ã½á¹¹£ºÒ»²ãÊǴ洢Ͱ£¨Bucket£¬Óֳƴ洢¶Î£©£¬ÁíÒ»²ãÊÇ´æ´¢¶ÔÏó£¨Object£¬ÓÖ³ÆÊý¾ÝÔª£©¡£

ºÃÏûÏ¢ÊÇ£ºWindows µÄ°²×°°üºÍ¸üÐÂÆ÷µÄÔËÐйý³Ì˳»¬µÄ¡£ÒòΪµ±ÄãÆô¶¯ Setup.exe ʱ£¬Äã»á·¢ÏÖ°²×°ºÍÆô¶¯¸ÃÓ¦ÓÃÊÇѸËٵġ£Ã»ÓÐÎÞÁĵݲװÏòµ¼ºÍÒ»Ö±°´¡°ÏÂÒ»²½¡±¡¢×îºó°´¡°Íê³É¡±µÄ²½Ö裬²»È»Óë´ó¶àÊý Windows °²×°Æ÷Èç³öÒ»ÕÞ¡£µ±È»£¬ËüÒ²ÄÜÉú³É delta packages£¬ÕâÈÃÄãÔÚÖ´ÐиüÐÂʱ£¬²»±ØÏÂÔØÕû¸öÓ¦Óã¬ÕâÕæµÄÊÇÒ»Á÷°¡¡£

ÒëÕß×¢£ºÎÒͨ¹ý electron-builder Éú³ÉµÄ Windows °²×°°üÓëÎÒÃdz£¼ûµÄÈí¼þ°²×°½çÃæ²»Ì«Ò»Ñù£¬ËûûÓа²×°Ïòµ¼ºÍµã»÷¡°ÏÂÒ»²½¡±£¬Ö»ÓÐÒ»¸ö°²×°Ê±µÄ gif ¶¯»­£¨Ä¬È쵀 gif ¶¯»­ÈçÏÂͼ£©£¬Òò´ËÒ²¾ÍûÓÐÈÃÓû§Ñ¡Ôñ°²×°Â·¾¶µÈȨÀû¡£Ò²Ðí×÷Õßϰ¹ßÁË Mac µÄ°²×°·½Ê½£¨¼´ÏÂÃæµÚ¶þ·ùͼ£©£¬ËùÒÔ»á¾õµÃ Windows µÄ°²×°°ü±È½Ï·±Ëö¡£

Mac ³£¼ûµÄ°²×°Ä£Ê½£¬½«¡°×ó²àµÄÓ¦ÓÃͼ±ê¡±ÍÏ×§µ½¡°ÓÒ²àµÄ Applications¡±¼´¿É

Èç¹ûÄãÏëΪ Windows Ó¦ÓÃÉú³É³£¼ûµÄ¡¢ÐèÒªµã»÷¡°ÏÂÒ»²½¡±µÄ£¨¼´Óû§¿É×Ô¶¨ÒåµÄ£©°²×°°ü£¬¿ÉÒÔͨ¹ý NSIS ³ÌÐò£¬¾ßÌå¿É¿´ÕâÆª½Ì³Ì¡¶[½ÌŒW]Ö»Òª10·Ö犌W•þʹÓà NSIS °üÑbÄúµÄ×ÀÃæÜ›ów¨C°²Ñb³Ìʽ´ò°ü¡£ÍêÈ«ÃâÙM¡£¡·¡£µ±È»£¬Ç°ÌỹÊÇͨ¹ý electron-packager ´ò°ü³ÌÐò¡£

NSIS£¨Nullsoft Scriptable Install System£©ÊÇÒ»¸ö¿ªÔ´µÄ Windows ϵͳϰ²×°³ÌÐòÖÆ×÷³ÌÐò¡£ËüÌṩÁ˰²×°¡¢Ð¶ÔØ¡¢ÏµÍ³ÉèÖá¢Îļþ½âѹËõµÈ¹¦ÄÜ¡£ÕâÈçÆäÃû×ÖËùÖ¸³öµÄÄÇÑù£¬NSIS ÊÇͨ¹ýËüµÄ½Å±¾ÓïÑÔÀ´ÃèÊö°²×°³ÌÐòµÄÐÐΪºÍÂß¼­µÄ¡£NSIS µÄ½Å±¾ÓïÑÔºÍͨ³£µÄ±à³ÌÓïÑÔÓÐÀàËÆµÄ½á¹¹ºÍÓï·¨£¬µ«ËüÊÇΪ°²×°³ÌÐòÕâÀàÓ¦ÓÃËùÉè¼ÆµÄ¡£

»µÏûÏ¢ÊÇ£¨ÖÁÉÙ¶ÔÓÚ Mac Óû§£©£ºÎÒ²»ÄÜÔÚ OSX ÉÏÕýÈ·µØÉú³É°²×°°ü£¬ËùÒÔÎÒ½¨ÒéÄãÏÂÔØÒ»¸ö Windows ÐéÄâ»ú£¨Èç VirtualBox¡¢parallels£©£¬²¢°²×° Node.js¡£

ÒëÕß×¢£ºÎÒͨ¹ý electron-builder£¬¿ÉÔÚ MacOS ÖÐÖ±½Ó£¨¼´²»Í¨¹ýÐéÄâ»ú£©Éú³É Windows °²×°°ü£¨¼´Setup.exe£©¡£¾ßÌå¿É ²é¿´ÕâÀï¡£

¼ÙÉèÄãÒѾ­ÅäÖúò¢ÉèÖÃÁËÕýÈ·µÄ¸üÐÂÔ´£¬ÄÇôÔÚÉÏÊö OSX Õ½ڵĴúÂë»ù´¡ÉÏ£¬»¹ÐèÒª´¦ÀíһЩ Squirrel.Windows ʼþ£¬ÕâЩʼþÓë OSX ÉϵIJ»Í¬¡£Äã¿ÉÒԲ鿴¸Ã °¸Àý¡£È»¶ø£¬ÕâÀïÌṩһ¸ö¸ü¼òµ¥µÄ·½Ê½£¬½öÐè°²×° electron-squirrel-startup npm Ä£¿é£º

npm install electron-squirrel-startup --save-dev

È»ºóÔÚ Electron µÄÖ÷½ø³ÌÎļþ¶¥²¿Ìí¼ÓÒÔÏÂÒ»ÐÐÓï¾ä£º

if (require('electron-squirrel-startup')) return;

Squirrel.Windows ʼþÓ¦¸Ã±»¾¡Ôç´¦Àí£¬ÏÔÈ»£¬ÕâÊÇÒª×ߵķ¡£

×îºó£¬ÎªÁËÉú³É°²×°°ü£¬ÎÒÃÇ»áʹÓà Atom µÄ grunt-electron-installer¡£ÎªÊ²Ã´ËüÊÇÒ»¸ö grunt ²å¼þ£¬¶ø²»ÊÇÒ»¸ö¼òµ¥µÄÃüÁîÐй¤¾ß¡ª¡ªÎÒ²»ÖªµÀ£¬µ«Ëü¾ÍÊǽâ¾ö·½·¨¡£

¸üУºElectron ÍŶӿª·¢ÁËÒ»¸ö¶ÀÁ¢µÄ°²×°Æ÷´ò°ü¹¤¾ß¡ª¡ªelectron-winstaller£¬ËüÓµÓÐÓë grunt task ͬÑùµÄ API

½« Electron-packager Éú³ÉµÄ win32 Îļþ¼Ð´ò°üѹËõ£¨zip£©£¬È»ºó½«Æä¸´ÖƵ½ÐéÄâ»úÉÏ¡£ÔÚ¸ÃÎļþ¼ÐÍ⣨ÒëÕß×¢£ºÔÚ½âѹºó£©£¬ÄãÐèÒªÅäÖà grunt task£¬¸Ã task »áÉú³É°²×°°ü£¬Òò´ËÄãÓ¦¸ÃÊ×ÏȰ²×°ËùÓÐÒÀÀµ£º

npm install -g grunt-cli
npm install grunt grunt-electron-installer --save-dev

¼ÙÉè Windows ±àÒëºóµÄ°ü·ÅÖÃÔÚÒ»¸ö³ÆÎª MyApp-win32-ia32 µÄÎļþ¼ÐÏ¡£ÏÂÃæÕ¹Ê¾ Gruntfile µÄÑù×Ó£º

module.exports = function(grunt) {
grunt.initConfig({
'create-windows-installer': {
ia32: {
appDirectory: './MyApp-win32-ia32',
outputDirectory: './dist',
name: 'MyApp',
description: 'MyApp',
authors: 'My Company Ltd',
exe: 'MyApp.exe'
}
}
});
grunt.loadNpmTasks('grunt-electron-installer');
};

ÐèҪעÒâµÄÊÇ£ºÈç¹ûÄãÏëΪÄãµÄÎļþºÍ°²×°°ü½øÐдúÂëÇ©Ãû£¨code-sign£©²Ù×÷£¬ÄãÒ²ÐèҪΪ¸Ã task ÅäÖÃÌṩËùÓвÎÊý¡£

ÔËÐиà grunt task ºó£¬»áÔÚ ./dist Ŀ¼Ï²úÉúÒ»¶ÑÎļþ£º

grunt create-windows-installer

ÄãÔ¤ÆÚ¿´µ½µÄÓëÏÂÃæÀàËÆ£º

©¸©¤©¤ dist
©À©¤©¤ MyApp.1.0.0.nupkg
©À©¤©¤ MyApp-1.0.0-full.nupkg
©À©¤©¤ RELEASES
©À©¤©¤ Setup.exe

ÔÚÏÂÒ»´Î·¢²¼Ê±£¬¸Ã°²×°Æ÷Ò²»á×Ô¶¯Éú³ÉÒ»¸ö delta packages¡£

ÏÖÔÚ½øÐÐ×î¼òµ¥µÄÒ»²½ ¡ª¡ª ÍÏ×§ÕâЩÎļþµ½ S3 bucket ½øÐÐÉÏ´«¡£È»ºó url Ö¸Ïò¸ÃÎļþ¼Ð£¨°üº¬ RELEASES ºÍ nupkg Îļþ£©¡£µ±Ó¦ÓÃÔËÐÐÔÚ Windows ϵͳÉÏʱ£¬Ëü»á½«¸Ã url ÉèÖõ½ updateFeed ²ÎÊýÉÏ£¨ÒòΪÎÒÃÇÔÚÏÈǰµÄ OSX Õ½ڴ¦ÒÑʵÏÖ£©¡£

×¢Ò⣺ĿǰÓÐÒ»¸öÓë°²×°Æ÷µÄ node-rcedit Ä£¿éÏà¹ØµÄÎÊÌ⣬¸ÃÄ£¿é»áÔÚÄã³¢ÊÔÈ¥ÐÞ¸Ä .exe ÎļþµÄһЩԪÐÅÏ¢ºÍÌæ»»Ä¬ÈÏͼ±ê£¨icon£©Ê±Å׳ö´íÎó¡£Äã¿ÉÒÔÔÚ ÕâÀï²é¿´¸Ã issue¡£Òò´Ë£¬Ä¿Ç°Èç¹ûÄãÏëΪ°²×°Æ÷ÎļþÐÞ¸Ä icon »òΪÆä¸³Óèʵ¼ÊÊý¾Ý£¬Äã¿ÉÄܲ»µÃ²»ÊÖ¶¯µØÍ¨¹ý ResHacker ½øÐÐÐ޸ġ£

½áÊøÓï

Ï£ÍûÕâÆªÎÄÕÂÄÜ×÷Ϊһ¸öºÃµÄÆðµã£¬ÄܰïÖúºÍ·þÎñÿһ¸öÕýÔÚΪ Electron Ó¦ÓÃʵÏÖ×Ô¶¯¸üеÄÅóÓÑÃÇ¡£

 
   
4993 ´Îä¯ÀÀ       28
Ïà¹ØÎÄÕÂ

Éî¶È½âÎö£ºÇåÀíÀôúÂë
ÈçºÎ±àд³öÓµ±§±ä»¯µÄ´úÂë
ÖØ¹¹-ʹ´úÂë¸ü¼ò½àÓÅÃÀ
ÍŶÓÏîÄ¿¿ª·¢"±àÂë¹æ·¶"ϵÁÐÎÄÕÂ
Ïà¹ØÎĵµ

ÖØ¹¹-¸ÄÉÆ¼ÈÓдúÂëµÄÉè¼Æ
Èí¼þÖØ¹¹v2
´úÂëÕû½àÖ®µÀ
¸ßÖÊÁ¿±à³Ì¹æ·¶
Ïà¹Ø¿Î³Ì

»ùÓÚHTML5¿Í»§¶Ë¡¢Web¶ËµÄÓ¦Óÿª·¢
HTML 5+CSS ¿ª·¢
ǶÈëʽC¸ßÖÊÁ¿±à³Ì
C++¸ß¼¶±à³Ì