相信各位github资深玩家都有自己基于githubpages的个人站点。官方推荐的静态站点生成器是Jekyll。如果大家有兴趣使用Jekyll,请自行google,这里不再赘述。本文主要介绍基于Create-React-App搭建个人博客的相关实践,可能更适合前端开发小伙伴。githubpages是github推出的静态站点服务。它的主要用途是利用你在github仓库中的代码搭建自己的静态站点,为用户提供一个github.io二级域名。您也可以通过添加DNSCNAME记录来绑定设置您自己的域名。githubpages最简单粗暴的方式就是直接在github上面的静态页面,创建一个github仓库,名字叫[你的github账号].github.io,把你的index.html页面代码丢到master分支,就可以了完成您已经通过https://[您的github帐户名].github.io直接访问了您的站点。对于一个简单的个人博客站点,有以下基本功能:添加文章、编辑、文章一键分类、博客风格的评论和良好的归档风格、SEO等。下面介绍如何基于React实现一个简单的博客静态博客。1、创建React项目使用Create-React-App(以下简称CRA)的生成器创建一个React前端项目骨架。对本项目做一些改动,方便我们日常的开发和使用习惯:使用react-app-rewired调整CRA中webpack的配置通过编写不同的React容器组件(container)来实现不同的页面实现对server版本的向后兼容,并通过统一的json结构配置应用的页面路由使用蚂蚁金服的antd设计语言(React组件)快速实现业务UI的使用axios实现前后端数据请求。个人修改的项目代码在这里。你可以直接fork或down来使用它。2.使用markdown获取你的文章2.1创建新文章的交互式命令行(基于inquirer)一般静态博客系统(如gatsby)都会为用户提供创建新文章的交互式命令行,效果大致如下:使用nodejs中readline模块的native方法可以实现类似的功能。这里推荐一个第三方工具:inquirer,本质上是对readline模块的增强,提供了很多交互式命令行开发的实用方法,实现了友好的用户界面(命令行)。对于上述GIF例子的功能,其代码实现如下://newPost.jsconstinquirer=require('inquirer');constmoment=require('moment');constquestions=[{type:'input',name:'post_name',message:'请输入您的文章别名(用于创建文章目录,仅限英文,单词之间用破折号'-'连接):',validate:value=>{if(/(\.|\*|\?|\\|\/)/gi.test(value)){return'文章别名不能包含特殊符号(.*?\\/),请重新输入↑↑';}if(/(([A-z]+-)+)?[A-z]+/gi.test(value)){返回真;}return'文章别名无效,请重新输入↑↑';},过滤器:值=>值。replace(/\s+/gi,'-'),},{type:'input',name:'create_at',message:'请输入文章发表时间(或回车使用默认值):',默认:()=>{returnmoment().format('YYYY-MM-DDThh:mm:ss');},验证:值=>{if(/\d{4}-\d\d-\d\dT\d\d:\d\d:\d\d/gi.test(value)){返回真的;}return'时间格式无效,请重新输入↑↑';},},];inquirer.prompt(questions).then(answers=>{//获取用户输入const{post_name,create_at}=answers;/*在这里做一些命令行反射反馈和程序性工作*//*(如:提示用户输入是否合法,创建文章对应的目录和文件等)*/}).catch(err=>{/*异常处理*/});如果是,将这个node脚本添加到项目package.json的脚本中(如:new-post:"nodenewPost.js"),即可执行2.2mdtohtml(基于react-markdown)使用markdown文档通过npmrun命令编辑和存储博客文章的内容,需要将md文档转换成ReactJSX对象渲染到网页中。这里推荐使用react-markdown,有6个功能,作者维护比较用心。用法如下:importReactMarkdownfrom'react-markdown';
