Files
pangolin/web/website/package.json
T
wangjia 4df8dc6f87 feat(web): 官网 ui_kits/website → Astro 纯静态 SSG 迁移 (tsk_acMYQ-Z-EIF_)
新建 web/website/(Astro 零 SSR):

- 组件迁移:交互块保留 .jsx 经 @astrojs/react(Header/AnnouncementBar/SignupForm/PricingPlans),纯展示块转 .astro 去运行时 JS;像素以原型为基准。
- 令牌同源:build-tokens.mjs 从 design/colors_and_type.css 生成 tokens.gen.css,仅剔除第三方 Google Fonts @import,数值不改。
- 字体自托管:@fontsource(Sora/Manrope/Noto Sans SC/JetBrains Mono),无第三方 CDN。
- 图标:Lucide 构建期内联 SVG(替代 unpkg CDN),零运行时、零 CDN。
- i18n:/(zh)与 /en/(en)双路由单显,语言切换组件;文案沿用 ui_kits 脱敏文案。
- 安全:public/_headers 严格 CSP(全 self + 自托管资源 + 内联片段 sha256,无 unsafe-inline)+ HSTS;无支付表单。
- CI:.gitea/workflows/website.yml 构建(红线扫描+lint+CSP 哈希)→ 同时发布 Cloudflare Pages 主站与镜像。
- 灾备:README 写明干净环境 npm ci && npm run build 可直接部署到任意静态托管;dist 指纹确定性,主站镜像一致。

测试:npm run lint(0 error)/ npm test(build+CSP 哈希注入+红线扫描 0 命中)/ 两次干净构建 dist 指纹一致。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-13 14:26:40 +08:00

44 lines
1.4 KiB
JSON

{
"name": "pangolin-website",
"version": "0.1.0",
"private": true,
"type": "module",
"description": "穿山甲 · Pangolin 官网 — Astro 纯静态 (SSG),零 SSR,可秒级复制到任意备用域名。",
"engines": {
"node": "^18.20.8 || ^20.3.0 || >=22.0.0"
},
"scripts": {
"gen:tokens": "node scripts/build-tokens.mjs",
"prebuild": "node scripts/build-tokens.mjs",
"predev": "node scripts/build-tokens.mjs",
"dev": "astro dev",
"start": "astro dev",
"build": "astro build",
"postbuild": "node scripts/csp-hashes.mjs",
"preview": "astro preview",
"astro": "astro",
"lint": "astro check",
"scan:redline": "node scripts/check-redline.mjs",
"csp:hashes": "node scripts/csp-hashes.mjs",
"hash:dist": "node scripts/dist-hash.mjs",
"test": "node scripts/build-tokens.mjs && astro build && node scripts/csp-hashes.mjs && node scripts/check-redline.mjs"
},
"dependencies": {
"@astrojs/react": "^4.2.0",
"astro": "^5.5.0",
"lucide-react": "^0.469.0",
"react": "^18.3.1",
"react-dom": "^18.3.1"
},
"devDependencies": {
"@astrojs/check": "^0.9.9",
"@fontsource/jetbrains-mono": "^5.1.0",
"@fontsource/manrope": "^5.1.0",
"@fontsource/noto-sans-sc": "^5.1.0",
"@fontsource/sora": "^5.1.0",
"@types/react": "^18.3.12",
"@types/react-dom": "^18.3.1",
"typescript": "^5.9.3"
}
}