4df8dc6f87
新建 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>
44 lines
1.4 KiB
JSON
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"
|
|
}
|
|
}
|