最近在学习Nuxt,所以就想着把博客重构一下,学习一下Nuxt的使用。
目标是将博客系统的前端部分重构为Nuxt.js应用,包括文章列表、展示内容功能。
技术栈选型
这半年以来我与团队一齐开发了泡泡树洞项目,项目中我主要负责后端开发与CICD等运维工作,前端部分则由团队的前端工程师负责。在这个过程中,我对Nuxt.js以及其生态有一些了解。因此,我决定使用Nuxt.js重构我的博客,提升博客质量的同时也加深对Nuxt的理解。
可以说这是我第一次尝试使用Nuxt.js开发项目,我希望通过这次重构,更深入地了解Nuxt.js的特性与优势,同时也希望能够为其他对Nuxt感兴趣的开发者提供一些参考。
下面是我在重构博客过程中选用的技术栈:
作为博客项目,其核心是内容管理与展示,因此我选择了@nuxt/content作为内容管理系统,以便更方便地管理博客文章、分类、标签等静态内容。同时,为了提升博客的视觉效果与用户体验,我选用了Tailwind CSS与DaisyUI,以及nuxt-icon提供的图标库。
技术栈安装与配置
安装Node.js与pnpm:
初始化Nuxt项目:
在这里遇到了本次重构第一个问题
我意识到是因为我在国内,无法访问GitHub的原因,如果在 WSL 中我会直接使用 proxychains 来解决这个问题,但是我现在是在 Mac 环境下,由于 Proxychains 无法在 Mac 上使用,故我选择直接找到了 Nuxt 的模板地址,然后直接下载了模板文件。
这样就完成了项目的初始化,后续的安装与配置过程就比较顺利了,详情可以参考 Nuxt 以及各技术栈的官方文档。
内容迁移策略
我之前的Blog是基于Hexo搭建的,Hexo是一个静态博客框架,它使用Markdown文件来管理文章内容,这与Nuxt的@nuxt/content插件的使用方式有一定的相似性,因此我将文章从Hexo直接复制到Nuxt的content目录下,并稍作调整,即可完成内容迁移。
在我原来的Blog中,文章 Header 部分是这样的:
@nuxt/content会自动解析文件头,并转换为对象
在项目中可以使用@nuxt/content插件来获取文章数据,例如:
即可获取到文章的数据,然后在页面中展示。
在页面中展示时,可以使用ContentRenderer组件来渲染文章内容,例如:
为了实现prose样式,需要在tailwind.config.js中添加配置:
此处省略了一些配置,具体配置可以参考 Tailwindcss/typography 文档:https://github.com/tailwindlabs/tailwindcss-typography
部署与发布
我选择了Vercel作为博客的部署与发布平台,Vercel是一个提供Serverless部署服务的平台,它支持Nuxt.js项目的部署,并提供了CI/CD功能,可以方便地将项目部署到云端。
在Vercel中,只需要将项目与GitHub仓库关联,然后设置好CI/CD配置,即可实现自动部署。
具体的部署流程可以参考Vercel官方文档。
总结
通过这次重构,我对Nuxt.js有了更深入的了解。现在前端的开发方式已经发生了很大的变化,Nuxt.js提供了一种全新的前端开发方式,使得前端开发更加高效、简单,让前端开发变成像搭积木一样的体验。
在这次重构中,我学到了很多新的知识,也解决了一些问题,同时也发现了一些新的问题,这些问题将成为我下一步学习的方向。
前端的开发相比后端来说,更加灵活,更加有趣,但也更加复杂,需要不断学习,不断提升自己的技术水平。很多时候,前端开发不仅仅是技术问题,更多的是设计问题、用户体验问题,需要我们不断思考、不断尝试。
今天刚做完又看到了一些前端大佬的博客,好看的设计、炫酷的动画,让我感觉自己还有很长的路要走,也希望这个博客成为我前端学习的一个记录,也希期能够帮助到其他人。前端开发简单可以很简单,但是想要做到很好,还是需要花费很多的时间和精力,去学习、去实践、去尝试。
现在这个博客还有很多地方需要改进,比如SEO优化、性能优化、用户体验优化等等,这些都是我接下来要做的事情,不知道还有多少坑要踩,但是我会继续努力,不断学习,不断提升自己的技术水平。
以后每次更新博客,都会记录一下自己的学习经历,希望能够帮助到其他人,也希望能够帮助自己更好地学习前端开发。
前端开发永无止境,做好了一个功能,下一个功能就在等着你,属实是痛苦。
总的来说,这次重构是一次很好的学习经历,我希望通过这次重构,能够提升自己的技术水平,也希望能够为其他对Nuxt感兴趣的开发者提供一些参考。
项目布局与源码
下面是一些项目的基本结构,这里只列出了一些关键文件,具体文件以及目录结构参考 Nuxt 官方文档。
app.vue
布局文件
导航栏以及页脚组件
首页
文章详情页