接上一篇文章使用vue-cli-plugin-electron-builder開發(fā)vue-cli3.0+Electron桌面開發(fā)應(yīng)用
建議先看文章最后的幾個坑,以免入坑不能爬坑
vue-cli-plugin-electron-builder打包構(gòu)建用的是electron-builder,electron-builder的官網(wǎng)
我們已經(jīng)安裝過vue-cli-plugin-electron-builder就不用再去安裝一遍electron-builder了,我也沒有試過重新安裝一遍好不好用,感興趣的自行測試
第一步,到官網(wǎng)看文檔

好巧,我們用的就是vue CLI3,點(diǎn)進(jìn)去看看,然后get Start,點(diǎn)擊左側(cè)菜單Configuring

TIP
All CLI arguments passed to electron:build will be forwarded to electron-builder.
這句話的意思就是:這些參數(shù)都是通過electron:build命令來提交給electron-builder的。
再通俗的講:我們用electron:build來打包的參數(shù)配置格式如圖所示。即:
// vue.config.js
module.exports = {
pluginOptions: {
electronBuilder: {
builderOptions: {
// options placed here will be merged with default configuration and passed to electron-builder
}
}
}
}
但是,我們在我們的項(xiàng)目中沒有發(fā)現(xiàn)vue.config.js這個文件,這是由于vue-cli3.0是號稱0配置的,所以我們自己在根目錄下創(chuàng)建一個vue.config.js文件即可。注意!根目錄?。。?!
第二步,寫配置參數(shù)
我們本質(zhì)上用的還是electron-builder來進(jìn)行打包的,所以參數(shù)肯定是在electron-builder的官網(wǎng)上
回到electron-builder官網(wǎng),并點(diǎn)擊菜單 Configuration

根據(jù)官網(wǎng)的文檔,我們可以寫出配置如下:
module.exports = {
pluginOptions: {
electronBuilder: {
builderOptions: {
"appId": "com.example.app",
"productName":"aDemo",//項(xiàng)目名,也是生成的安裝文件名,即aDemo.exe
"copyright":"Copyright ? 2019",//版權(quán)信息
"directories":{
"output":"./dist"http://輸出文件路徑
},
"win":{//win相關(guān)配置
"icon":"./shanqis.ico",//圖標(biāo),當(dāng)前圖標(biāo)在根目錄下,注意這里有兩個坑
"target": [
{
"target": "nsis",//利用nsis制作安裝程序
"arch": [
"x64",//64位
"ia32"http://32位
]
}
]
}
}
}
}
}
構(gòu)建一下試試:
npm run electron:build
D:\Electron\demo>npm run electron:build
> demo@0.1.0 electron:build D:\Electron\demo
> vue-cli-service electron:build
INFO Bundling render process:
\ Building modern bundle for production...
DONE Compiled successfully in 5022ms 4:45:31 PM
File Size Gzipped
dist_electron\bundled\js\chunk-vendors 65.14 KiB 23.43 KiB
.2026470a.js
dist_electron\bundled\js\app.4aea6141. 4.53 KiB 1.61 KiB
js
dist_electron\bundled\css\app.e2713bb0 0.33 KiB 0.23 KiB
.css
Images and other types of assets omitted.
DONE Build complete. The dist_electron\bundled directory is ready to be deployed.
INFO Check out deployment instructions at https://cli.vuejs.org/guide/deployment.html
| Bundling main process...
DONE Compiled successfully in 5152ms 4:45:36 PM
File Size Gzipped
dist_electron\bundled\background.js 160.44 KiB 49.67 KiB
Images and other types of assets omitted.
INFO Building app with electron-builder:
? electron-builder version=20.44.4
? description is missed in the package.json appPackageFile=D:\Electron\demo\dist_electron\bundled\package.json
? author is missed in the package.json appPackageFile=D:\Electron\demo\dist_electron\bundled\package.json
? writing effective config file=dist\builder-effective-config.yaml
? no native production dependencies
? packaging platform=win32 arch=x64 electron=5.0.0 appOutDir=dist\win-unpacked
? no native production dependencies
? packaging platform=win32 arch=ia32 electron=5.0.0 appOutDir=dist\win-ia32-unpacked
? building target=nsis file=dist\aDemo Setup 0.1.0.exe archs=x64, ia32 oneClick=true perMachine=false
? building block map blockMapFile=dist\aDemo Setup 0.1.0.exe.blockmap
DONE Build complete!
成功!

LINUX、MAC的道理一樣,我基本用不到這兩個系統(tǒng),所以不做研究,感興趣的可以自己看文檔。
現(xiàn)在我們win系統(tǒng)32位和64位的生成出來了,那么如果將其制作成對應(yīng)的安裝程序呢?
有兩種方法,第一種就是跟上面一樣,寫配置。第二種,就是運(yùn)用NSIS工具。
第三步:制作成安裝程序
第一種方法:配置參數(shù)的方法
module.exports = {
pluginOptions: {
electronBuilder: {
builderOptions: {
"appId": "com.example.app",
"productName":"aDemo",//項(xiàng)目名,也是生成的安裝文件名,即aDemo.exe
"copyright":"Copyright ? 2019",//版權(quán)信息
"directories":{
"output":"./dist"http://輸出文件路徑
},
"win":{//win相關(guān)配置
"icon":"./shanqis.ico",//圖標(biāo),當(dāng)前圖標(biāo)在根目錄下,注意這里有兩個坑
"target": [
{
"target": "nsis",//利用nsis制作安裝程序
"arch": [
"x64"http://64位
]
}
]
},
"nsis": {
"oneClick": false, // 是否一鍵安裝
"allowElevation": true, // 允許請求提升。 如果為false,則用戶必須使用提升的權(quán)限重新啟動安裝程序。
"allowToChangeInstallationDirectory": true, // 允許修改安裝目錄
"installerIcon": "./shanqis.ico",// 安裝圖標(biāo)
"uninstallerIcon": "./shanqis.ico",//卸載圖標(biāo)
"installerHeaderIcon": "./shanqis.ico", // 安裝時頭部圖標(biāo)
"createDesktopShortcut": true, // 創(chuàng)建桌面圖標(biāo)
"createStartMenuShortcut": true,// 創(chuàng)建開始菜單圖標(biāo)
"shortcutName": "demo", // 圖標(biāo)名稱
},
}
}
}
}
注意我只生成了64位,安裝試一試:




正常!
如果要求更高的話,還可以自定義很多東西。還是看文檔!
這篇文章寫得挺詳細(xì),可以參考,網(wǎng)址
注意一點(diǎn),他的配置文件和我們的不一樣,我們是在vue.config.js中,并且沒有build!
第二種方法:利用nsis軟件
我們沒有配置nsis時,同時構(gòu)建了32位和64位
module.exports = {
pluginOptions: {
electronBuilder: {
builderOptions: {
"appId": "com.example.app",
"productName":"aDemo",//項(xiàng)目名,也是生成的安裝文件名,即aDemo.exe
"copyright":"Copyright ? 2019",//版權(quán)信息
"directories":{
"output":"./dist"http://輸出文件路徑
},
"win":{//win相關(guān)配置
"icon":"./shanqis.ico",//圖標(biāo),當(dāng)前圖標(biāo)在根目錄下,注意這里有兩個坑
"target": [
{
"target": "nsis",//利用nsis制作安裝程序
"arch": [
"x64",//64位
"ia32"http://32位
]
}
]
}
}
}
}
}

準(zhǔn)備工作:
下載nsis軟件:Nullsoft Install System
鏈接:https://pan.baidu.com/s/1oLRrnclChU09xcosUa_hTw
提取碼:o6iu
解壓,安裝
安裝后,會有兩個快捷方式

1、打開上面一個

2、點(diǎn)擊HW VNISEdit

3、選擇文件》新建腳本:向?qū)?/h6>
image.png
4、點(diǎn)擊下一步,進(jìn)入應(yīng)用程序信息,填寫對應(yīng)的信息,下一步
image.png
5、圖標(biāo)需是icon,語言中文,安裝程序文件根據(jù)實(shí)際情況設(shè)置,別改后綴
image.png
6、閃屏和背景設(shè)置,沒必要修改,下一步
image.png
7、默認(rèn)允許用戶更改安裝目錄;授權(quán)文件若有就寫,如果沒有就清空!清空!清空!否則后面編譯會出問題
image.png
8、把默認(rèn)的兩個文件刪除掉,然后點(diǎn)擊添加
image.png
image.png
9、添加源文件(注意我選擇的是64位的,如果是32位的到win-ia32-unpacked文件中找),選好后點(diǎn)擊確定,先不要下一步
image.png
10、添加文件樹
image.png
11、選擇源文件對應(yīng)的文件夾
image.png
12、勾選包含子目錄,確定,下一步
image.png
13、修改開始菜單
image.png
14、設(shè)置安裝成功后啟動的程序,默認(rèn)就是我們打包后的啟動程序,不用改,下一步
image.png
15、設(shè)置卸載程序,下一步
image.png
16、勾選保存腳本和轉(zhuǎn)換文件路徑到相對路徑,點(diǎn)擊完成
image.png
17、保存一個位置
image.png
18、保存后通常會自行打開腳本,如果沒有打開,請自行到剛才保存的位置打開,打開后界面如下
image.png
19、編譯并運(yùn)行
image.png
20、如果剛才沒有清空許可協(xié)議,會報(bào)錯。解決:刪除報(bào)錯的這一行,重新編譯并運(yùn)行
image.png
21、正在編譯,需要一段時間
image.png
22、編譯成功會自動彈出安裝頁面
image.png
23、安裝后并運(yùn)行,發(fā)現(xiàn)正常
image.png
24、安裝程序應(yīng)該跟保存的編譯文件同一個目錄
image.png
25、開始菜單
image.png
26、第三方管理軟件可以查看,出品公司
image.png
附上碰到的坑:
坑1:vue.config.js中配置參數(shù)不能有空格

























"appId ": "com.example.app",有空格會報(bào)錯,不能識別的參數(shù)
"appId": "com.example.app",正確無空格的
報(bào)錯部分樣式,如下:
Error: Configuration is invalid.
- configuration has an unknown property 'appId '. These properties are valid:
object { $schema?, afterAllArtifactBuild?, afterPack?, afterSign?, apk?, appId?, appImage?, appx?, artifactBuildCompleted?, artifactBuildStarted?, artifactName?, asar?, asarUnpack?, beforeBuild?, buildDependenciesFromSource?, buildV
ersion?, compression?, copyright?, cscKeyPassword?, cscLink?, deb?, detectUpdateChannel?, directories?, dmg?, electronCompile?, electronDist?, electronDownload?, electronUpdaterCompatibility?, electronVersion?, extends?, extraFiles?, e
xtraMetadata?, extraResources?, fileAssociations?, files?, forceCodeSigning?, framework?, freebsd?, generateUpdatesFilesForAllChannels?, icon?, includePdb?, launchUiVersion?, linux?, mac?, mas?, msi?, muonVersion?, nodeGypRebuild?, nod
eVersion?, npmArgs?, npmRebuild?, npmSkipBuildFromSource?, nsis?, nsisWeb?, onNodeModuleFile?, p5p?, pacman?, pkg?, portable?, productName?, protocols?, protonNodeVersion?, publish?, readonly?, releaseInfo?, remoteBuild?, removePackage
Scripts?, rpm?, snap?, squirrelWindows?, target?, win? }
坑2:配置圖標(biāo)時,圖標(biāo)的大小最小為256*256
"icon":"./shanqis.ico"就是這個圖標(biāo)
報(bào)錯是XXX at least 256*256
坑3:不要直接把.jpg或其他格式改后綴為.ico?解決:http://ico.duduxuexi.com/到這個網(wǎng)址或其他方式自己轉(zhuǎn)換,記住是256*256的
ERROR Error: Exit code: 1. Command failed: C:\Users\Administrator\AppData\Local\electron-builder\Cache\winCodeSign\winCodeSign-2.4.0\rcedit-ia32.exe D:\dist\win-unpacked\aDemo.exe --set-version-string FileDescription aDemo --set-vers
ion-string ProductName aDemo --set-version-string LegalCopyright Copyright ? 2019 --set-file-version 0.1.0 --set-product-version 0.1.0.0 --set-version-string InternalName aDemo --set-version-string OriginalFilename --set-icon D:\Elect
ron\demo\shanqis.ico
Reserved header is not 0 or image type is not icon for 'D'
Fatal error: Unable to set icon
坑4:連接超時403錯誤,由于我們要安裝ia32,所以就要下載對應(yīng)的electron,解決辦法看我之前的一篇文章http://www.itdecent.cn/p/ced7f0c2bd40(注意,下載下來后直接放到對應(yīng)的文件夾下就可以了,不用npm安裝了)
報(bào)錯樣式:
D:\Electron\demo>npm run electron:build
> demo@0.1.0 electron:build D:\Electron\demo
> vue-cli-service electron:build
INFO Bundling render process:
| Building modern bundle for production...
DONE Compiled successfully in 5375ms 3:32:53 PM
File Size Gzipped
dist_electron\bundled\js\chunk-vendors 65.14 KiB 23.43 KiB
.2026470a.js
dist_electron\bundled\js\app.4aea6141. 4.53 KiB 1.61 KiB
js
dist_electron\bundled\css\app.e2713bb0 0.33 KiB 0.23 KiB
.css
Images and other types of assets omitted.
DONE Build complete. The dist_electron\bundled directory is ready to be deployed.
INFO Check out deployment instructions at https://cli.vuejs.org/guide/deployment.html
| Bundling main process...
DONE Compiled successfully in 5578ms 3:32:59 PM
File Size Gzipped
dist_electron\bundled\background.js 160.44 KiB 49.67 KiB
Images and other types of assets omitted.
INFO Building app with electron-builder:
? electron-builder version=20.44.4
? description is missed in the package.json appPackageFile=D:\Electron\demo\dist_electron\bundled\package.json
? author is missed in the package.json appPackageFile=D:\Electron\demo\dist_electron\bundled\package.json
? writing effective config file=D:\dist\builder-effective-config.yaml
? no native production dependencies
? packaging platform=win32 arch=x64 electron=5.0.0 appOutDir=D:\dist\win-unpacked
? no native production dependencies
? packaging platform=win32 arch=ia32 electron=5.0.0 appOutDir=D:\dist\win-ia32-unpacked
?[34m ? ?[0mdownloading ?[34mparts?[0m=8 ?[34msize?[0m=61 MB ?[34murl?[0m=https://github.com/electron/electron/releases/download/v5.0.0/electron-v5.0.0-win32-ia32.zip
?[34m ? ?[0mretrying (1)
?[34m ? ?[0mretrying (2)
?[34m ? ?[0mretrying (3)
?[31m ? ?[0mpart download request failed with status code 403