electron-builder
在打包时会检测cache中是否有
electron
包,如果没有的话会从
github
上拉取,在国内网络环境中拉取的过程大概率会失败,所以你可以自己去下载一个包放到cache目录里。
各个平台的目录地址
Linux: $XDG_CACHE_HOME or ~/.cache/electron/
MacOS: ~/Library/Caches/electron/
Windows: ~/AppData/Local/electron/Cache/
下载地址:
github.com/electron/el…
版本号根据你自己使用的版本来下载!
mac 打包
mac 打包会检查环境中是否有签名钥匙,及其检测是否合法。没有的时候会直接跳过,如果没有签名的文件的话,直接跳过吧。
我们没有现阶段没用弄签名文件,这里暂时没有经验可分享。
windows 打包
windows 打包要手动下载三个文件:
github.com/electron-us…
github.com/electron-us…
github.com/electron-us…
如果打包的时候再下载,基本上都失败。提前下好了,分别放在下面的路径下:
axios.defaults.adapter = require('axios/lib/adapters/http')
因为electron环境下必须强制使用node的网络请求模块
xcode找不到
设置xcode-select到指定的位置
sudo xcode-select -s /Applications/Xcode.app/Contents/Developer
如果安装了多个xcode,则只需要对xcode.app进行替换。
windows 文件路径处理
ES9 之前,\u
表示 unicode 转义,\x
表示十六进制转义,``后跟一个数字表示八进制转义,这使得创建特定的字符串变得不可能,例如Windows文件路径C:\uuu\xxx\111
。
String.raw `C:\Windows\System`
'C:\\Windows\\System'
String.raw `C:\Windows\System`
'C:\Windows\System'
ipcRenderer.on多次执行
每次触发ipcRenderer模块都会新建一个新的ipcRenderer,导致ipcRenderer内的函数块会被执行n次(取决于当前残留有多少个ipcRenderer)。
封装server.js: (server在主进程中使用)
import { ipcMain } from 'electron'
const _map = new Map()
ipcMain.on('from-client', (event, params) => {
const reply = function (data) {
event.reply('from-server', {
_symbol: params._symbol,
const ctx = {
reply,
type: params.type
const cb = _map.get(params.type)
if (typeof cb === 'function') {
cb(ctx, params.data)
} else {
cb(ctx, '没有注册~')
export default function server (type, callback) {
_map.set(type, callback)
封装request.js:(request在渲染进程中使用)
const { ipcRenderer } = window.require('electron')
const _map = new Map()
ipcRenderer.on('from-server', (event, params) => {
const cb = _map.get(params._symbol)
if (typeof cb === 'function') {
_map.delete(params._symbol)
cb(params.data)
export default function request (type, data) {
const _symbol = Date.now() + type
return new Promise(resolve => {
_map.set(_symbol, (data) => {
resolve(data)
ipcRenderer.send('from-client', {
_symbol: _symbol,
type: type,
data: data
复制代码