@jet-w/astro-blog 0.1.6 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunk-6D3XRDNY.js +145 -0
- package/dist/chunk-A2E2VSAQ.js +246 -0
- package/dist/{chunk-GYLSY3OJ.js → chunk-TJTPX2WP.js} +1 -1
- package/dist/config/index.d.ts +3 -47
- package/dist/config/index.js +18 -2
- package/dist/i18n-PgMCFBw0.d.ts +222 -0
- package/dist/index.d.ts +204 -7
- package/dist/index.js +255 -3
- package/dist/integration.d.ts +9 -1
- package/dist/integration.js +2 -1
- package/dist/{sidebar-DNdiCKBw.d.ts → sidebar-Da-W_4Lr.d.ts} +1 -1
- package/dist/utils/sidebar.d.ts +1 -1
- package/package.json +1 -1
- package/src/components/blog/FloatingToc.vue +11 -3
- package/src/components/blog/Hero.astro +17 -2
- package/src/components/blog/NavigationTabs.vue +46 -15
- package/src/components/blog/PostCard.astro +28 -10
- package/src/components/blog/RelatedPosts.astro +23 -7
- package/src/components/blog/TableOfContents.astro +10 -4
- package/src/components/blog/TagCloud.astro +4 -3
- package/src/components/home/FeaturedPostsSection.astro +22 -6
- package/src/components/home/QuickNavSection.astro +33 -4
- package/src/components/home/RecentPostsSection.astro +22 -6
- package/src/components/home/StatsSection.astro +24 -6
- package/src/components/layout/Footer.astro +36 -20
- package/src/components/layout/Header.astro +75 -17
- package/src/components/layout/Sidebar.astro +40 -25
- package/src/components/ui/LanguageSwitcher.vue +183 -0
- package/src/components/ui/SearchBox.vue +13 -5
- package/src/components/ui/SearchInterface.vue +49 -25
- package/src/layouts/BaseLayout.astro +77 -52
- package/src/layouts/PageLayout.astro +22 -27
- package/src/layouts/SlidesLayout.astro +14 -2
- package/src/pages/archives/[year]/[month].astro +36 -17
- package/src/pages/archives/index.astro +36 -20
- package/src/pages/categories/[category].astro +33 -16
- package/src/pages/categories/index.astro +37 -14
- package/src/pages/posts/[...slug].astro +125 -18
- package/src/pages/posts/index.astro +59 -37
- package/src/pages/posts/page/[page].astro +65 -27
- package/src/pages/rss.xml.ts +18 -6
- package/src/pages/search.astro +50 -14
- package/src/pages/slides/index.astro +25 -6
- package/src/pages/tags/[tag].astro +32 -15
- package/src/pages/tags/index.astro +39 -16
- package/src/plugins/remark-containers.mjs +351 -322
- package/src/plugins/remark-protect-code.mjs +69 -0
- package/src/styles/global.css +35 -1
- package/templates/default/.claude/ralph-loop.local.md +48 -0
- package/templates/default/astro.config.mjs +33 -4
- package/templates/default/content/posts/blog_docs_en/01.get-started/01-intro.md +81 -0
- package/templates/default/content/posts/blog_docs_en/01.get-started/02-install.md +137 -0
- package/templates/default/content/posts/blog_docs_en/01.get-started/03-create-post.md +176 -0
- package/templates/default/content/posts/blog_docs_en/01.get-started/04-structure.md +173 -0
- package/templates/default/content/posts/blog_docs_en/01.get-started/05-deploy.md +208 -0
- package/templates/default/content/posts/blog_docs_en/01.get-started/README.md +52 -0
- package/templates/default/content/posts/blog_docs_en/02.guide/02-containers.md +245 -0
- package/templates/default/content/posts/blog_docs_en/02.guide/03-code-blocks.md +207 -0
- package/templates/default/content/posts/blog_docs_en/02.guide/03-mermaid.md +194 -0
- package/templates/default/content/posts/blog_docs_en/02.guide/04-icons.md +229 -0
- package/templates/default/content/posts/blog_docs_en/02.guide/06-latex.md +233 -0
- package/templates/default/content/posts/blog_docs_en/02.guide/07-video.md +184 -0
- package/templates/default/content/posts/blog_docs_en/02.guide/08-slides.md +359 -0
- package/templates/default/content/posts/blog_docs_en/02.guide/README.md +213 -0
- package/templates/default/content/posts/blog_docs_en/03.config/01-site.md +208 -0
- package/templates/default/content/posts/blog_docs_en/03.config/02-sidebar.md +240 -0
- package/templates/default/content/posts/blog_docs_en/03.config/03-i18n.md +349 -0
- package/templates/default/content/posts/blog_docs_en/03.config/README.md +85 -0
- package/templates/default/content/posts/blog_docs_en/README.md +79 -0
- package/templates/default/content/posts/blog_docs_zh/01.get-started/01-intro.md +81 -0
- package/templates/default/content/posts/blog_docs_zh/01.get-started/02-install.md +137 -0
- package/templates/default/content/posts/blog_docs_zh/01.get-started/03-create-post.md +176 -0
- package/templates/default/content/posts/blog_docs_zh/01.get-started/04-structure.md +173 -0
- package/templates/default/content/posts/blog_docs_zh/01.get-started/05-deploy.md +208 -0
- package/templates/default/content/posts/blog_docs_zh/01.get-started/README.md +52 -0
- package/templates/default/content/posts/blog_docs_zh/02.guide/02-containers.md +245 -0
- package/templates/default/content/posts/blog_docs_zh/02.guide/03-code-blocks.md +206 -0
- package/templates/default/content/posts/blog_docs_zh/02.guide/03-mermaid.md +194 -0
- package/templates/default/content/posts/blog_docs_zh/02.guide/04-icons.md +229 -0
- package/templates/default/content/posts/blog_docs_zh/02.guide/06-latex.md +233 -0
- package/templates/default/content/posts/blog_docs_zh/02.guide/07-video.md +184 -0
- package/templates/default/content/posts/blog_docs_zh/02.guide/08-slides.md +359 -0
- package/templates/default/content/posts/blog_docs_zh/02.guide/README.md +213 -0
- package/templates/default/content/posts/blog_docs_zh/03.config/01-site.md +208 -0
- package/templates/default/content/posts/blog_docs_zh/03.config/02-sidebar.md +240 -0
- package/templates/default/content/posts/blog_docs_zh/03.config/03-i18n.md +348 -0
- package/templates/default/content/posts/blog_docs_zh/03.config/README.md +85 -0
- package/templates/default/content/posts/blog_docs_zh/README.md +78 -0
- package/templates/default/package-lock.json +9667 -0
- package/templates/default/package.json +1 -1
- package/templates/default/src/config/footer.ts +14 -11
- package/templates/default/src/config/locales/en/footer.ts +17 -0
- package/templates/default/src/config/locales/en/index.ts +20 -0
- package/templates/default/src/config/locales/en/menu.ts +14 -0
- package/templates/default/src/config/locales/en/sidebar.ts +34 -0
- package/templates/default/src/config/locales/en/site.ts +7 -0
- package/templates/default/src/config/locales/en/ui.ts +29 -0
- package/templates/default/src/config/locales/index.ts +7 -0
- package/templates/default/src/config/locales/zh-CN/footer.ts +17 -0
- package/templates/default/src/config/locales/zh-CN/index.ts +20 -0
- package/templates/default/src/config/locales/zh-CN/menu.ts +14 -0
- package/templates/default/src/config/locales/zh-CN/sidebar.ts +34 -0
- package/templates/default/src/config/locales/zh-CN/site.ts +7 -0
- package/templates/default/src/config/locales/zh-CN/ui.ts +29 -0
- package/templates/default/src/config/sidebar.ts +10 -12
- package/templates/default/src/config/site.ts +2 -2
- package/templates/default/src/content.config.ts +15 -3
- package/templates/default/src/env.d.ts +7 -0
- package/dist/chunk-MQXPSOYB.js +0 -124
- package/templates/default/content/posts/blog_docs/01-quick-start.md +0 -162
- package/templates/default/content/posts/blog_docs/02-frontmatter.md +0 -277
- package/templates/default/content/posts/blog_docs/03-markdown-basic.md +0 -350
- package/templates/default/content/posts/blog_docs/04-containers.md +0 -331
- package/templates/default/content/posts/blog_docs/05-code-blocks.md +0 -388
- package/templates/default/content/posts/blog_docs/06-mermaid.md +0 -431
- package/templates/default/content/posts/blog_docs/07-video.md +0 -243
- package/templates/default/content/posts/blog_docs/08-latex.md +0 -382
- package/templates/default/content/posts/blog_docs/09-icons.md +0 -326
- package/templates/default/content/posts/blog_docs/10-sidebar.md +0 -445
- package/templates/default/content/posts/blog_docs/11-config.md +0 -334
- package/templates/default/content/posts/blog_docs/12-slides.mdx +0 -552
- package/templates/default/content/posts/blog_docs/README.md +0 -151
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: 安装
|
|
3
|
+
description: 设置你的开发环境并安装 Astro 博客
|
|
4
|
+
pubDate: 2025-01-01
|
|
5
|
+
author: jet-w
|
|
6
|
+
categories:
|
|
7
|
+
- 文档
|
|
8
|
+
tags:
|
|
9
|
+
- 入门
|
|
10
|
+
- 安装
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# 安装
|
|
14
|
+
|
|
15
|
+
本指南将帮助你在电脑上设置 Astro 博客。
|
|
16
|
+
|
|
17
|
+
## 前置要求
|
|
18
|
+
|
|
19
|
+
在开始之前,请确保你已具备:
|
|
20
|
+
|
|
21
|
+
### Node.js
|
|
22
|
+
|
|
23
|
+
需要 Node.js 18.x 或更高版本。
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
# 检查你的 Node.js 版本
|
|
27
|
+
node --version
|
|
28
|
+
# 应该输出:v18.x.x 或更高
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
::: tip 安装 Node.js
|
|
32
|
+
如果你没有 Node.js,请从 [nodejs.org](https://nodejs.org) 下载。
|
|
33
|
+
选择 **LTS** 版本以获得最佳稳定性。
|
|
34
|
+
:::
|
|
35
|
+
|
|
36
|
+
### 包管理器
|
|
37
|
+
|
|
38
|
+
npm 随 Node.js 一起安装。你也可以使用 pnpm 或 yarn:
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
# 检查 npm 版本
|
|
42
|
+
npm --version
|
|
43
|
+
|
|
44
|
+
# 或使用 pnpm(推荐,安装更快)
|
|
45
|
+
npm install -g pnpm
|
|
46
|
+
pnpm --version
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## 安装依赖
|
|
50
|
+
|
|
51
|
+
进入你的博客项目文件夹并安装依赖:
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
# 使用 npm
|
|
55
|
+
npm install
|
|
56
|
+
|
|
57
|
+
# 或使用 pnpm
|
|
58
|
+
pnpm install
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
这将安装 `package.json` 中定义的所有必需包。
|
|
62
|
+
|
|
63
|
+
## 启动开发服务器
|
|
64
|
+
|
|
65
|
+
启动本地开发服务器:
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
# 使用 npm
|
|
69
|
+
npm run dev
|
|
70
|
+
|
|
71
|
+
# 或使用 pnpm
|
|
72
|
+
pnpm dev
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
你应该看到类似这样的输出:
|
|
76
|
+
|
|
77
|
+
```
|
|
78
|
+
🚀 astro v5.x.x ready in 1234ms
|
|
79
|
+
|
|
80
|
+
┃ Local http://localhost:4321/
|
|
81
|
+
┃ Network use --host to expose
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
::: tip 热重载
|
|
85
|
+
开发服务器支持热重载。当你保存文件时,浏览器会自动刷新以显示你的更改。
|
|
86
|
+
:::
|
|
87
|
+
|
|
88
|
+
## 在浏览器中打开
|
|
89
|
+
|
|
90
|
+
在浏览器中访问 `http://localhost:4321`。你应该能看到你的博客首页!
|
|
91
|
+
|
|
92
|
+
## 验证安装
|
|
93
|
+
|
|
94
|
+
检查一切是否正常工作:
|
|
95
|
+
|
|
96
|
+
1. **首页加载** - 你看到博客首页
|
|
97
|
+
2. **文章列表** - 导航到 `/posts` 查看文章
|
|
98
|
+
3. **深色模式** - 切换顶部的主题开关
|
|
99
|
+
4. **搜索** - 尝试搜索功能
|
|
100
|
+
|
|
101
|
+
## 常见问题
|
|
102
|
+
|
|
103
|
+
### 端口已被占用
|
|
104
|
+
|
|
105
|
+
如果端口 4321 被占用,Astro 会使用其他端口。检查终端输出获取实际 URL。
|
|
106
|
+
|
|
107
|
+
或者指定不同的端口:
|
|
108
|
+
|
|
109
|
+
```bash
|
|
110
|
+
npm run dev -- --port 3000
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
### 依赖安装失败
|
|
114
|
+
|
|
115
|
+
尝试清除缓存:
|
|
116
|
+
|
|
117
|
+
```bash
|
|
118
|
+
# 删除 node_modules 和 lock 文件
|
|
119
|
+
rm -rf node_modules package-lock.json
|
|
120
|
+
|
|
121
|
+
# 重新安装
|
|
122
|
+
npm install
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
### Node.js 版本过旧
|
|
126
|
+
|
|
127
|
+
将 Node.js 更新到 18 或更高版本。考虑使用 [nvm](https://github.com/nvm-sh/nvm) 来管理 Node 版本:
|
|
128
|
+
|
|
129
|
+
```bash
|
|
130
|
+
# 安装 nvm 后:
|
|
131
|
+
nvm install 20
|
|
132
|
+
nvm use 20
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
---
|
|
136
|
+
|
|
137
|
+
开发服务器运行起来了吗?太好了!让我们 [创建你的第一篇文章](./03-create-post)。
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: 创建第一篇文章
|
|
3
|
+
description: 编写并发布你的第一篇博客文章
|
|
4
|
+
pubDate: 2025-01-01
|
|
5
|
+
author: jet-w
|
|
6
|
+
categories:
|
|
7
|
+
- 文档
|
|
8
|
+
tags:
|
|
9
|
+
- 入门
|
|
10
|
+
- 写作
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# 创建第一篇文章
|
|
14
|
+
|
|
15
|
+
让我们来写你的第一篇博客文章!这才是真正有趣的开始。
|
|
16
|
+
|
|
17
|
+
## 文章存放位置
|
|
18
|
+
|
|
19
|
+
所有博客文章都放在 `content/posts/` 目录:
|
|
20
|
+
|
|
21
|
+
```
|
|
22
|
+
content/
|
|
23
|
+
└── posts/
|
|
24
|
+
├── my-first-post.md ← 你的文章放在这里
|
|
25
|
+
├── another-post.md
|
|
26
|
+
└── tech/ ← 或者放在子目录中
|
|
27
|
+
└── tutorial.md
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## 创建新文章
|
|
31
|
+
|
|
32
|
+
在 `content/posts/` 中创建一个名为 `hello-world.md` 的文件:
|
|
33
|
+
|
|
34
|
+
```markdown
|
|
35
|
+
---
|
|
36
|
+
title: Hello World
|
|
37
|
+
description: 我的第一篇博客文章
|
|
38
|
+
pubDate: 2025-01-15
|
|
39
|
+
author: 你的名字
|
|
40
|
+
tags:
|
|
41
|
+
- 介绍
|
|
42
|
+
categories:
|
|
43
|
+
- 个人
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
# Hello World
|
|
47
|
+
|
|
48
|
+
欢迎来到我的博客!这是我的第一篇文章。
|
|
49
|
+
|
|
50
|
+
## 我为什么开始写博客
|
|
51
|
+
|
|
52
|
+
我开始写这个博客是为了:
|
|
53
|
+
|
|
54
|
+
1. 分享我学到的东西
|
|
55
|
+
2. 记录我的旅程
|
|
56
|
+
3. 与他人建立联系
|
|
57
|
+
|
|
58
|
+
> 最好的开始时间是昨天,其次是现在。
|
|
59
|
+
|
|
60
|
+
## 接下来
|
|
61
|
+
|
|
62
|
+
敬请期待更多关于以下内容的文章:
|
|
63
|
+
|
|
64
|
+
- Web 开发
|
|
65
|
+
- 我的项目
|
|
66
|
+
- 经验教训
|
|
67
|
+
|
|
68
|
+
感谢阅读!
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
## 查看你的文章
|
|
72
|
+
|
|
73
|
+
保存文件后访问:
|
|
74
|
+
|
|
75
|
+
```
|
|
76
|
+
http://localhost:4321/posts/hello-world
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
你的文章应该会以完整的样式呈现!
|
|
80
|
+
|
|
81
|
+
## 理解 Frontmatter
|
|
82
|
+
|
|
83
|
+
`---` 标记之间的部分称为 **frontmatter**。它包含文章的元数据:
|
|
84
|
+
|
|
85
|
+
```yaml
|
|
86
|
+
---
|
|
87
|
+
title: Hello World # 必填 - 文章标题
|
|
88
|
+
description: 我的第一篇文章 # 用于 SEO 和预览
|
|
89
|
+
pubDate: 2025-01-15 # 发布日期
|
|
90
|
+
author: 你的名字 # 作者名称
|
|
91
|
+
tags: # 标签(数组)
|
|
92
|
+
- 介绍
|
|
93
|
+
categories: # 分类(数组)
|
|
94
|
+
- 个人
|
|
95
|
+
draft: false # true = 从列表中隐藏
|
|
96
|
+
star: false # true = 精选文章
|
|
97
|
+
---
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
::: tip 必填与可选
|
|
101
|
+
只有 `title` 是必填的。其他字段都是可选的,但建议填写以便更好地组织和优化 SEO。
|
|
102
|
+
:::
|
|
103
|
+
|
|
104
|
+
## 使用子目录
|
|
105
|
+
|
|
106
|
+
使用子目录来组织相关文章:
|
|
107
|
+
|
|
108
|
+
```
|
|
109
|
+
content/posts/
|
|
110
|
+
├── tutorials/
|
|
111
|
+
│ ├── README.md ← 显示在 /posts/tutorials
|
|
112
|
+
│ ├── javascript.md ← 显示在 /posts/tutorials/javascript
|
|
113
|
+
│ └── css.md ← 显示在 /posts/tutorials/css
|
|
114
|
+
└── projects/
|
|
115
|
+
└── my-app.md ← 显示在 /posts/projects/my-app
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
### 目录 README
|
|
119
|
+
|
|
120
|
+
每个目录可以有一个 `README.md` 作为该目录的索引页面:
|
|
121
|
+
|
|
122
|
+
```markdown
|
|
123
|
+
---
|
|
124
|
+
title: 教程
|
|
125
|
+
description: 一步步学习 Web 开发
|
|
126
|
+
---
|
|
127
|
+
|
|
128
|
+
# 教程
|
|
129
|
+
|
|
130
|
+
欢迎来到我的教程专区!
|
|
131
|
+
|
|
132
|
+
- [JavaScript 基础](./javascript)
|
|
133
|
+
- [CSS 技巧](./css)
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
## URL 路径规则
|
|
137
|
+
|
|
138
|
+
你的文件路径决定了 URL:
|
|
139
|
+
|
|
140
|
+
| 文件路径 | URL |
|
|
141
|
+
|----------|-----|
|
|
142
|
+
| `posts/hello.md` | `/posts/hello` |
|
|
143
|
+
| `posts/tech/intro.md` | `/posts/tech/intro` |
|
|
144
|
+
| `posts/tech/README.md` | `/posts/tech` |
|
|
145
|
+
|
|
146
|
+
::: info 大小写不敏感
|
|
147
|
+
URL 会自动转为小写。`Hello-World.md` 变成 `/posts/hello-world`。
|
|
148
|
+
:::
|
|
149
|
+
|
|
150
|
+
## 添加图片
|
|
151
|
+
|
|
152
|
+
将图片放在 `public/images/` 目录并引用:
|
|
153
|
+
|
|
154
|
+
```markdown
|
|
155
|
+

|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
对于文章专用的图片,你可以创建一个文件夹:
|
|
159
|
+
|
|
160
|
+
```
|
|
161
|
+
public/
|
|
162
|
+
└── images/
|
|
163
|
+
└── posts/
|
|
164
|
+
└── hello-world/
|
|
165
|
+
└── cover.jpg
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
然后使用:
|
|
169
|
+
|
|
170
|
+
```markdown
|
|
171
|
+

|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
---
|
|
175
|
+
|
|
176
|
+
恭喜你发布了第一篇文章!接下来,让我们了解 [项目结构](./04-structure)。
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: 项目结构
|
|
3
|
+
description: 了解文件和文件夹的组织方式
|
|
4
|
+
pubDate: 2025-01-01
|
|
5
|
+
author: jet-w
|
|
6
|
+
categories:
|
|
7
|
+
- 文档
|
|
8
|
+
tags:
|
|
9
|
+
- 入门
|
|
10
|
+
- 结构
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# 项目结构
|
|
14
|
+
|
|
15
|
+
了解项目结构有助于你知道在哪里查找和放置文件。
|
|
16
|
+
|
|
17
|
+
## 概览
|
|
18
|
+
|
|
19
|
+
```
|
|
20
|
+
your-blog/
|
|
21
|
+
├── content/ # 你的内容
|
|
22
|
+
│ ├── posts/ # 博客文章
|
|
23
|
+
│ └── pages/ # 独立页面
|
|
24
|
+
├── public/ # 静态资源
|
|
25
|
+
│ ├── images/ # 图片
|
|
26
|
+
│ └── videos/ # 视频
|
|
27
|
+
├── src/
|
|
28
|
+
│ ├── config/ # 配置文件
|
|
29
|
+
│ │ ├── locales/ # 语言配置
|
|
30
|
+
│ │ ├── site.ts # 站点设置
|
|
31
|
+
│ │ └── ...
|
|
32
|
+
│ └── ...
|
|
33
|
+
├── astro.config.mjs # Astro 配置
|
|
34
|
+
└── package.json # 依赖
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## 内容目录
|
|
38
|
+
|
|
39
|
+
这是你的内容存放的地方:
|
|
40
|
+
|
|
41
|
+
### posts/
|
|
42
|
+
|
|
43
|
+
Markdown 或 MDX 格式的博客文章:
|
|
44
|
+
|
|
45
|
+
```
|
|
46
|
+
content/posts/
|
|
47
|
+
├── hello-world.md # 单篇文章
|
|
48
|
+
├── tutorials/ # 分类文件夹
|
|
49
|
+
│ ├── README.md # 分类索引
|
|
50
|
+
│ └── getting-started.md
|
|
51
|
+
└── blog_docs_zh/ # 文档
|
|
52
|
+
└── ...
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### pages/
|
|
56
|
+
|
|
57
|
+
独立页面,如关于、联系:
|
|
58
|
+
|
|
59
|
+
```
|
|
60
|
+
content/pages/
|
|
61
|
+
├── about.md # /about
|
|
62
|
+
└── contact.md # /contact
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
## Public 目录
|
|
66
|
+
|
|
67
|
+
直接提供的静态文件:
|
|
68
|
+
|
|
69
|
+
```
|
|
70
|
+
public/
|
|
71
|
+
├── images/ # 图片
|
|
72
|
+
│ ├── avatar.jpg # /images/avatar.jpg
|
|
73
|
+
│ └── posts/ # 文章图片
|
|
74
|
+
├── videos/ # 视频
|
|
75
|
+
├── favicon.svg # 站点图标
|
|
76
|
+
└── robots.txt # SEO 文件
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
::: tip 直接访问
|
|
80
|
+
`public/` 中的文件在根 URL 提供。
|
|
81
|
+
`public/images/cat.jpg` → `https://yoursite.com/images/cat.jpg`
|
|
82
|
+
:::
|
|
83
|
+
|
|
84
|
+
## 配置目录
|
|
85
|
+
|
|
86
|
+
站点配置文件:
|
|
87
|
+
|
|
88
|
+
```
|
|
89
|
+
src/config/
|
|
90
|
+
├── locales/ # 语言特定配置
|
|
91
|
+
│ ├── en/ # 英文
|
|
92
|
+
│ │ ├── index.ts
|
|
93
|
+
│ │ ├── site.ts
|
|
94
|
+
│ │ ├── menu.ts
|
|
95
|
+
│ │ ├── footer.ts
|
|
96
|
+
│ │ └── sidebar.ts
|
|
97
|
+
│ └── zh-CN/ # 中文
|
|
98
|
+
│ └── ...
|
|
99
|
+
├── site.ts # 默认站点配置
|
|
100
|
+
├── menu.ts # 默认菜单
|
|
101
|
+
├── sidebar.ts # 侧边栏设置
|
|
102
|
+
├── footer.ts # 页脚设置
|
|
103
|
+
└── social.ts # 社交链接
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
## 关键配置文件
|
|
107
|
+
|
|
108
|
+
### astro.config.mjs
|
|
109
|
+
|
|
110
|
+
主要 Astro 配置:
|
|
111
|
+
|
|
112
|
+
```javascript
|
|
113
|
+
export default defineConfig({
|
|
114
|
+
integrations: [
|
|
115
|
+
astroBlog({ i18n: i18nConfig }),
|
|
116
|
+
vue(),
|
|
117
|
+
tailwind(),
|
|
118
|
+
],
|
|
119
|
+
site: 'https://yourdomain.com',
|
|
120
|
+
});
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
### src/config/site.ts
|
|
124
|
+
|
|
125
|
+
站点元数据:
|
|
126
|
+
|
|
127
|
+
```typescript
|
|
128
|
+
export const siteConfig = {
|
|
129
|
+
title: '我的博客',
|
|
130
|
+
description: '一个关于...',
|
|
131
|
+
author: '你的名字',
|
|
132
|
+
avatar: '/images/avatar.jpg',
|
|
133
|
+
};
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
### src/config/menu.ts
|
|
137
|
+
|
|
138
|
+
导航链接:
|
|
139
|
+
|
|
140
|
+
```typescript
|
|
141
|
+
export const menu = [
|
|
142
|
+
{ name: '首页', href: '/', icon: 'home' },
|
|
143
|
+
{ name: '文章', href: '/posts', icon: 'posts' },
|
|
144
|
+
{ name: '关于', href: '/about', icon: 'about' },
|
|
145
|
+
];
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
## 文件命名规范
|
|
149
|
+
|
|
150
|
+
| 类型 | 规范 | 示例 |
|
|
151
|
+
|------|------|------|
|
|
152
|
+
| 文章 | 小写加短横线 | `my-first-post.md` |
|
|
153
|
+
| 配置 | camelCase 或 kebab | `site.ts`, `menu.ts` |
|
|
154
|
+
| 图片 | 描述性名称 | `hero-banner.jpg` |
|
|
155
|
+
|
|
156
|
+
::: warning 避免空格
|
|
157
|
+
不要在文件名中使用空格。使用短横线代替:
|
|
158
|
+
- ❌ `my first post.md`
|
|
159
|
+
- ✅ `my-first-post.md`
|
|
160
|
+
:::
|
|
161
|
+
|
|
162
|
+
## 各文件夹的作用
|
|
163
|
+
|
|
164
|
+
| 文件夹 | 用途 | 你应该... |
|
|
165
|
+
|--------|------|-----------|
|
|
166
|
+
| `content/posts/` | 博客文章 | 在这里添加你的文章 |
|
|
167
|
+
| `content/pages/` | 静态页面 | 添加关于、联系页面 |
|
|
168
|
+
| `public/` | 静态资源 | 放置图片、文件 |
|
|
169
|
+
| `src/config/` | 设置 | 自定义你的站点 |
|
|
170
|
+
|
|
171
|
+
---
|
|
172
|
+
|
|
173
|
+
现在你了解了结构!让我们学习如何 [部署你的博客](./05-deploy)。
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: 部署
|
|
3
|
+
description: 构建并部署你的博客到 GitHub Pages
|
|
4
|
+
pubDate: 2025-01-01
|
|
5
|
+
author: jet-w
|
|
6
|
+
categories:
|
|
7
|
+
- 文档
|
|
8
|
+
tags:
|
|
9
|
+
- 入门
|
|
10
|
+
- 部署
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# 部署
|
|
14
|
+
|
|
15
|
+
是时候与世界分享你的博客了!本指南介绍如何部署到 GitHub Pages。
|
|
16
|
+
|
|
17
|
+
## 构建生产版本
|
|
18
|
+
|
|
19
|
+
首先,创建生产构建:
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
npm run build
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
这会创建一个包含静态文件的 `dist/` 文件夹:
|
|
26
|
+
|
|
27
|
+
```
|
|
28
|
+
dist/
|
|
29
|
+
├── index.html
|
|
30
|
+
├── posts/
|
|
31
|
+
│ └── hello-world/
|
|
32
|
+
│ └── index.html
|
|
33
|
+
├── assets/
|
|
34
|
+
│ ├── styles.css
|
|
35
|
+
│ └── scripts.js
|
|
36
|
+
└── ...
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## 本地预览
|
|
40
|
+
|
|
41
|
+
部署前测试构建:
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
npm run preview
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
访问 `http://localhost:4321` 验证一切正常。
|
|
48
|
+
|
|
49
|
+
## 部署到 GitHub Pages
|
|
50
|
+
|
|
51
|
+
### 步骤 1: 配置 Astro
|
|
52
|
+
|
|
53
|
+
更新你的 `astro.config.mjs`:
|
|
54
|
+
|
|
55
|
+
```javascript
|
|
56
|
+
import { defineConfig } from 'astro/config';
|
|
57
|
+
|
|
58
|
+
export default defineConfig({
|
|
59
|
+
site: 'https://username.github.io',
|
|
60
|
+
base: '/repo-name/', // 仅在不使用自定义域名时需要
|
|
61
|
+
});
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
::: tip 自定义域名
|
|
65
|
+
如果使用自定义域名(如 `myblog.com`),设置 `base: '/'` 或完全移除它。
|
|
66
|
+
:::
|
|
67
|
+
|
|
68
|
+
### 步骤 2: 创建 GitHub Actions 工作流
|
|
69
|
+
|
|
70
|
+
创建 `.github/workflows/deploy.yml`:
|
|
71
|
+
|
|
72
|
+
```yaml
|
|
73
|
+
name: Deploy to GitHub Pages
|
|
74
|
+
|
|
75
|
+
on:
|
|
76
|
+
push:
|
|
77
|
+
branches: [main]
|
|
78
|
+
workflow_dispatch:
|
|
79
|
+
|
|
80
|
+
permissions:
|
|
81
|
+
contents: read
|
|
82
|
+
pages: write
|
|
83
|
+
id-token: write
|
|
84
|
+
|
|
85
|
+
concurrency:
|
|
86
|
+
group: "pages"
|
|
87
|
+
cancel-in-progress: false
|
|
88
|
+
|
|
89
|
+
jobs:
|
|
90
|
+
build:
|
|
91
|
+
runs-on: ubuntu-latest
|
|
92
|
+
steps:
|
|
93
|
+
- name: Checkout
|
|
94
|
+
uses: actions/checkout@v4
|
|
95
|
+
|
|
96
|
+
- name: Setup Node
|
|
97
|
+
uses: actions/setup-node@v4
|
|
98
|
+
with:
|
|
99
|
+
node-version: 20
|
|
100
|
+
cache: 'npm'
|
|
101
|
+
|
|
102
|
+
- name: Install dependencies
|
|
103
|
+
run: npm ci
|
|
104
|
+
|
|
105
|
+
- name: Build
|
|
106
|
+
run: npm run build
|
|
107
|
+
|
|
108
|
+
- name: Upload artifact
|
|
109
|
+
uses: actions/upload-pages-artifact@v3
|
|
110
|
+
with:
|
|
111
|
+
path: dist/
|
|
112
|
+
|
|
113
|
+
deploy:
|
|
114
|
+
needs: build
|
|
115
|
+
runs-on: ubuntu-latest
|
|
116
|
+
environment:
|
|
117
|
+
name: github-pages
|
|
118
|
+
url: ${{ steps.deployment.outputs.page_url }}
|
|
119
|
+
steps:
|
|
120
|
+
- name: Deploy to GitHub Pages
|
|
121
|
+
id: deployment
|
|
122
|
+
uses: actions/deploy-pages@v4
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
### 步骤 3: 启用 GitHub Pages
|
|
126
|
+
|
|
127
|
+
1. 在 GitHub 上打开你的仓库
|
|
128
|
+
2. 导航到 **Settings** → **Pages**
|
|
129
|
+
3. 在 "Build and deployment" 下,选择 **GitHub Actions** 作为来源
|
|
130
|
+
4. 将代码推送到 `main` 分支
|
|
131
|
+
|
|
132
|
+
你的站点将可在 `https://username.github.io/repo-name/` 访问
|
|
133
|
+
|
|
134
|
+
### 步骤 4: 自定义域名(可选)
|
|
135
|
+
|
|
136
|
+
要使用自定义域名:
|
|
137
|
+
|
|
138
|
+
1. **添加 CNAME 文件**: 创建 `public/CNAME` 并写入你的域名:
|
|
139
|
+
```
|
|
140
|
+
myblog.com
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
2. **配置 DNS**: 在你的域名注册商添加以下记录:
|
|
144
|
+
- **A 记录**(用于顶级域名如 `myblog.com`):
|
|
145
|
+
```
|
|
146
|
+
185.199.108.153
|
|
147
|
+
185.199.109.153
|
|
148
|
+
185.199.110.153
|
|
149
|
+
185.199.111.153
|
|
150
|
+
```
|
|
151
|
+
- **CNAME 记录**(用于 `www` 子域名):
|
|
152
|
+
```
|
|
153
|
+
www -> username.github.io
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
3. **更新 Astro 配置**:
|
|
157
|
+
```javascript
|
|
158
|
+
export default defineConfig({
|
|
159
|
+
site: 'https://myblog.com',
|
|
160
|
+
// 自定义域名不需要 base
|
|
161
|
+
});
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
4. **在 GitHub 中启用**: 在仓库 Settings → Pages 中,添加你的自定义域名
|
|
165
|
+
|
|
166
|
+
::: info SSL 证书
|
|
167
|
+
GitHub 会自动提供免费的 SSL 证书。可能需要最多 24 小时生效。
|
|
168
|
+
:::
|
|
169
|
+
|
|
170
|
+
## 部署清单
|
|
171
|
+
|
|
172
|
+
部署前验证:
|
|
173
|
+
|
|
174
|
+
- [ ] `npm run build` 无错误完成
|
|
175
|
+
- [ ] `npm run preview` 正确显示站点
|
|
176
|
+
- [ ] 所有链接正常工作(无断链)
|
|
177
|
+
- [ ] 图片正确加载
|
|
178
|
+
- [ ] Meta 标签已设置(标题、描述)
|
|
179
|
+
- [ ] Favicon 已配置
|
|
180
|
+
|
|
181
|
+
## 持续部署
|
|
182
|
+
|
|
183
|
+
配置完成后,你的站点会自动更新:
|
|
184
|
+
|
|
185
|
+
```bash
|
|
186
|
+
git add .
|
|
187
|
+
git commit -m "添加新博客文章"
|
|
188
|
+
git push origin main
|
|
189
|
+
# 站点在约 1-2 分钟内自动更新!
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
## 其他部署选项
|
|
193
|
+
|
|
194
|
+
这个博客可以部署到任何静态托管平台:
|
|
195
|
+
|
|
196
|
+
- **Vercel** - 零配置 Astro 支持,全球 CDN
|
|
197
|
+
- **Netlify** - 简单设置,支持表单处理
|
|
198
|
+
- **Cloudflare Pages** - 快速边缘网络,免费套餐
|
|
199
|
+
- **AWS S3 + CloudFront** - 可扩展的云托管
|
|
200
|
+
- **Firebase Hosting** - Google 的托管平台
|
|
201
|
+
|
|
202
|
+
有关这些平台的详细说明,请参阅 [Astro 部署指南](https://docs.astro.build/en/guides/deploy/)。
|
|
203
|
+
|
|
204
|
+
---
|
|
205
|
+
|
|
206
|
+
恭喜!你已完成快速入门指南。
|
|
207
|
+
|
|
208
|
+
继续学习 [写作指南](/posts/blog_docs_zh/02.guide) 来掌握内容创作。
|