- electron-icon-builder + sharp devDep 추가
- assets/icon.svg → build/icon.{ico,icns,png} 산출 + git 추적
- electron-icon-builder 가 SVG 직접 input 안 받음 (Jimp MIME 에러) — sharp 로 SVG → PNG 1024 변환 후 input
- scripts/svg-to-png.mjs (sharp 사용 SVG→PNG) + scripts/finalize-icons.mjs (build/icons/ → build/ 정규 위치 정리)
- package.json build.{win,mac,linux}.icon 키 추가
- .gitignore: build/icons/ 와 build/icon-source.png (중간 산출물) 무시, build/icon.* 는 추적
- typecheck 0 errors + 472/472 단위 통과 유지 (회귀 없음)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
36 lines
1.0 KiB
JavaScript
36 lines
1.0 KiB
JavaScript
import { copyFileSync, renameSync, existsSync } from 'node:fs';
|
|
import { join } from 'node:path';
|
|
|
|
// electron-icon-builder --flatten 은 build/icons/ 안에 icon.ico, icon.icns, <size>x<size>.png
|
|
// 들을 만든다. electron-builder 는 build/icon.ico, build/icon.icns, build/icon.png 를
|
|
// 기대 — 정규 위치로 옮긴다.
|
|
const buildDir = 'build';
|
|
const iconsDir = join(buildDir, 'icons');
|
|
|
|
const moves = [
|
|
['icon.ico', 'icon.ico'],
|
|
['icon.icns', 'icon.icns'],
|
|
];
|
|
|
|
for (const [src, dest] of moves) {
|
|
const from = join(iconsDir, src);
|
|
const to = join(buildDir, dest);
|
|
if (existsSync(from)) {
|
|
renameSync(from, to);
|
|
console.log(`Moved: ${from} -> ${to}`);
|
|
} else {
|
|
console.error(`MISSING: ${from}`);
|
|
process.exit(1);
|
|
}
|
|
}
|
|
|
|
const png1024 = join(iconsDir, '1024x1024.png');
|
|
const pngOut = join(buildDir, 'icon.png');
|
|
if (existsSync(png1024)) {
|
|
copyFileSync(png1024, pngOut);
|
|
console.log(`Copied: ${png1024} -> ${pngOut}`);
|
|
} else {
|
|
console.error(`MISSING: ${png1024}`);
|
|
process.exit(1);
|
|
}
|