подготовка к билду
This commit is contained in:
+15
-1
@@ -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'] : [],
|
||||
};
|
||||
|
||||
|
||||
@@ -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();
|
||||
Reference in New Issue
Block a user