自定义主题
自己动手定制主题
你需要了解#
本主题被设计为“NPM 包”,原因如下:
- 包中编写的代码可能会频繁更改。如果用户随意修改,会显著增加后续更新和合并的成本(各种代码冲突)
- 可以轻松回滚和切换不同版本,以保持用户稳定性
- 降低系统耦合度,提高复用能力
- NPM 包模式可以作为“Astro 插件”,在构建阶段附加额外的操作以增强用户体验
- 支持一些内置命令,如 new、check、info 等
- 可作为其他 Astro 项目的组件库(是的,本项目可以拆分为 UI 组件库):包详情 ↗
在自定义之前,你应该先检查 site.config.ts,确保没有满足你需求的选项。
Swizzling#
本主题选择了一种优雅的方法叫做“Swizzling”,灵感来自 Docusaurus ↗ 的设计。
- 使用 IDE 快速查看某个组件对应的源代码(在 VSCode 中,按住 Ctrl 点击组件)。
- 复制到
src/components/<你喜欢的目录>。 - 修改后,将相应的引用改为你自己的文件路径。
我们以自定义 Footer 组件为例:
-
在项目代码中搜索
Footer:src/layout/BaseLayout.astro
astro--- import { Footer, Header, ThemeProvider } from 'astro-pure/components/basic' import type { SiteMeta } from 'astro-pure/types' // ... --- -
在主题源代码中找到它:
node_modules/astro-theme-pure/components/basic/index.ts
tsexport { default as Footer } from './Footer.astro' export { default as Header } from './Header.astro' export { default as ThemeProvider } from './ThemeProvider.astro'然后你可以在
node_modules/astro-theme-pure/components/basic/Footer.astro找到Footer组件的源代码。 -
将
Footer.astro文件复制到你的项目中:
bashcp node_modules/astro-theme-pure/components/basic/Footer.astro src/components/custom/Footer.astro -
解决子依赖问题:
src/components/custom/Footer.astro
astro--- import config from 'virtual:config' import { Icon } from '../user' import { Icon } from 'astro-pure/user' // ... --- -
在
BaseLayout.astro中更改引用:src/layout/BaseLayout.astro
astro--- import { Footer, Header, ThemeProvider } from 'astro-pure/components/basic' // [!code --] import { Header, ThemeProvider } from 'astro-pure/components/basic' // [!code ++] import { Footer } from '@/components/custom/Footer.astro' // [!code ++] // ... ---
这样你就完成了组件的“本地化”。
包模式#
如果你想做一些重大更改或只是进行测试,这种方法可能更符合“所见即所得”。
- 确保你有原始主题代码(
./packages/pure)。如果已经删除,请从 Releases ↗ 下载。 - 使用你的包管理器将其链接到你的项目(例如:Bun ↗、NPM ↗、PNPM ↗)。
- 然后像修改自己代码的一部分一样修改主题代码!
plaintext