关于 Electron 的流水账记录
上手和使用
下载 electron-quick-start
仓库到本地,基于该仓库进行开发
1 2 3 4 5 6 7 8
| $ git clone https://github.com/electron/electron-quick-start $ cd electron-quick-start $ npm install && npm start
|
在 quick start 中,入口文件 main.js
使用了 Electron 的 API 调起了一个 BrowserWindow
的实例,并在这个实例中,打开了一个在本地的 HTML 文件 index.html
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| function createWindow () { mainWindow = new BrowserWindow({width: 800, height: 600}) mainWindow.loadURL(url.format({ pathname: path.join(__dirname, 'index.html'), protocol: 'file:', slashes: true })) mainWindow.on('closed', function () { mainWindow = null }) }
|
接下来的事情就交给这个 HTML 文件了,你可以根据自己的实际需要随意编写,在 base64-convertor
这个应用中,我需要在前端展示一个 “一键转换” 的功能,所以需要一个输入框和一个输出结果的框,以及一个 “转换” 按钮。
1 2 3 4 5 6 7 8 9
| <div class="column"> <div> <textarea class="box" id="input"></textarea> </div> <button id="convert" class="btn">转换</button> </div> <div class="column"> <div id="output" class="box"></div> </div>
|
然后我们需要在点击转换按钮时,调用 js-base64
的 API 将用户输入的字符串进行转换。首先在 index.html
里面引入 JS 脚本:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| <!DOCTYPE html> <html> <head> </head> <body> <script> require('./renderer.js') </script> </body> </html>
|
注意到我们可以直接在页面内使用 require
方法,这个和一般的 Web 网页开发有所不同。在 renderer.js
里面我们编写实际的逻辑:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| const Base64 = require('js-base64').Base64 let inputEl = document.getElementById('input') let outputEl = document.getElementById('output') let convertBtn = document.getElementById('convert') convertBtn.addEventListener('click', () => { const val = inputEl.value const output = Base64.encode(val) outputEl.innerHTML = output })
|
然后就可以了~~
开发查看效果
electron .
打包 & 构建 Installer
使用 electron-packager 来进行打包,然后对应 MacOS 和 Windows 不同平台,需要用不同的构建 Installer 方法。以下操作都在 MacOS 上执行。
Building Mac OS App
这里我们使用 electron-installer-dmg 来构建 MacOS 的 installer,其中参数的含义为:
asar=true
:在打包过程中使用 asar,将应用的源代码打包成一个压缩包
--overwrite
:总是覆写原有路径上的同名文件
--platform=darwin
:构建 Mac OS 应用(若需要在 Mac Apple Store 上架则需要指明是 mas
)
--out=builds
:输出到 builds/
目录下
1 2 3 4 5
| ELECTRON_MIRROR="https://npm.taobao.org/mirrors/electron" electron-packager . --overwrite --asar=true base64-convertor --platform=darwin --out=builds electron-install-dmg --out=installers --overwrite ./builds/base64-convertor-darwin
|
值得一提的是,应用的名字不可以超过 27 个字:https://github.com/LinusU/node-appdmg/issues/48
Building Windows App
在 Mac OS 系统上构建 Windows 应用,需要的步骤会更繁琐一些。其实我觉得必要性也不是太大
本着尝试的态度,还是试了一下整个流程,这里仅列出打包 win32 的操作,win64 的并没有尝试。
准备工作:下载 Wine, Mono
在非 Windows 平台中,需要 提前安装 wine 和 mono:
1 2
| brew install wine brew install mono
|
打包应用
1
| ELECTRON_MIRROR=\"https://npm.taobao.org/mirrors/electron/\" electron-packager . --overwrite --asar=true base64-convertor --platform=win32 --out=builds
|
构建 Windows Installer
参照了 @crilleengvall 的 electron 教程中 关于 windows installer 的这篇
1
| node ./create-win32-installer.js
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| const createWindowsInstaller = require('electron-winstaller').createWindowsInstaller const path = require('path') function getInstallerConfig () { const rootPath = path.join('./') const outPath = path.join(rootPath, 'builds') const config = { appDirectory: path.join(outPath, 'base64-convertor-win32-x64'), authors: 'Allen Wu', noMsi: true, outputDirectory: path.join(rootPath, 'installers'), exe: 'base64-convertor.exe', setupExe: 'base64-convertor-installer.exe', setupIcon: path.join(rootPath, 'assets', 'icons', 'hiido.ico') } return Promise.resolve(config) } getInstallerConfig() .then(createWindowsInstaller) .catch(err => { console.error(err.message || err) process.exit(1) })
|
如果在过程中遇到了 spawn mono ENOENT
的问题,就是没有安装 mono
这个依赖的原因:https://github.com/electron/windows-installer/issues/112
TODO
尝试其他 electron 的打包工具,比如:
Reference