脚本打包
Some checks failed
build / Build (push) Failing after 6s
test / Run tests (push) Failing after 8s
Some checks failed
build / Build (push) Failing after 6s
test / Run tests (push) Failing after 8s
This commit is contained in:
123
scripts/pack.js
Normal file
123
scripts/pack.js
Normal file
@ -0,0 +1,123 @@
|
||||
const fs = require("fs");
|
||||
const JSZip = require("jszip");
|
||||
const ChromeExtension = require("crx");
|
||||
const { execSync } = require("child_process");
|
||||
const semver = require("semver");
|
||||
const manifest = require("../src/manifest.json");
|
||||
const package = require("../package.json");
|
||||
|
||||
// 判断是否为beta版本
|
||||
const version = semver.parse(package.version);
|
||||
if (version.prerelease.length) {
|
||||
// 替换manifest中的版本
|
||||
let betaVersion = 1000;
|
||||
switch (version.prerelease[0]) {
|
||||
case "alpha":
|
||||
// 第一位进1
|
||||
betaVersion += parseInt(version.prerelease[1] || "0", 10) + 1 || 1;
|
||||
break;
|
||||
case "beta":
|
||||
// 第二位进1
|
||||
betaVersion += 10 * (parseInt(version.prerelease[1] || "0", 10) + 1 || 1);
|
||||
break;
|
||||
default:
|
||||
throw new Error("未知的版本类型");
|
||||
}
|
||||
manifest.version = `${version.major.toString()}.${version.minor.toString()}.${version.patch.toString()}.${betaVersion.toString()}`;
|
||||
manifest.name = `${manifest.name} Beta`;
|
||||
} else {
|
||||
manifest.version = package.version;
|
||||
}
|
||||
|
||||
// 处理manifest version
|
||||
let str = fs.readFileSync("./src/manifest.json").toString();
|
||||
str = str.replace(/"version": "(.*?)"/, `"version": "${manifest.version}"`);
|
||||
fs.writeFileSync("./src/manifest.json", str);
|
||||
|
||||
// 处理configSystem version
|
||||
let configSystem = fs.readFileSync("./src/app/const.ts").toString();
|
||||
// 如果是由github action的分支触发的构建,在版本中再加上commit id
|
||||
if (process.env.GITHUB_REF_TYPE === "branch") {
|
||||
configSystem = configSystem.replace(
|
||||
"ExtVersion = version;",
|
||||
`ExtVersion = \`\${version}+${process.env.GITHUB_SHA.substring(0, 7)}\`;`
|
||||
);
|
||||
fs.writeFileSync("./src/app/const.ts", configSystem);
|
||||
}
|
||||
|
||||
execSync("npm run build", { stdio: "inherit" });
|
||||
|
||||
// 处理firefox和chrome的zip压缩包
|
||||
|
||||
const firefoxManifest = { ...manifest };
|
||||
const chromeManifest = { ...manifest };
|
||||
|
||||
delete chromeManifest.content_security_policy;
|
||||
|
||||
delete firefoxManifest.sandbox;
|
||||
// firefoxManifest.content_security_policy =
|
||||
// "script-src 'self' blob:; object-src 'self' blob:";
|
||||
firefoxManifest.browser_specific_settings = {
|
||||
gecko: { strict_min_version: "91.1.0" },
|
||||
};
|
||||
|
||||
const chrome = new JSZip();
|
||||
const firefox = new JSZip();
|
||||
|
||||
function addDir(zip, localDir, toDir, filters) {
|
||||
const files = fs.readdirSync(localDir);
|
||||
files.forEach((file) => {
|
||||
const localPath = `${localDir}/${file}`;
|
||||
const toPath = `${toDir}${file}`;
|
||||
const stats = fs.statSync(localPath);
|
||||
if (stats.isDirectory()) {
|
||||
addDir(zip, localPath, `${toPath}/`, filters);
|
||||
} else {
|
||||
if (filters && filters.includes(file)) {
|
||||
return;
|
||||
}
|
||||
zip.file(toPath, fs.readFileSync(localPath));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
chrome.file("manifest.json", JSON.stringify(chromeManifest));
|
||||
firefox.file("manifest.json", JSON.stringify(firefoxManifest));
|
||||
|
||||
addDir(chrome, "./dist/ext", "", ["manifest.json"]);
|
||||
addDir(firefox, "./dist/ext", "", ["manifest.json", "ts.worker.js"]);
|
||||
// 添加ts.worker.js名字为gz
|
||||
firefox.file("src/ts.worker.js.gz", fs.readFileSync("./dist/ext/src/ts.worker.js"));
|
||||
|
||||
// 导出zip包
|
||||
chrome
|
||||
.generateNodeStream({
|
||||
type: "nodebuffer",
|
||||
streamFiles: true,
|
||||
compression: "DEFLATE",
|
||||
})
|
||||
.pipe(fs.createWriteStream(`./dist/${package.name}-v${package.version}-chrome.zip`));
|
||||
|
||||
firefox
|
||||
.generateNodeStream({
|
||||
type: "nodebuffer",
|
||||
streamFiles: true,
|
||||
compression: "DEFLATE",
|
||||
})
|
||||
.pipe(fs.createWriteStream(`./dist/${package.name}-v${package.version}-firefox.zip`));
|
||||
|
||||
// 处理crx
|
||||
const crx = new ChromeExtension({
|
||||
privateKey: fs.readFileSync("./dist/scriptcat.pem"),
|
||||
});
|
||||
|
||||
crx
|
||||
.load("./dist/ext")
|
||||
.then((crxFile) => crxFile.pack())
|
||||
.then((crxBuffer) => {
|
||||
fs.writeFileSync(`./dist/${package.name}-v${package.version}-chrome.crx`, crxBuffer);
|
||||
})
|
||||
.catch((err) => {
|
||||
// eslint-disable-next-line no-console
|
||||
console.error(err);
|
||||
});
|
Reference in New Issue
Block a user