|
| 1 | +--- |
| 2 | +title: 基于Next.js + Github issues 的个人 blog |
| 3 | +date: 2024-08-08T01:33:41Z |
| 4 | +slug: post-7 |
| 5 | +author: chaseFunny:https://github.com/chaseFunny |
| 6 | +tags: ["blog","教程"] |
| 7 | +--- |
| 8 | + |
| 9 | +# 基于Next.js + Github issues 的个人 blog |
| 10 | + |
| 11 | +大家好,我是幸运的蜗牛,不知道大家是否有自己的 blog,或者想要做一个自己的 blog。我觉得有一个自己的 blog 还是很酷的事情,下面看我是如何从 0 到 1 实现我的个人 blog,先给大家看一下 blog 首页效果 |
| 12 | + |
| 13 | + |
| 14 | + |
| 15 | +## 背景 |
| 16 | + |
| 17 | +我也经常在 CSDN,掘金,微信公众号等一些自媒体平台发布文章,这些其实也可以算是个人 blog ,而且自带流量,对乐意分享的人来说,是非常有好的,但是在这些平台分享的时候,我就更想做一个自己的平台,来发布我写的文章, |
| 18 | + |
| 19 | +我其实已经使用很多技术做个人 blog 了,例如:hexo,docusaurus,next.js (基于`https://giscafer.com/` ); |
| 20 | + |
| 21 | +但是都不是我想要的,我更希望自己从 0 到 1 做一个个人 blog 网站。刚好我在看冴羽的 Next.js 小册,想着实践一下学习的知识,我就决定开发自己的 blog |
| 22 | + |
| 23 | +还有一个原因就是,我平时在逛网站的时候,发现很多大佬都有自己的 blog |
| 24 | + |
| 25 | +本来我是想要直接修改开源的` blog (https://cali.so/)` ,fork 这个项目来进行二创,我也是这样做的,我都改了很多东西了,但是一个非常难受的问题,就是它使用的都是国外的服务,尤其是 sanity ,我本地连接会经常连不上,非常影响开发体验,而且它的源码,很多我不需要,我就下定决定要做一个自己的 blog |
| 26 | + |
| 27 | +## 需求梳理 |
| 28 | + |
| 29 | +确定要自己开发了,就需要梳理一下我需要做一个什么样子的 blog 。blog 核心就是文章。那么**就需要解决文章如何增删改查**。由于我对 MySQL 不熟,而且我也不希望在 Next.js 中自己开发后端,于是就想着 使用 Github issues 来存储帖子数据,使用 github actions 来监听 issues 变化,把 issues 转为文章,然后把项目部署在 vercel ,vercel 可以自动监听代码仓库是否变化进行重新部署。 |
| 30 | + |
| 31 | +有了核心功能思路,就可以开始需求排期, |
| 32 | + |
| 33 | +- [x] 搭建基础项目(commit:https://github.com/axin-s-Template/Nextjs-Boilerplate/commits/main/) |
| 34 | + |
| 35 | + - [x] 代码规范:ESLint + Prettier |
| 36 | + - [x] 提交规范:husky + lint-staged + @commitlint/cli + @commitlint/config-conventional |
| 37 | + - [x] 网站 SEO 元信息 |
| 38 | + - [x] 主题切换 |
| 39 | + - [x] 使用 src作为源码目录, 项目目录更加简洁 |
| 40 | + |
| 41 | +- [x] 全局 导航栏 、底部 、布局组件、网站 SEO 信息、logo 、 404 页面开发 |
| 42 | + |
| 43 | +- [x] 主页开发、引入 framer-motion 为网站添加动效 |
| 44 | + |
| 45 | +- [x] 项目页面开发 |
| 46 | + |
| 47 | +- [x] 博客列表 + 博客详情。引入 contentlayer 渲染 MDX |
| 48 | + |
| 49 | +- [x] 关于页面开发,也是一篇文章,使用 MDX 渲染 |
| 50 | + |
| 51 | +- [x] 博客优化 |
| 52 | + |
| 53 | + - [x] 博客详情 toc 导航栏 |
| 54 | + - [x] 优化移动端展示效果 |
| 55 | + - [x] 推荐阅读(上一篇,下一篇) |
| 56 | + - [x] 博客内容添加 |
| 57 | + - [x] 为代码添加高亮 |
| 58 | + - [x] loading 页面 |
| 59 | + |
| 60 | +- [x] 添加 github actions ,实现 提交 issues ,转为帖子 |
| 61 | + |
| 62 | +- [x] 添加百度验证,谷歌验证,百度分析,谷歌分析 |
| 63 | + |
| 64 | +- [x] 支持 RSS ,Robots,sitemap.xml |
| 65 | + |
| 66 | + > 以上代码 commit:https://github.com/coderPerseus/blog/commits/main/ |
| 67 | +
|
| 68 | +我们可以看一下 chrome 的 LIghthouse 分数 |
| 69 | + |
| 70 | + |
| 71 | + |
| 72 | +还是挺不错的, |
| 73 | + |
| 74 | +## 技术栈 |
| 75 | + |
| 76 | +我是先做了一个基础干净的 [Next.js 启动项目](https://github.com/axin-s-Template/Nextjs-Boilerplate),下面来看看我这个项目使用了哪些技术吧! |
| 77 | + |
| 78 | +- Next.js:react 框架 |
| 79 | +- shadcn/ui :UI 库 |
| 80 | +- tailwindcss: CSS 框架,用于快速构建响应式设计网站(移动优先) |
| 81 | +- contentlayer: 内容层,用于获取和渲染内容。 |
| 82 | +- next-themes: 主题切换库。 |
| 83 | +- framer-motion:为网站添加动效 |
| 84 | +- ESLint + Prettier :代码格式化 |
| 85 | +- husky: Git 钩子管理;lint-staged: 在提交前检查暂存文件;@commitlint/cli 和 @commitlint/config-conventional: 用于规范化提交信息 |
| 86 | +- rss:实现 RSS 订阅能力 |
| 87 | +- github-api + fs-extra :同步 github issues 内容到项目作为帖子 |
| 88 | +- gray-matter + reading-time + rehype-autolink-headings + rehype-prism-plus + rehype-slug + remark-gfm:优化博客渲染 |
| 89 | + |
| 90 | +可以看到使用的都是非常成熟,社区活跃的技术和框架,让我们项目即使遇到问题也能很快解决 |
| 91 | + |
| 92 | +## 项目简介 |
| 93 | + |
| 94 | +由于没有任何调用接口的需求,我目前就把项目做成了[静态导出](https://nextjs.org/docs/app/building-your-application/deploying/static-exports) 的,也就是说我们其实构建后的是一个静态网站。然后我目前是在 vercel 部署我的 blog,它有很多好处: |
| 95 | + |
| 96 | +1. Vercel 提供了与 GitHub 的无缝集成,只需将项目链接到 Vercel,每次推送到 GitHub 仓库时,Vercel 都会自动构建和部署最新的代码。自动化流程大大简化了部署过程,确保每次提交的代码都能自动构建发布 |
| 97 | +2. Vercel 使用全球内容分发网络(CDN)来加速静态资源的加载。无论用户身处何地,都可以快速访问网站内容,提升用户体验和网站性能 |
| 98 | +3. Vercel 可以配置自定义域名,提供免费的 HTTPS 证书,通过简单的配置,就可以将项目部署到自己的域名上,还享受 HTTPS ,香 |
| 99 | + |
| 100 | +## 使用此项目做一个自己的 blog |
| 101 | + |
| 102 | +如果你希望使用这个项目作为自己的 blog,非常简单,只需要三步, |
| 103 | + |
| 104 | +### fork 项目 + 修改网站 SEO 信息 |
| 105 | + |
| 106 | +1. 首先 fork 项目,然后去 `src/config/site.ts ` 这里放着网站的所有元信息,修改对应的内容为自己的就好, |
| 107 | +2. 然后去创建 .env 复制 .env.example 的代码,把对应的数据改为自己的。 |
| 108 | +3. 全局搜索 luckysnail 不要限制大小写,替换为自己的名称 |
| 109 | +4. 去 `.github/workflows/sync-post.yml` 修改 user.name 和 user.email 为自己的 |
| 110 | +5. 我把 github issues 的帖子放在了 `data/blog` ,但是我可能还有一些帖子不在 github issues ,我将其放在了 posts 下,你可以删除我的添加你自己的 |
| 111 | +6. 去 package.json 修改一些包的信息为你自己的 |
| 112 | +7. 去 public 和 assests 把一些静态资源替换为你自己的 |
| 113 | + |
| 114 | +做完这些,你就得到了一个你自己的 blog ,现在就可以 push 代码,然后登录 vercel 部署你的 blog 了,部署其实非常简单,但是最好在本地先部署并运行看一下,看看是否可以成功。vercel 部署可以参考:`https://juejin.cn/post/7143067114025254919` 。部署好了之后我们应该可以看到类似这样 |
| 115 | + |
| 116 | + |
| 117 | + |
| 118 | +它给我们免费的有域名,我们可以点击查看我们的在线链接,这时候就可以把我们的 blog 分享出去了,我们如果主要是国内访问,我们会发现国内访问很慢,我推荐大家买一个国内的域名,在 settings 下的 domains 中进行绑定,然后我们使用绑定的国内域名访问,就会很快啦! |
| 119 | + |
| 120 | +## TODO |
| 121 | + |
| 122 | +后面,我打算使用 nest.js 作为后端,来为我的 blog 开发 点赞,访问数,游览数,帖子存储,评论,留言等功能 |
| 123 | + |
| 124 | +- [ ] 友链 |
| 125 | +- [ ] 登录 |
| 126 | +- [ ] 评论 |
| 127 | +- [ ] 留言板 |
| 128 | +- [ ] 搜索 🔍 |
| 129 | +- [ ] 收藏夹 |
| 130 | +- [ ] 帖子同步平台展示 |
| 131 | + |
| 132 | +## 感谢 |
| 133 | + |
| 134 | +其实自己开发之前我尝试了很多现成的 blog 方案,因为自己从 0 到 1 开发,需要做很多工作。但是发现现成的方案都不是很适合我。在我开发这个 blog 的时候,我参考了很多我觉得不错的 blog。下面是我参考的和看过源码的 blog |
| 135 | + |
| 136 | +- 在设计和 UI 上,我“抄”了很多:`https://cali.so/` 。这是一个开源的 blog(我的也开源啦) |
| 137 | +- https://www.giscafer.com/ |
| 138 | +- https://innei.in/ |
| 139 | +- https://fuxiaochen.com/ |
| 140 | +- https://starter.weijunext.com/ |
| 141 | + |
| 142 | +--- |
| 143 | +此文自动发布于:<a href="https://github.com/coderPerseus/blog/issues/7" target="_blank">github issues</a> |
0 commit comments