Files
snowflake-notes/AGENTS.md
T
sjfhsjfh 6cc96a7126 feat: 初始化 Astro 学习博客骨架
- Astro+TS 严格模式(禁止 any、显式返回类型)
- ESLint Flat Config + Prettier 格式化
- 内容集合(posts)与示例文章
- OSS 图床可配置 Img 组件
- 抽离 posts 数据逻辑(更易类型检查)
- getStaticPaths 修正(rest 路由传字符串)
- README/AGENTS 中文文档与约定
- Gitea CI:typecheck + lint
- 忽略 ref/(仅作临时参考)
2025-11-27 17:08:07 +08:00

4.2 KiB
Raw Blame History

AGENTS 指南(本仓库)

本仓库用于搭建一套基于 Astro 的内部学习博客站点。目标:TypeScript 严格(拒绝 any)、代码与文档统一格式化、内容格式可扩展(不仅限于 Markdown),图片优先走外部 OSS,不建议把图片直接提交进仓库。

工作流原则

  • 语言与文档:优先中文说明;代码与注释保持简洁明确。
  • TypeScript 严格:启用 strictnoImplicitAnyESLint 禁止 any
  • 格式化:统一使用 Prettier(含 Astro、Markdown);提交前请执行 pnpm format 或启用编辑器保存自动格式化。
  • 类型与检查:强制显式函数返回类型,禁止隐式 any;建议在 CI 中执行 pnpm typecheckpnpm lint
  • 目录结构:见下文“项目结构”。
  • 内容来源:默认支持 md/mdx,并预留可扩展的内容加载层(如将来支持 Typst 等)。
  • 图片与静态资源:默认不入库。通过环境变量配置外部 OSS 图床地址,在组件中统一引用。
  • ref/ 目录仅作临时参考:不纳入版本管理与检查(已在 .gitignore、TS 与 ESLint 忽略)。

项目结构(约定)

  • src/pages:页面路由(如首页、文章详情)。
  • src/layouts:页面与文章的布局模版。
  • src/components:通用组件(如 Img.astro)。
  • src/contentAstro Content Collections 与文章内容(posts)。
  • src/lib/content:内容加载抽象层,便于未来扩展除 Markdown 以外的格式。
  • public:公开静态资源(尽量不要放图片)。

TypeScript 与 ESLint

  • tsconfig.json 开启:strict: truenoImplicitAny: truenoFallthroughCasesInSwitch: true 等。
  • ESLint(使用 Flat Config):统一使用根目录 eslint.config.js,不要新增 .eslintrc.* 文件;启用 @typescript-eslint/no-explicit-any: error 等类型感知规则,并结合 Astro 插件。

格式化

  • Prettier 统一代码、Astro 与 Markdown 的格式。
  • 命令:pnpm format 全量格式化,pnpm format:check 校验。

内容与多格式扩展

  • 文章位于 src/content/posts,默认使用 Astro Content Collectionsconfig.ts)定义元数据 Schema。
  • 已提供 src/lib/content 抽象:
    • 通过扩展“加载器(loader)”注册新的后缀(如 .typ)。
    • 新增格式时,请实现接口并在注册表中添加映射,无需改动现有渲染逻辑。

图片与外部 OSS 配置

  • 使用 PUBLIC_MEDIA_BASE_URL 指定外部图床(OSS/CDN)前缀。
  • 组件 src/components/Img.astro 会根据配置拼接完整图片地址。
  • 若必须本地存放,建议放置在 public/images/,但该目录默认已在 .gitignore 中忽略。

开发与运行(建议)

  • 包管理器:使用 pnpm(无需指定具体版本)。
  • 常用脚本:
    • pnpm dev 启动本地开发(热更新)。
    • pnpm build 产出静态文件。
    • pnpm preview 预览构建结果。
    • pnpm lint 代码检查;pnpm typecheck 类型检查;pnpm format 统一格式化。

依赖版本策略

  • 版本范围由 pnpm 写入:不要在 package.json 手写 latest 或具体版本号。
  • 默认使用 caret 范围(^x.x.x):
    • 新增依赖:pnpm add <pkg>(由 pnpm 写入 ^ 范围)。
    • 升级依赖:pnpm up <pkg> -L(按范围更新到可用最新)。
  • Node 版本:>=20(见 package.jsonengines.node)。
  • CI 构建建议使用:pnpm install --frozen-lockfile 保证可重复。

代码提交规范(简要)

  • 小步提交,信息清晰:feat: ... / fix: ... / docs: ... / chore: ... 等。
  • 不提交大体积二进制与图片,图片走外部 OSS。

注意事项

  • 任何需要引入新内容格式,请优先在 src/lib/content 添加 loader,而不是在页面层做分支判断。
  • 若需新增全局配置项,请优先考虑使用 PUBLIC_ 前缀暴露给客户端,或通过服务器端/构建时注入。
  • 路由与 getStaticPaths:对 rest 参数页面(如 src/pages/posts/[...slug].astro),params.slug 必须是字符串(包含斜杠的完整路径),不能返回数组;推荐将 getStaticPaths 放在独立的 TS 文件并显式标注类型(见 src/pages/posts/getStaticPaths.ts)。