Tauri 同步package.json中版本脚本

前言

Tauri项目中内部有好几个版本,可能修改错显示的版本就不对,最好是各个地方的版本保持一致。

这里使用脚本同步版本。

同步版本脚本

自动同步package.json中的版本号

scripts/sync-version.mjs

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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
/**
* 以 package.json 的 version 为准,同步到 Tauri / Rust / lockfile。
*/
import { readFileSync, writeFileSync, existsSync } from "fs";
import { dirname, join } from "path";
import { fileURLToPath } from "url";

const root = join(dirname(fileURLToPath(import.meta.url)), "..");
const pkg = JSON.parse(readFileSync(join(root, "package.json"), "utf8"));
const version = pkg.version;

if (!version || !/^\d+\.\d+\.\d+(-[\w.-]+)?$/.test(version)) {
console.error(`[sync-version] package.json 中 version 无效: ${version}`);
process.exit(1);
}

function replaceInFile(filePath, replacer, label) {
const before = readFileSync(filePath, "utf8");
const after = replacer(before);
if (before !== after) {
writeFileSync(filePath, after, "utf8");
console.log(`[sync-version] ${label} -> ${version}`);
return true;
}
return false;
}

let updated = 0;

if (
replaceInFile(
join(root, "src-tauri", "Cargo.toml"),
(s) => s.replace(/^version\s*=\s*"[^"]*"/m, `version = "${version}"`),
"src-tauri/Cargo.toml",
)
) {
updated += 1;
}

if (
replaceInFile(
join(root, "src-tauri", "tauri.conf.json"),
(s) => s.replace(/"version"\s*:\s*"[^"]*"/, `"version": "${version}"`),
"src-tauri/tauri.conf.json",
)
) {
updated += 1;
}

if (updated === 0) {
console.log(`[sync-version] 已为 ${version},无需更新`);
} else {
console.log(`[sync-version] 完成,共同步 ${updated} 个文件`);
}

配置

package.json中添加同步脚本

1
2
3
4
5
6
7
8
9
10
{
"version": "1.1.0",
"scripts": {
"sync-version": "node scripts/sync-version.mjs",
"dev": "node scripts/sync-version.mjs && vite",
"build": "node scripts/sync-version.mjs && vue-tsc --noEmit && vite build",
"preview": "vite preview",
"tauri": "tauri"
}
}

这样运行和打包构建的时候都会同步版本。