自定义主题
自行自定义主题
你需要了解的事#
本主题设计为“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' import { Header, ThemeProvider } from 'astro-pure/components/basic' import { Footer } from '@/components/custom/Footer.astro' // ... ---
这样你就完成了组件的“本地化”。
包模式#
如果你想进行一些突破性的修改或只是做测试,这种方法可能更符合“所见即所得”的原则。
- 确保你有主题的原始代码(
./packages/pure
)。如果已删除,可以从发布页 ↗下载。 - 使用包管理器将其链接到你的项目。
- 然后就可以像修改自己代码的一部分一样修改主题代码了!