跳到主要内容
招文桃
返回

如何配置 AstroPaper 主题?

更新于:

本文介绍 AstroPaper 的各项配置:astro-paper.config.ts 中的站点选项,以及布局宽度、Logo、社交链接、分享链接和字体的自定义方式。

目录

Open 目录

配置 astro-paper.config.ts

全站配置都集中在项目根目录的 astro-paper.config.ts 中。使用 defineAstroPaperConfig() 可以获得完整的编辑器智能提示:

import { defineAstroPaperConfig } from "./src/types/config";

export default defineAstroPaperConfig({
  site: {
    url: "https://your-site.com/", // 换成你实际部署的地址
    title: "AstroPaper",
    description: "A minimal, responsive and SEO-friendly Astro blog theme.",
    author: "Sat Naing",
    profile: "https://satnaing.dev",
    ogImage: "default-og.jpg",
    lang: "en",
    timezone: "Asia/Bangkok",
    dir: "ltr",
  },
  posts: {
    perPage: 4,
    perIndex: 4,
    scheduledPostMargin: 15 * 60 * 1000, // 15 分钟
  },
  features: {
    lightAndDarkMode: true,
    dynamicOgImage: true,
    showArchives: true,
    showBackButton: true,
    editPost: {
      enabled: true,
      url: "https://github.com/satnaing/astro-paper/edit/main/",
    },
    search: "pagefind",
  },
  socials: [
    { name: "github", url: "https://github.com/satnaing/astro-paper" },
    { name: "x", url: "https://x.com/username" },
    { name: "linkedin", url: "https://www.linkedin.com/in/username/" },
    { name: "mail", url: "mailto:yourmail@gmail.com" },
  ],
  shareLinks: [
    { name: "whatsapp", url: "https://wa.me/?text=" },
    { name: "facebook", url: "https://www.facebook.com/sharer.php?u=" },
    { name: "x", url: "https://x.com/intent/post?url=" },
    { name: "telegram", url: "https://t.me/share/url?url=" },
    { name: "mail", url: "mailto:?subject=See%20this%20post&body=" },
  ],
});astro-paper.config.ts

site 选项

选项说明
url你部署后的站点地址。用于规范链接、OG 图地址、RSS 和站点地图。生产环境必须正确设置
title站点名称
description站点描述,对 SEO 和社交媒体分享有用
author你的名字,作为文章的默认作者
profile你的个人主页/作品集地址,用于结构化数据。没有的话设为 undefined
ogImage/public 下的默认 OG 图文件名(如 "default-og.jpg")。当文章未指定 OG 图且 dynamicOgImage 关闭时使用
lang用于 <html lang="..."> 的 ISO 语言代码,默认 "en"
timezone文章日期所用的 IANA 时区(如 "Asia/Shanghai"),确保本地和线上时间戳一致
dir用于 <html dir="..."> 的文字方向,支持 "ltr" | "rtl" | "auto"
googleVerificationGoogle Search Console 的验证 meta 标签值,可选。优先级高于 PUBLIC_GOOGLE_SITE_VERIFICATION 环境变量

posts 选项

选项说明
perPage分页列表页每页显示的文章数,默认 4
perIndex首页「最新文章」区显示的文章数,默认 4
scheduledPostMarginpubDatetime 处于未来但在此时间窗(毫秒)内的文章视为已发布,默认 15 分钟(15 * 60 * 1000

features 选项

选项说明
lightAndDarkMode是否启用明暗模式切换,默认 true
dynamicOgImage当 frontmatter 未指定 ogImage 时,为每篇文章动态生成 OG 图,默认 true。取舍见这篇说明
showArchives是否显示 /archives 页面及其顶栏入口,默认 true
showBackButton是否在文章页显示「返回」按钮,默认 true
editPost文章标题下方的「编辑此页」链接。设 enabled: true 并提供仓库编辑地址的基础 url。可在单篇 frontmatter 中用 hideEditPost 覆盖
search搜索方案,默认 "pagefind"。设为 false 可完全关闭搜索

调整布局宽度

整个博客的默认 max-width768pxmax-w-3xl)。想改的话,修改 src/styles/global.css 中的 max-w-app 工具类:

@utility max-w-app {
  @apply max-w-3xl;
  @apply max-w-4xl xl:max-w-5xl;
}src/styles/global.css

更多可选的 max-width 取值见 Tailwind CSS 文档

配置 Logo 或标题

指向网站 Logo 的箭头

有三种做法:

方式一:站点标题文字

这是最简单的做法。修改 astro-paper.config.ts 中的 site.title 即可。

方式二:Astro 的 SVG 组件

如果你想用 SVG 作为 Logo,可以选这种方式。

这种方式的好处是可以按需自定义 SVG 样式。在上面的例子里就能看到,SVG Logo 的颜色可以在暗色模式下反相。

方式三:Astro 的 Image 组件

如果你的 Logo 是图片而非 SVG,可以用 Astro 的 Image 组件。

这种方式下你依然可以用 CSS 类调整图片外观,但未必总能满足需求。如果需要在明暗模式下显示不同的 Logo 图片,可以参考 Header.astro 组件中处理明暗图标的做法。

配置社交链接

指向社交链接图标的箭头

社交链接在 astro-paper.config.tssocials 数组中配置。每一项需要一个与 src/assets/icons/socials/ 下 SVG 文件名对应的 name,以及一个 url

export default defineAstroPaperConfig({
  // ...
  socials: [
    { name: "github", url: "https://github.com/satnaing/astro-paper" },
    { name: "x", url: "https://x.com/username" },
    { name: "linkedin", url: "https://www.linkedin.com/in/username/" },
    { name: "mail", url: "mailto:yourmail@gmail.com" },
  ],
});astro-paper.config.ts

要添加默认没有的社交平台,把它的 SVG 图标放进 src/assets/icons/socials/,再往数组里加一项即可。name 必须与 SVG 文件名(不含 .svg 后缀)一致。

配置分享链接

指向分享链接图标的箭头

分享链接在 shareLinks 数组中配置。每一项需要一个 name(与 src/assets/icons/socials/ 下的 SVG 对应)和一个基础 url,文章地址会被追加到该 url 之后:

export default defineAstroPaperConfig({
  // ...
  shareLinks: [
    { name: "whatsapp", url: "https://wa.me/?text=" },
    { name: "facebook", url: "https://www.facebook.com/sharer.php?u=" },
    { name: "x", url: "https://x.com/intent/post?url=" },
    { name: "telegram", url: "https://t.me/share/url?url=" },
    { name: "mail", url: "mailto:?subject=See%20this%20post&body=" },
  ],
});astro-paper.config.ts

配置字体

AstroPaper 使用 Astro 的 fonts API,默认字体为 Google Sans Code。它能在各平台上保持排版一致,并自动做预加载、缓存等字体优化。

使用默认字体

字体已在 astro.config.ts 中配置好,并由 Layout.astro 加载。使用默认的 Google Sans Code 无需任何额外配置。

更换字体

要换成别的字体,需要改三个地方:

  1. 修改 astro.config.ts 中的字体配置:
import { defineConfig, fontProviders } from "astro/config";

export default defineConfig({
  // ...
  fonts: [
    {
      name: "你的字体名",
      cssVariable: "--font-your-font",
      provider: fontProviders.google(),
      fallbacks: ["monospace"],
      weights: [300, 400, 500, 600, 700],
      styles: ["normal", "italic"],
    },
  ],
});astro.config.ts
  1. 修改 Layout.astro 中的 Font 组件:
---
import { Font } from "astro:assets";
// ...
---

<head>
  <!-- ... -->
  <Font
    cssVariable="--font-your-font"
    preload={[{ subset: "latin", weight: 400, style: "normal" }]}
  />
  <!-- ... -->
</head>src/layouts/Layout.astro
  1. 修改 src/styles/theme.css 中的 CSS 变量映射:
@theme inline {
  --font-app: var(--font-your-font); 
  /* ... */
}src/styles/theme.css

主题各处都通过 Tailwind 的 font-app 工具类引用 --font-app 变量,所以只改这一个变量,自定义字体就会全站生效。

Warning

字体名必须与 Google Fonts 上显示的完全一致。若要使用其他字体源或本地字体,请参阅 Astro Fonts 文档

延伸阅读


分享这篇文章:

下一篇
在 AstroPaper 主题中添加文章