Hexo + git + Coding Pages 博客
Hexo + Git + Coding Pages = Blog
前置条件
git+命令行(linux)
环境配置
以下操作基于Windows
git安装与配置
- 下载git
- 安装与配置:略
Nodejs安装与配置
下载Nodejs
安装Nodejs
在安装时界面下方有一个"Add to PATH"的选项,最好勾上;或者也可以安装完成后自己手动添加环境变量。
安装依赖包
|
|
hexo安装
|
|
npm是Node的包管理工具,后面还要多次用到它~ 其中的参数-g是将hexo安装到全局,如果不加的话则默认只会安装到当前目录
开始
初始化
- 选择一个你希望用来存放博客的空文件夹,进入,右键"git bash here"
其实也就是在命令行下进入这个文件夹
- Hexo 初始化
|
|
git初始化
1
git init
Hexo的初始化要求目标文件夹为空,如果先建立git仓库的话由于隐藏文件夹.git的存在会导致hexo “target not empty"的报错。
在执行这个操作之后,部分文件夹结构如下:
文件夹/文件 | 备注 |
---|---|
scaffolds | 存放文章模板,新建文章时根据其中的模板生成。其中draft.md是草稿模板,page.md是独立页面模板,post.md是文章模板。可以自己修改。 |
source | 存放资源文件 |
themes | 存放主题文件 |
_config.yml | 存放这个博客的基本配置,所用的标记语言是YAML,可以打开编辑调整设置。 |
如果主题是从git仓库clone的,应当将主题目录下的.git隐藏文件夹删掉,防止对博客的整个git仓库产生干扰。
不过据说用git的子模块可以更方便的解决,而且可以更新主题。
但我不会
git分支
Hexo编译生成的网站位于hexo根目录下的public文件夹内,deploy命令会将其部署到Git远程仓库。但是同时我们也希望用Git管理所有的源文件和配置文件。建立两个git仓库又太麻烦,那么这时可以用Git的分支功能。
也就是说,可以将源文件提交为hexo(或者其他名字)分支,将hexo生成的网页提交为master分支。
coding的page服务只能部署master分支的网页。
创建分支xxx
|
|
git仓库建立后,需要commit一次才能建立新的分支
切换到分支xxx
|
|
配置
打开博客根目录下的_config.yml,这个配置文件使用YAML编写,其中以“#”开头的是注释,形如“name: value”的代表名为name的项值为value
冒号后的空格不能省去
注意:接下来在编辑所有的文本文件时,都需要使用UTF-8编码进行编辑或者保存。否则容易造成非英文字符乱码。一般推荐用带编码转换功能的文本编辑器。反正不要用记事本
注释
|
|
使用
写文章
新建文章
|
|
这样就在source/_posts下建立了xxx.md
现在的内容如下:
|
|
其实还可以有更多的设置项:
|
|
其中comment是评论的开关;toc是文章目录的开关
写草稿
有的时候开始写一篇文章,但是尚未完成不能发布,这时候可以先新建一篇草稿:
|
|
这样就在source/_draft下建立了xxx.md,格式与文章相同。
发布草稿
当草稿写完后可以将其发布:
|
|
这样就将_draft下的xxx.md移动到_post下了。但这不是普通的移动。
- 新建草稿时并不会添加时间信息,但是在发布草稿时会将发布时的时间添加到文章内。
- 在新建或者发布文章时,如果文件名重复,hexo会自动重命名为类似xxx-1.md,但是标题是根据文件内部的title确定的。
独立页面
|
|
这样就在source下建立了名为xxx的文件夹,其中包含index.md。
但是这时这个独立页面还是不可见的,添加入口的方法见你所使用的主题文档。
编译
|
|
或者可以简化成:
|
|
这时hexo会将所有的.md和资源文件编译成.html文件,并按照_config.yml中指定的结构存放于public文件夹内。
正常的输出信息类似于:
|
|
此时public中就是一个完整的站点了。
如果编译出现错误,最好检查一下编译之前所进行的操作正确性。报错的信息也会指出在什么文件的什么位置造成了错误。但是通常这样的错误会引发连锁反应,难以找到最初的根源。
另外hexo在编译时只会更新有变化的文件,如果想要清空已经生成的文件,使得下一次能够全部重新编译,可以这样:
|
|
本地预览
有时我们想要看看现在博客呈现效果,但是又不想重新部署,这时可以开启本地预览:
|
|
简化写法:
|
|
正常的输出信息是:
|
|
其中的xxx是_config.yml中指定的root:项。
所以现在你的博客已经运行在本地了,在浏览器中输入http://localhost:4000/xxx/.,就可以预览博客的效果。
部署
当然,想要让小伙伴们也能看到我们的博客,还要将其部署到某个服务器。
或者我们可以利用Coding Pages服务,或者github.io。
具体的方法见Coding的介绍。
对于博客本身,我们还要在配置文件_config.yml中找到部署的配置并填写完整:
|
|
在一切设置完毕后,使用下面的命令执行部署:
|
|
简写:
|
|
另外,编译和部署可以一起使用:
|
|
|
|
批量修改分类
完善
CDN
博客的主题往往会用到一些常用的前端开发的库,默认是一起存在主题文件夹下的。众所周知,服务商对于像我们这样搭建的博客不会分配太多的带宽,所以如果能够从速度更快第三方加载一些公用的库,博客打开的速度就可以得到提升。而且将资源分布到不同的节点可以防范一定程度的DDOS攻击。
一些主题内置了设置公用CDN加速的配置,常用的公用CDN有https://www.bootcdn.cn等
注意:使用公用CDN后,博客就会从指定的url载入相关的文件而不是从博客本身的目录加载。所以如果设置了公用CDN而在未联网的情况下进行本地预览时,就会出现异常。
添加自定义代码
注意:尚未测试这个方法对于其他主题适用不适用。
在sources文件夹下_data文件夹内建立footer.yml,然后这样写:
|
|
或者如果有一定基础,可以自己修改主题的模板文件。
文章浏览统计
LeanCloud
LeanCloud是一家云服务提供商,而且对于一般的使用免费,后面还会用到。
文章的计数器功能可以用LeanCloud。具体见你的主题配置。
站长统计
先注册友盟
再到首页-产品-U-Web统计-立即使用-添加站点。
然后把生成的代码放到合适的位置即可。
评论系统
第三方评论系统有许多,这里介绍一种。
Valine
Valine“是一款基于Leancloud的快速、简洁且高效的无后端评论系统。 ”(来自Valine首页)
大多数的主题已经内置了Valine,如果没有,可以参阅Valine的教程,这里不再赘述。
绑定域名
如果拥有自己的域名,可以将博客绑定到域名上。
申请域名
域名可以从阿里云,腾讯云等申请/购买,不同的域名价格差距还是很大的。
在购买之前和购买之后,还要完善各种各样的信息。另外,一些域名不实名认证可能无法正常使用。
下面以阿里云购买的域名为例。
解析域名
获得域名之后,要将域名解析到博客。由于我们的博客是托管在Coding上,Coding给出的方案是将域名用CNAME方式解析到pages.coding.me,然后Coding再根据用户在pages服务中设置的域名解析到对应的用户。
所以,我们只要进解析界面将我们的域名解析到pages.coding.me即可。(注意:**不用**把pages替换为你的用户名,即不用改动任意一个字符!)
另外,由于Coding用Let’s Encrypt申请SSL/TLS证书,解析时要确保在境外能够访问博客,可以将境外的线路也解析到相同的地址。
搜索引擎收录
sitemap
安装插件:
|
|
这样以后每次编译时都会自动更新博客根目录下的sitemap.xml和baidusitemap.xml。
登录
首先要有个Google账户。然后访问https://www.google.com/webmasters,登录,输入博客域名。
验证
此处介绍文件验证。下载验证用的html文件,放在source文件夹根目录下。
注意:为了防止hexo编译该html文件,应该在其开头加上:
|
|
(冒号后面有一个空格)
然后编译,部署,等待服务器部署完成后,访问 你的域名/那个html的名称.html,如果是空白背景上显示一行这样的文本(也就是文件内容):
|
|
就说明成功了。然后接着验证即可。
吐槽:Google的人机验证总不把我当人-_-。
提交站点地图
在左面“抓取”目录下选择“站点地图”,点“添加/测试站点地图”(在右面)
然后就是等啦。
百度
首先要有个账号。然后访问https://ziyuan.baidu.com。
点用户中心,站点管理。
吐槽:百度居然要这么多信息……
然后输入域名,选择类型;
然后验证。
同样以文件验证为例,下载,放到source,并且加上防止hexo编译的代码。编译部署。
确认后按完成验证。
链接提交
百度的链接提交方式有很多;
自动提交有主动推送,自动推送,sitemap;
主动推送:
安装插件,
|
|
然后在_config.yml中添加:
|
|
然后在deploy项中添加:
|
|
这样每次部署都会推送了。
自动推送
复制代码添加到博客即可。
sitemap
之前我们安装了两个插件,一个是生成通用的sitemap,一个是生成百度的sitemap。所以这里需要填写百度的sitemap.xml的url。
360搜索
首先要有个360账号。
然后访问http://zhanzhang.so.com。
验证
我的站点-站点管理-添加网站。
添加后会多一条记录,记录那一行会显示蓝色的“请验证”。
没错,点它。
还是以文件验证为例,下载,放到source文件夹下。(360的验证文件是txt格式的,省心多了)。
编译,部署。
用同样方式检验文件后,点击验证。
sitemap
现在,在刚刚“请验证”的地方多了很多选项。
这里我们点“管理sitemap”-添加新数据,输入,添加。
自动收录
复制代码,添加到博客中即可。
SEO优化
略
版权
添加许可证
我用的这个。
其中license.png可以在这里下载。
|
|
防复制
添加自定义代码如下:
|
|
这样别人就不能复制页面的内容了。但是这种写法好像不是很正规,不过可以生效(摊手)。
或者如果你更担心,可以用更严格的方法:
|
|
这样就既不能选择文本,也不能右键了。
或者可以在复制时添加版权信息。
我参考这里的方法改进了一下。
另外还有一些参考资料:
https://developer.mozilla.org/zh-CN/docs/Web/API/Range/selectNode
https://developer.mozilla.org/zh-CN/docs/Web/API/Selection
主要思路:
对于IE,直接添加到剪贴板;
对于其他浏览器,新建一个不可见的div,在复制时将其内容添加到选区。
需要注意的是这里并不能将visibility设为hidden而是要将其位置设置到页面外,否则这个div并不能被选取。
|
|
|
|
一些常用插件
站内搜索
https://github.com/wzpan/hexo-generator-search
这个插件可以生成搜索索引。
使用如下命令安装:
|
|
然后在配置文件中添加:
|
|
然后如果使用的主题集成了搜索功能的话,开启即可。
如果没有,则需要自己添加,不再赘述。
压缩插件
hexo在编译的时候会产生大量的空格和换行,也影响加载速度。
使用hexo-neat(非官方,不推荐)
首先安装:
|
|
然后在_config.yml中添加配置:
|
|
这样编译的时候就会自动压缩。
但是由于压缩需要时间,所以编译由原来的几秒变成了几十秒……
一个解决方法:将_config.yml中的neat_enable设为false,然后将其复制一份(例如neat.yml),在neat.yml中将neat_enable设为true。
这样在平时hexo g
的时候不会压缩保证效率,在需要部署的时候可以用hexo g --config neat.yml
。
缺点是要保持两个配置文件同步,可以用脚本实现。
压缩的效果还是很显著的,这是我的public文件夹总大小:
压缩前 | 压缩后 |
---|---|
50MB | 15MB |
参考: https://blog.csdn.net/lewky_liu/article/details/82432003 hexo-neat的github地址
使用hexo-uglify, hexo-clean-css, hexo-html-minifier
(2022.3.16更新)
参考:https://blog.jijian.link/2020-03-05/hexo-compress/
这三个是官方的插件,支持缓存。缺点就是server 的时候也会压缩,但是对我没影响。
安装:
|
|
配置:
|
|
文章加密
安装
|
|
在_config.yml中添加:
|
|
使用
如果想要特殊指定,在文章开头的yaml头部分,添加以下内容:
|
|
**注意:**由于yaml的bug,密码不能是带有前缀0的纯数字。
解决方法:用双引号括起密码(双引号本身不作为密码内容)
美化
Mathjax
添加以下代码:
|
|
就可以在markdown文章中直接使用数学公式。
测试一下:
$$ x^2+y^2-|x|y=1 $$$$ \sqrt{4-2\sqrt3}=\sqrt3-1 $$踩坑
2019-3-23更新:
latex中_(下划线)和\(斜杠)会被hexo默认的markdown渲染引擎转义,造成mathjax对公式渲染错误。
解决方法
!注意:如果使用Pandoc要先下载安装,再在hexo安装插件。
一言
用来每次显示不同的一句(富有哲理的)话。
这里我用了lwl12提供的更便捷的api,只有一行代码,放到想放的地方就可以了。
|
|
我不会告诉你我放在页面最下面
—2020.1.16更新:
lwl12的api好像不能用了,博客也没法访问,那么直接用现在才发现的官方api吧:
|
|
装饰
背景
感觉背景有些单调并且缺乏活力,想更有活力些?
当然可以。
canvas-nest提供了一个简洁而美观的网页背景效果,可以产生能与鼠标互动的立体几何图形。
|
|
这段代码已经使用了CDN,将其添加到博客中即可。
其中color是RGB表示的颜色,opacity表示透明度,count表示线段的数量。
鼠标点击特效
https://github.com/djzhao627/JSClickBubble
这个js文件可以实现点击鼠标时在点击处弹出文字并向上淡出。
保存为js并添加到博客即可。
自定义404页面
当来访者尝试访问一个不存在的页面时,会自动跳转到404页面。如果使用Coding Pages,默认会跳转到Coding的404页面。
如果在sources文件夹下建立404.html,在部署之后就会将其作为默认的404页面。
但是hexo会将sources下的所有.html和.md都编译,所以同样要在.html的开头加上:
|
|
404页面的内容可以自己设计。
音乐
网易云音乐播放器
单曲
在歌曲页面左边封面下方,点生成外链播放器。
歌单
首先将自己的歌单分享-分享给大家,然后在自己的动态里打开,就能找到生成外链播放器的链接了。
注意,网易云音乐播放器不支持https!所以对于使用https的博客,网易云的播放器不适用。
Aplayer
踩坑
这里是一些踩过的坑。
1.编译报错
|
|
原因:url配置有误,root项即使是根目录也应该是“root: /‘
2.自定义代码部署后不生效
即博客使用了https,但代码中使用的CDN使用了http,被浏览器认为不安全。
3.文件根目录绝对路径
有时候需要从根目录开始访问某个文件,但是为了本地测试又不能直接使用域名,那么可以这样访问:/bin/cat.txt
,将会定位到根目录下bin文件夹中的cat.txt文件。
4.编译报错
|
|
原因
升级hexo或者其中插件后出现版本问题
解决办法:
删除node_modules文件夹,将package.json和package-lock.json两个文件回退,再执行npm install
5.执行hexo d
时卡住
可能原因
- 文件正在上传
- _config.yml格式不对
解决方法
Windows下如果是用ssh方法连接远程仓库,可以打开任务管理器看看是不是有ssh.exe在占用上传带宽,如果是就等吧。
6 public文件夹中生成的文件全都是0B的空文件
原因
node的版本>=14时会出问题
解决办法
使用以下命令回退:
|
|