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,
          // data 传递给客户端,最终 resolve 它
      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
    复制代码
    分类:
    前端
    标签: