Skip to content

Commit 870dd9b

Browse files
authored
👷 pack.js 代码优化 (#615)
1 parent ccd2639 commit 870dd9b

1 file changed

Lines changed: 42 additions & 39 deletions

File tree

scripts/pack.js

Lines changed: 42 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
1-
/* eslint-disable @typescript-eslint/no-require-imports */
2-
/* eslint-disable no-undef */
3-
const fs = require("fs");
4-
const JSZip = require("jszip");
5-
const ChromeExtension = require("crx");
6-
const { execSync } = require("child_process");
7-
const semver = require("semver");
8-
const manifest = require("../src/manifest.json");
9-
const package = require("../package.json");
1+
/* global process */
2+
import { promises as fs } from "fs";
3+
import { createWriteStream } from "fs";
4+
import JSZip from "jszip";
5+
import ChromeExtension from "crx";
6+
import { execSync } from "child_process";
7+
import manifest from "../src/manifest.json" with { type: "json" };
8+
import packageInfo from "../package.json" with { type: "json" };
9+
import semver from "semver";
1010

1111
// 判断是否为beta版本
12-
const version = semver.parse(package.version);
12+
const version = semver.parse(packageInfo.version);
1313
if (version.prerelease.length) {
1414
// 替换manifest中的版本
1515
let betaVersion = 1000;
@@ -25,27 +25,27 @@ if (version.prerelease.length) {
2525
default:
2626
throw new Error("未知的版本类型");
2727
}
28-
manifest.version = `${version.major.toString()}.${version.minor.toString()}.${version.patch.toString()}.${betaVersion.toString()}`;
28+
manifest.version = `${version.major}.${version.minor}.${version.patch}.${betaVersion}`;
2929
manifest.name = `__MSG_scriptcat_beta__`;
3030
} else {
3131
manifest.name = `__MSG_scriptcat__`;
32-
manifest.version = package.version;
32+
manifest.version = packageInfo.version;
3333
}
3434

3535
// 处理manifest version
36-
let str = fs.readFileSync("./src/manifest.json").toString();
36+
let str = (await fs.readFile("./src/manifest.json", { encoding: "utf8" })).toString();
3737
str = str.replace(/"version": "(.*?)"/, `"version": "${manifest.version}"`);
38-
fs.writeFileSync("./src/manifest.json", str);
38+
await fs.writeFile("./src/manifest.json", str);
3939

4040
// 处理configSystem version
41-
let configSystem = fs.readFileSync("./src/app/const.ts").toString();
41+
let configSystem = (await fs.readFile("./src/app/const.ts", { encoding: "utf8" })).toString();
4242
// 如果是由github action的分支触发的构建,在版本中再加上commit id
4343
if (process.env.GITHUB_REF_TYPE === "branch") {
4444
configSystem = configSystem.replace(
4545
"ExtVersion = version;",
4646
`ExtVersion = \`\${version}+${process.env.GITHUB_SHA.substring(0, 7)}\`;`
4747
);
48-
fs.writeFileSync("./src/app/const.ts", configSystem);
48+
await fs.writeFile("./src/app/const.ts", configSystem);
4949
}
5050

5151
execSync("npm run build", { stdio: "inherit" });
@@ -70,30 +70,35 @@ firefoxManifest.browser_specific_settings = {
7070
const chrome = new JSZip();
7171
const firefox = new JSZip();
7272

73-
function addDir(zip, localDir, toDir, filters) {
74-
const files = fs.readdirSync(localDir);
75-
files.forEach((file) => {
76-
const localPath = `${localDir}/${file}`;
77-
const toPath = `${toDir}${file}`;
78-
const stats = fs.statSync(localPath);
79-
if (stats.isDirectory()) {
80-
addDir(zip, localPath, `${toPath}/`, filters);
81-
} else {
82-
if (filters && filters.includes(file)) {
83-
return;
73+
async function addDir(zip, localDir, toDir, filters) {
74+
const sub = async (localDir, toDir) => {
75+
const files = await fs.readdir(localDir);
76+
for (const file of files) {
77+
if (filters?.includes(file)) {
78+
continue;
79+
}
80+
const localPath = `${localDir}/${file}`;
81+
const toPath = `${toDir}${file}`;
82+
const stats = await fs.stat(localPath);
83+
if (stats.isDirectory()) {
84+
sub(localPath, `${toPath}/`);
85+
} else {
86+
zip.file(toPath, await fs.readFile(localPath));
8487
}
85-
zip.file(toPath, fs.readFileSync(localPath));
8688
}
87-
});
89+
};
90+
await sub(localDir, toDir);
8891
}
8992

9093
chrome.file("manifest.json", JSON.stringify(chromeManifest));
9194
firefox.file("manifest.json", JSON.stringify(firefoxManifest));
9295

93-
addDir(chrome, "./dist/ext", "", ["manifest.json"]);
94-
addDir(firefox, "./dist/ext", "", ["manifest.json", "ts.worker.js"]);
96+
await Promise.all([
97+
addDir(chrome, "./dist/ext", "", ["manifest.json"]),
98+
addDir(firefox, "./dist/ext", "", ["manifest.json", "ts.worker.js"]),
99+
]);
95100
// 添加ts.worker.js名字为gz
96-
firefox.file("src/ts.worker.js.gz", fs.readFileSync("./dist/ext/src/ts.worker.js"));
101+
firefox.file("src/ts.worker.js.gz", await fs.readFile("./dist/ext/src/ts.worker.js", { encoding: "utf8" }));
97102

98103
// 导出zip包
99104
chrome
@@ -102,27 +107,25 @@ chrome
102107
streamFiles: true,
103108
compression: "DEFLATE",
104109
})
105-
.pipe(fs.createWriteStream(`./dist/${package.name}-v${package.version}-chrome.zip`));
110+
.pipe(createWriteStream(`./dist/${packageInfo.name}-v${packageInfo.version}-chrome.zip`));
106111

107112
// firefox
108113
// .generateNodeStream({
109114
// type: "nodebuffer",
110115
// streamFiles: true,
111116
// compression: "DEFLATE",
112117
// })
113-
// .pipe(fs.createWriteStream(`./dist/${package.name}-v${package.version}-firefox.zip`));
118+
// .pipe(createWriteStream(`./dist/${package.name}-v${package.version}-firefox.zip`));
114119

115120
// 处理crx
116121
const crx = new ChromeExtension({
117-
privateKey: fs.readFileSync("./dist/scriptcat.pem"),
122+
privateKey: await fs.readFile("./dist/scriptcat.pem", { encoding: "utf8" }),
118123
});
119124

120-
crx
125+
await crx
121126
.load("./dist/ext")
122127
.then((crxFile) => crxFile.pack())
123-
.then((crxBuffer) => {
124-
fs.writeFileSync(`./dist/${package.name}-v${package.version}-chrome.crx`, crxBuffer);
125-
})
128+
.then((crxBuffer) => fs.writeFile(`./dist/${packageInfo.name}-v${packageInfo.version}-chrome.crx`, crxBuffer))
126129
.catch((err) => {
127130
console.error(err);
128131
});

0 commit comments

Comments
 (0)