章节内容
历史介绍
开发环境
代码封装
函数式
获取小说命令行版(上)
获取小说命令行版(中)
获取小说命令行版(下)
嵌入到应用中
插件机制
文字转语音
设置与信号中断
插件商店
下载与删除(上)
下载与删除(下)
通知栏程序
播放功能
美化界面
数据可视化(上)
数据可视化(中)
数据可视化(下)
嵌入到应用中
打包应用

这一小节的  坑比较多,代码我会上传到 Github

# 修改打包脚本

修改 package.json , 通过后置钩子,复制小图标。没有小图标打包后的应用会打不开,很难以发现这个问题,具体如何调试,后面再说。

"compile": "NODE_ENV=production electron-webpack",
"postcompile": "cp ./src/main/tray_w24h24.png ./dist/main",

# 添加打包配置

修改 package.json ,添加一下配置,它来自于 electron-build 其实基本上没有多少需要配置的,只需要配置个打包的图标即可。 music.icns 是使用 svg 文件(为了保证高精度)转换来的,使用的是 image2icon 。

"name": "reader",
"version": "0.0.1",
"build": {
    "appId": "me.yugo",
    "mac": {
        "category": "me.yugo",
        "icon": "./music.icns"
    }
},

npm run dist 最终生成在 dist 的 yml 配置文件会像这样

directories:
  output: dist
  buildResources: build
extraMetadata:
  main: main.js
files:
  - from: .
    filter:
      - package.json
  - from: dist/main
  - from: dist/renderer
  - from: dist/renderer-dll
extraResources:
  - from: static
    to: static
appId: me.yugo
mac:
  category: me.yugo
  icon: ./music.icns
extends: electron-webpack/electron-builder.yml
electronVersion: 2.0.4

# 将 dock 的图标隐藏

在 ready 里面调用

app.dock.hide()

# 判断生产环境

在 createMainWindow 中,这里我  换了一种范式。

import { format as formatUrl } from 'url'

if (process.env.NODE_ENV != 'production') {
  win.webContents.openDevTools()
  win.loadURL(`http://localhost:${process.env.ELECTRON_WEBPACK_WDS_PORT}`)
} else {
  win.loadURL(
    formatUrl({
      pathname: join(__dirname, 'index.html'),
      protocol: 'file',
      slashes: true
    })
  )
}

# 修复 Music.svelte 图标

图标显示会有异常我们修复一下。

function getStaticPath() {
  const isDevelopment = process.env.NODE_ENV === 'development'
  const staticPath = isDevelopment
    ? ''
    : 'file://' + __dirname.replace(/app\.asar$/, 'static')
  return staticPath
}

添加到 data 里面去。

data() {
    return {
        files: [],
        title: '',
        staticPath: getStaticPath() + '/'
    };
},

拼接 url

<div class="flex">
    <button on:click="file()"><img src="{staticPath + "plus-circle.png"}" width="25" height="25" alt="add"></button>
    <button on:click="play()"><img src="{staticPath + "play-circle.png"}" width="25" height="25" alt="play"></button>
    <button on:click="pause()"><img src="{staticPath + "time-out.png"}" width="25" height="25" alt="stop"></button>
    <button on:click="prev()"><img src="{staticPath + "left-circle.png"}" width="25" height="25" alt="prev"></button>
    <button on:click="next()"><img src="{staticPath + "right-circle.png"}" width="25" height="25" alt="next"></button>
</div>

# 关于路径

最终打包好的路径会像下图所示,并非如 compile 之后的 dist 目录所示,这是额外要注意的。

# 打包调试

如何解压 asar 文件

npm install -g asar
asar e app.asar app

如何调试

进入到解压后的 app

npx electron ./main.js

这样当有错误的时候,会在终端报出。

# 开始打包

npm run dist:dir

# 关于更新的说明

 对于打包,其实我有录制过非常详细的课程在我的个人网站可以寻到,之所以不讲的很细是因为  大多数人更希望知道如何快速吃到螃蟹,而不是烹饪螃蟹 🦀 。

更新在 mac os 需要苹果开发者认证证书签名,所以你需要付费,在 windows 下面可以不用签名。更新会用到一个 latest-xxx.yml 的文件,它在 dist 目录下,更新会拉取这个文件判断版本并进行更新,更新相关 API,Electron 内置。更新通常需要一个更新服务器,部署在云端。

# 发布到 Github

点击 release 按钮,上传即可。