подготовка к билду

This commit is contained in:
Ivan Fontosh
2026-04-19 23:22:05 +08:00
parent 2fa20da94d
commit 726c89e104
13 changed files with 180 additions and 13 deletions
+15 -1
View File
@@ -14,6 +14,9 @@ const root = path.resolve(__dirname, '..');
const isProd = resolveIsProduction();
const obfuscateMain = resolveObfuscateMain();
/** База для `GET …/v1/status` (отзыв). Прод: по умолчанию публичный сервер; переопределение: `DND_LICENSE_STATUS_URL=… npm run build`. */
const DEFAULT_LICENSE_STATUS_BASE = 'https://license.mailib.ru/';
/** Старые .map от dev-сборок не должны попадать в pack. */
function removeStaleNodeBundleMaps() {
for (const p of [
@@ -41,6 +44,17 @@ async function buildNodeTargets() {
if (isProd) removeStaleNodeBundleMaps();
const nodeEnvLiteral = JSON.stringify(isProd ? 'production' : 'development');
const licenseStatusFromEnv = process.env.DND_LICENSE_STATUS_URL?.trim();
const licenseStatusBase =
isProd && (licenseStatusFromEnv || DEFAULT_LICENSE_STATUS_BASE)
? (licenseStatusFromEnv || DEFAULT_LICENSE_STATUS_BASE).replace(/\/+$/u, '') + '/'
: null;
const define = {
'process.env.NODE_ENV': nodeEnvLiteral,
...(licenseStatusBase
? { 'process.env.DND_LICENSE_STATUS_URL': JSON.stringify(licenseStatusBase) }
: {}),
};
const common = {
platform: 'node',
target: 'node22',
@@ -49,7 +63,7 @@ async function buildNodeTargets() {
minify: isProd,
sourcemap: !isProd,
external: ['electron'],
define: { 'process.env.NODE_ENV': nodeEnvLiteral },
define,
drop: isProd ? ['console', 'debugger'] : [],
};
+45
View File
@@ -0,0 +1,45 @@
/**
* Перед `electron-builder` на Windows: снять блокировку `release/win-unpacked/resources/app.asar`
* (часто из‑за запущенного exe из прошлой распаковки).
*/
import { execFileSync } from 'node:child_process';
import fs from 'node:fs';
import path from 'node:path';
import { fileURLToPath } from 'node:url';
const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..');
const winUnpacked = path.join(root, 'release', 'win-unpacked');
function sleep(ms) {
return new Promise((r) => setTimeout(r, ms));
}
function tryKillDndPlayer() {
if (process.platform !== 'win32') return;
try {
execFileSync('taskkill', ['/F', '/IM', 'DNDGamePlayer.exe', '/T'], {
stdio: 'ignore',
windowsHide: true,
});
} catch {
/* процесс не найден — нормально */
}
}
async function tryRmWinUnpacked() {
if (!fs.existsSync(winUnpacked)) return;
for (let i = 0; i < 8; i += 1) {
try {
fs.rmSync(winUnpacked, { recursive: true, force: true });
return;
} catch {
await sleep(500);
}
}
console.warn(
'[release-win-prep] Не удалось удалить release/win-unpacked. Закройте DNDGamePlayer и повторите pack.',
);
}
tryKillDndPlayer();
await tryRmWinUnpacked();