0.3.8 • Published 4 months ago

electron-version-deployer-cli v0.3.8

Weekly downloads
-
License
-
Repository
-
Last release
4 months ago

electron-version-deployer-cli

electron 版本版本更新命令行

目的

  1. 减少每次版本更新包的大小,最理想的情况是每次只更新修改的代码,而不是整个软件.
  2. 快速更新而不需要经过任何商店审核

实现原理

部署流程

检测更新流程

安装

首先在你项目的根目录(与 package.json 同级)运行

$ npm install electron-version-deployer-cli

注意 ⚠️,我们需要将它安装在 dependencies 下,因此请不要添加额外参数。

使用

添加依赖包

添加一下包到你的 devDependencies

添加后,可能会有些包出现重复,手动删下就行了(编译器会有提示)

{
  "@inquirer/prompts": "^1.2.3",
  "changelog-parser": "^3.0.1",
  "commander": "^10.0.1",
  "dompurify": "^3.0.3",
  "download": "^8.0.0",
  "electron": ">=10.0.0",
  "esno": "^0.16.3",
  "jsdom": "^22.1.0",
  "log-symbols": "=4.1.0",
  "marked": "^5.0.4",
  "netlify-cli": "^15.2.0",
  "vite": "^4.3.9",
  "wrangler": "^3.3.0"
}

由于我们需要在主进程里面调用 electron-version-deployer-cli 的检测自动更新逻辑,如果把依赖的包都放到 dependencies, 那么你的软件编译后也会附带这些依赖包,这是完全没有必要的。因此需要手动添加下

使用

主进程添加自动更新检测

在你的主进程中,添加以下代码, 来实现更新检测

// main.js
import { EVDInit } from "electron-version-deployer-cli/dist/main";

EVDInit({
  remoteUrl: import.meta.env.REMOTE_URL,
  logo: `file://${join(
    app.getAppPath(),
    "packages",
    "main",
    "dist",
    "icon.png"
  )}`,
  onError(error) {
    //  记录更新检测遇到的错误
    writeError(error, "evd");
  },
  onBeforeNewPkgInstall(next, version:string) {
    //  window 下如果某些程序正在使用 node_modules 会导致
    //  Error: EBUSY: resource busy or locked 错误

    //  因此在安装前, 你可以手动关闭这些程序
    DB.close();

    //  执行 next 方法,继续安装
    next();
  },
});

EVDInit 方法接受的参数如下

type EVDInitPropsType = {
  //  检测远程更新的地址
  remoteUrl: string;

  //  弹窗宽度
  windowWidth?: number;
  //  弹窗高度
  windowHeight?: number;
  //  logo 图标
  logo?: string;
  //  检测频率/s
  detectionFrequency?: number;
  //  是否在程序开始运行时进行检测
  detectAtStart?: boolean;
  //  当自动更新出现错误时的回掉
  onError?: (err: unknown) => void;
  onBeforeNewPkgInstall?: (next: () => any) => void;
};

一下命令全部必须在项目根目录执行 (与 package.json 同级)

初始化配置

# 进入命令行交互模式
$ evd init

该命令主要是生成一个 evd.config.js 的配置文件。

⚠️ 如果你根目录下已经有了这个文件,就不需要再执行了

配置项

如果你用 typescript 是有完全的提示的

export type PrebuiltConfigType = Record<
  string,
  { files: string[]; outputPath: string[] }
>;

export type EVDConfigType = {
  //  编译命令, 如 pack-mac
  //  在部署前,需要从编译后的软件里面,获取逻辑代码
  compileCommand: string;
  //  CHANGELOG.md 文件位置,用于读取显示给用户此次版本更新的内容
  changelogsPath: string;
  //  编译后的源文件位置
  sources: {
    //  源文件目录, 编译后的 软件名称.app/Contents/Resources/app 文件夹
    folder: string;
    //  node_modules 路径(相对 folder)
    nodeModules: string;
    //  逻辑代码路径(相对 folder)
    codes: string;
    //  package.json 文件路径(相对 folder)
    packageJSON: string;
  };
  //  netlify 部署设置
  netlify?: {
    //  网站域名如 https://site.netlify.app
    url: string;
    token: string;
    siteID: string;
  };
  cloudflare?: {
    url: string;
    token: string;
    projectName: string;
  };
  prebuiltConfig: PrebuiltConfigType;
};

更新版本

如果你要更新一个版本,需要执行一下两个步骤

编译

$ evd prepare

这个命令首先对软件进行编译,然后将一些代码和 changelog 放到 .evd 文件夹中

部署

$ evd deploy

这个命令主要是把 .evd 文件夹部署到 netlity 上,并且对远程版本号,和当前版本号进行多方面的判断,尽量避免误操作问题

手动检查版本更新

如果你想要通过 编程 的方式,检测版本更新,可以使用 EVDCheckUpdate 这个方法

//  main.ts
import { EVDCheckUpdate } from "electron-version-deployer-cli/dist/main";

//  如果有新版本,isHaveNewVersion 返回的就是 false,否则是 true
//  如果有新版本,它会自动打开更新框
EVDCheckUpdate().then((isHaveNewVersion: boolean) => {
  if (!isHaveNewVersion) {
    IPC.send("showMessage", "success", "当前已是最新版本!");
  }
});

安装预构建

某些依赖包需要预构建才能在不同平台上执行,比如 sqlite3,这样才能保证用户更新 node_modules 不会出现预构建找不到而导致的报错问题

比如我们要配置 sqlite3 的预构建 只需要添加 configs.prebuiltConfig 即可

{
  "prebuiltConfig": {
    "sqlite3": {
      "files": [
        "napi-v6-darwin-unknown-arm64.tar.gz",
        "napi-v6-darwin-unknown-x64.tar.gz",
        "napi-v6-win32-unknown-x64.tar.gz"
      ],
      "outputPath": ["lib", "binding"]
    }
  }
}

其中 files 是你需要安装的 prebuilt 版本。 outputPath 是你需要将这些与构建版本放到 sqlite3 的那个目录下,上面的配置会把这些预构建的 .gz 文件放到 node_modules/sqlite3/lib/binding 目录下面去

配置完后,只需要执行以下命令,他就会自动安装了

evd install-prebuilt
0.3.8

4 months ago

0.3.6

7 months ago

0.3.5

7 months ago

0.3.7

7 months ago

0.3.4

7 months ago

0.3.3

7 months ago

0.3.2

7 months ago

0.3.0

9 months ago

0.2.1

10 months ago

0.2.0

10 months ago

0.3.1

9 months ago

0.2.2

9 months ago

0.1.6

11 months ago

0.1.4

2 years ago

0.1.5

2 years ago

0.0.14

2 years ago

0.1.0

2 years ago

0.1.2

2 years ago

0.1.1

2 years ago

0.0.15

2 years ago

0.0.16

2 years ago

0.0.17

2 years ago

0.0.18

2 years ago

0.1.3

2 years ago

0.0.13

2 years ago

0.0.12

2 years ago

0.0.11

2 years ago

0.0.10

2 years ago

0.0.9

2 years ago

0.0.8

2 years ago

0.0.7

2 years ago

0.0.6

2 years ago

0.0.5

2 years ago

0.0.4

2 years ago

0.0.3

2 years ago

0.0.2

2 years ago

0.0.1

2 years ago