Fix PWA shortcut icon on Windows

Allow unauthenticated access to favicon and manifest, generate favicon.ico, and add multi-size manifest icons.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
dekun
2026-06-05 17:33:55 +08:00
parent df619a5d8e
commit a8be586652
10 changed files with 1681 additions and 10 deletions
+29
View File
@@ -0,0 +1,29 @@
import fs from 'node:fs'
import path from 'node:path'
import { fileURLToPath } from 'node:url'
import sharp from 'sharp'
import toIco from 'to-ico'
const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..')
const siteDir = path.join(root, 'assets', 'site')
const sourcePng = path.join(siteDir, 'apple-touch-icon.png')
if (!fs.existsSync(sourcePng)) {
console.warn('[generate-icons] 跳过:未找到 apple-touch-icon.png')
process.exit(0)
}
async function resizePng(size) {
return sharp(sourcePng).resize(size, size).png().toBuffer()
}
const icoSizes = [16, 32, 48, 64, 128, 256]
const icoBuffers = await Promise.all(icoSizes.map((size) => resizePng(size)))
const icoBuffer = await toIco(icoBuffers)
fs.writeFileSync(path.join(siteDir, 'favicon.ico'), icoBuffer)
fs.writeFileSync(path.join(siteDir, 'icon-192.png'), await resizePng(192))
fs.writeFileSync(path.join(siteDir, 'icon-512.png'), await resizePng(512))
fs.writeFileSync(path.join(siteDir, 'favicon.png'), await resizePng(512))
console.log('[generate-icons] 已生成 favicon.ico、icon-192.png、icon-512.png')