超详细Hexo+Github博客搭建小白教程
<svg xmlns="http://www.w3.org/2000/svg" style="display: none"><path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0)"></path>
</svg>
<p><img src="https://img-blog.csdnimg.cn/20200116153302977.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0dvZF9XZWlZYW5n,size_16,color_FFFFFF,t_70"></p>
<h1>本文不在本站更新,请去原文查看!</h1>
<p><strong>原文链接:https://godweiyang.com/2018/04/13/hexo-blog/</strong></p>
<blockquote>
<p>有任何问题请联系我扣扣:792321264,vx:weiyang792321264,公众号godweiyang。</p>
</blockquote>
<h1>前言</h1>
<p>17年9月的时候开始搭建了第一个自己的独立博客,到现在也稍微像模像样了。很多小伙伴应该也想过搭建一个自己的博客,网上也有一堆详细教程。我在此稍稍总结一下具体的搭建步骤,另外网上很少有修改博客源码的个性化教程,我就稍稍分享一下我的一些修改经验,更多的个性化操作需要你自己以后去摸索。</p>
<p>具体效果可以参观我的博客:godweiyang.com,欢迎大家支持。</p>
<p>我不是一个前端程序员,有些东西不是很了解,写的有问题或有改进的地方请大家指出。</p>
<p>首先要了解一下我们搭建博客要用到的框架。Hexo是高效的静态站点生成框架,它基于Node.js。通过Hexo,你可以直接使用Markdown语法来撰写博客。相信很多小伙伴写工程都写过README.md文件吧,对,就是这个格式的!写完后只需两三条命令即可将生成的网页上传到你的github上,然后别人就可以看到你的网页啦。是不是很简单?你无需关心网页源代码的具体细节,你只需要用心写好你的博客内容就行。</p>
<p><strong>目录结构</strong></p>
<ul>
<li>安装Node.js</li>
<li>添加国内镜像源</li>
<li>安装Git</li>
<li>注册Github账号</li>
<li>安装Hexo</li>
<li>连接Github与本地</li>
<li>写文章、发布文章</li>
<li>绑定域名</li>
<li>个性化设置(matery主题)</li>
<li>备份博客源文件</li>
<li>博客源代码下载</li>
<li>个性化设置(beantech主题,已停更)</li>
</ul>
<h1>安装Node.js</h1>
<p>首先下载稳定版Node.js,我这里给的是64位的。</p>
<p>安装选项全部默认,一路点击<code>Next</code>。</p>
<p>最后安装好之后,按<code>Win+R</code>打开命令提示符,输入<code>node -v</code>和<code>npm -v</code>,如果出现版本号,那么就安装成功了。</p>
<h1>添加国内镜像源</h1>
<p>如果没有梯子的话,可以使用阿里的国内镜像进行加速。</p>
<pre><code class="prism language-bash"><span class="token function">npm</span> config <span class="token keyword">set</span> registry https://registry.npm.taobao.org
</code></pre>
<h1>安装Git</h1>
<p>为了把本地的网页文件上传到github上面去,我们需要用到分布式版本控制工具————Git[下载地址]。</p>
<p>安装选项还是全部默认,只不过最后一步添加路径时选择<code>Use Git from the Windows Command Prompt</code>,这样我们就可以直接在命令提示符里打开git了。</p>
<p>安装完成后在命令提示符中输入<code>git --version</code>验证是否安装成功。</p>
<h1>注册Github账号</h1>
<p>接下来就去注册一个github账号,用来存放我们的网站。大多数小伙伴应该都有了吧,作为一个合格的程序猿(媛)还是要有一个的。</p>
<p>打开https://github.com/,新建一个项目,如下所示:<br>
<img src="https://imgconvert.csdnimg.cn/aHR0cHM6Ly9nb2R3ZWl5YW5nLmNvbS8yMDE4LzA0LzEzL2hleG8tYmxvZy8xLmpwZw"><br>
然后如下图所示,输入自己的项目名字,后面一定要加<code>.github.io</code>后缀,README初始化也要勾上。<br>
[外链图片转存失败(img-DSnBcIo4-1565585642417)(https://godweiyang.com/2018/04/13/hexo-blog/2.jpg)]<br>
然后项目就建成了,点击<code>Settings</code>,向下拉到最后有个<code>GitHub Pages</code>,点击<code>Choose a theme</code>选择一个主题。然后等一会儿,再回到<code>GitHub Pages</code>,会变成下面这样:<br>
[外链图片转存失败(img-TQcx50hU-1565585642417)(https://godweiyang.com/2018/04/13/hexo-blog/3.jpg)]<br>
点击那个链接,就会出现自己的网页啦,效果如下:<br>
<img src="https://imgconvert.csdnimg.cn/aHR0cHM6Ly9nb2R3ZWl5YW5nLmNvbS8yMDE4LzA0LzEzL2hleG8tYmxvZy80LmpwZw"></p>
<h1>安装Hexo</h1>
<p>在合适的地方新建一个文件夹,用来存放自己的博客文件,比如我的博客文件都存放在<code>D:\study\program\blog</code>目录下。</p>
<p>在该目录下右键点击<code>Git Bash Here</code>,打开git的控制台窗口,以后我们所有的操作都在git控制台进行,就不要用Windows自带的控制台了。</p>
<p>定位到该目录下,输入<code>npm i hexo-cli -g</code>安装Hexo。会有几个报错,无视它就行。</p>
<p>安装完后输入<code>hexo -v</code>验证是否安装成功。</p>
<p>然后就要初始化我们的网站,输入<code>hexo init</code>初始化文件夹,接着输入<code>npm install</code>安装必备的组件。</p>
<p>这样本地的网站配置也弄好啦,输入<code>hexo g</code>生成静态网页,然后输入<code>hexo s</code>打开本地服务器,然后浏览器打开http://localhost:4000/,就可以看到我们的博客啦,效果如下:<br>
[外链图片转存失败(img-YgBfTumW-1565585642418)(https://godweiyang.com/2018/04/13/hexo-blog/5.jpg)]</p>
<p>按<code>ctrl+c</code>关闭本地服务器。</p>
<h1>连接Github与本地</h1>
<p>首先右键打开git bash,然后输入下面命令:</p>
<pre><code>git config --global user.name "godweiyang"
git config --global user.email "792321264@qq.com"
</code></pre>
<p>用户名和邮箱根据你注册github的信息自行修改。</p>
<p>然后生成密钥SSH key:</p>
<pre><code>ssh-keygen -t rsa -C "792321264@qq.com"
</code></pre>
<p>打开github,在头像下面点击<code>settings</code>,再点击<code>SSH and GPG keys</code>,新建一个SSH,名字随便。</p>
<p>git bash中输入</p>
<pre><code class="prism language-bash"><span class="token function">cat</span> ~/.ssh/id_rsa.pub
</code></pre>
<p>将输出的内容复制到框中,点击确定保存。</p>
<p>输入<code>ssh -T git@github.com</code>,如果如下图所示,出现你的用户名,那就成功了。<br>
<img src="https://imgconvert.csdnimg.cn/aHR0cHM6Ly9nb2R3ZWl5YW5nLmNvbS8yMDE4LzA0LzEzL2hleG8tYmxvZy82LmpwZw"></p>
<p>打开博客根目录下的<code>_config.yml</code>文件,这是博客的配置文件,在这里你可以修改与博客相关的各种信息。</p>
<p>修改最后一行的配置:</p>
<pre><code>deploy:
type: git
repository: https://github.com/godweiyang/godweiyang.github.io
branch: master
</code></pre>
<p>repository修改为你自己的github项目地址。</p>
<h1>写文章、发布文章</h1>
<p>首先在博客根目录下右键打开git bash,安装一个扩展<code>npm i hexo-deployer-git</code>。</p>
<p>然后输入<code>hexo new post "article title"</code>,新建一篇文章。</p>
<p>然后打开<code>D:\study\program\blog\source\_posts</code>的目录,可以发现下面多了一个文件夹和一个<code>.md</code>文件,一个用来存放你的图片等数据,另一个就是你的文章文件啦。</p>
<p>编写完markdown文件后,根目录下输入<code>hexo g</code>生成静态网页,然后输入<code>hexo s</code>可以本地预览效果,最后输入<code>hexo d</code>上传到github上。这时打开你的github.io主页就能看到发布的文章啦。</p>
<h1>绑定域名</h1>
<p>现在默认的域名还是<code>xxx.github.io</code>,是不是很没有牌面?想不想也像我一样弄一个专属域名呢,首先你得购买一个域名,xx云都能买,看你个人喜好了。</p>
<p>以我的百度云为例,如下图所示,添加两条解析记录:<br>
[外链图片转存失败(img-A4hkb7XH-1565585642419)(https://godweiyang.com/2018/04/13/hexo-blog/7.jpg)]</p>
<p>然后打开你的github博客项目,点击<code>settings</code>,拉到下面<code>Custom domain</code>处,填上你自己的域名,保存:<br>
<img src="https://imgconvert.csdnimg.cn/aHR0cHM6Ly9nb2R3ZWl5YW5nLmNvbS8yMDE4LzA0LzEzL2hleG8tYmxvZy84LmpwZw"></p>
<p>这时候你的项目根目录应该会出现一个名为<code>CNAME</code>的文件了。如果没有的话,打开你本地博客<code>/source</code>目录,我的是<code>D:\study\program\blog\source</code>,新建<code>CNAME</code>文件,注意没有后缀。然后在里面写上你的域名,保存。最后运行<code>hexo g</code>、<code>hexo d</code>上传到github。</p>
<h1>备份博客源文件</h1>
<p>有时候我们想换一台电脑继续写博客,这时候就可以将博客目录下的所有源文件都上传到github上面。</p>
<p>首先在github博客仓库下新建一个分支<code>hexo</code>,然后<code>git clone</code>到本地,把<code>.git</code>文件夹拿出来,放在博客根目录下。</p>
<p>然后<code>git branch -b hexo</code>切换到<code>hexo</code>分支,然后<code>git add .</code>,然后<code>git commit -m "xxx"</code>,最后<code>git push origin hexo</code>提交就行了。</p>
<p>当然我新建了一个仓库存放了源文件,具体效果可以看我的博客源文件仓库:https://github.com/godweiyang/hexo-matery-modified。大家也可以先用下文hexo安装方法安装完hexo,然后直接<code>git clone git@github.com:godweiyang/hexo-matery-modified.git</code>克隆我的所有源文件,然后这是我修改完的基本没bug的定制化的博客,就可以直接拿来用啦。</p>
<p><strong>我这个源文件和原来的主题没有什么区别,只是我把插件都安装完了,有些小bug也修复了,所以拿来就能直接用,方便大家。</strong></p>
<h1>博客源代码下载</h1>
<p>如果大家不想这么麻烦的装一堆东西,然后还要自己修改bug,那么只需要做好上面的准备工作,然后下载我的源代码,改改个人配置就行了。</p>
<p>源码地址:https://github.com/godweiyang/hexo-matery-modified。大家可以直接下载下来使用,修改个人配置信息即可,当然环境要先搭好。</p>
<p><strong>如果大家下载好了源代码,就可以直接使用了,基本可以跳过文章后面的部分了!喜欢的记得star并fork哦!</strong></p>
<h1>个性化设置(matery主题)</h1>
<p>下面的个性化设置主要针对的是<code>matery</code>主题,如果你想用我现在博客这个主题,可以直接看这个章节。</p>
<h2>更换主题</h2>
<p>这两天花时间将我的博客换了一个主题,现在这个主题看着更加的炫(zhuang)酷(bi),并且响应式更友好,点起来就很舒服,功能也多很多。</p>
<p>主题的原地址在这里:hexo-theme-matery,它的文档写得也非常的详细,还有中英文两个版本,作者回复也很及时。效果图如下,可以看出非常合我的口味:<br>
[外链图片转存失败(img-Br2YtkhB-1565585642420)(https://godweiyang.com/2018/04/13/hexo-blog/21.jpg)]</p>
<p>但是我自己使用起来还是遇到了好几个问题,经过两天的不懈摸鱼,终于基本解决了,这里分享一下。</p>
<p>首先先按照文档教程安装一遍主题,然后是可以正常打开的,如果你是一般使用的话,基本没啥问题了。但是我是重度强迫症,一点小毛病就看着难受,下面列举一下我遇到的问题以及解决方法。</p>
<h2>新建文章</h2>
<p>首先为了新建文章方便,建议将<code>/scaffolds/post.md</code>修改为如下代码:</p>
<pre><code class="prism language-json"><span class="token operator">--</span><span class="token operator">-</span>
title<span class="token punctuation">:</span> <span class="token punctuation">{</span><span class="token punctuation">{</span> title <span class="token punctuation">}</span><span class="token punctuation">}</span>
date<span class="token punctuation">:</span> <span class="token punctuation">{</span><span class="token punctuation">{</span> date <span class="token punctuation">}</span><span class="token punctuation">}</span>
top<span class="token punctuation">:</span> <span class="token boolean">false</span>
cover<span class="token punctuation">:</span> <span class="token boolean">false</span>
password<span class="token punctuation">:</span>
toc<span class="token punctuation">:</span> <span class="token boolean">true</span>
mathjax<span class="token punctuation">:</span> <span class="token boolean">true</span>
summary<span class="token punctuation">:</span>
tags<span class="token punctuation">:</span>
categories<span class="token punctuation">:</span>
<span class="token operator">--</span><span class="token operator">-</span>
</code></pre>
<p>这样新建文章后不用你自己补充了,修改信息就行。</p>
<h2>添加404页面</h2>
<p>原来的主题没有404页面,加一个也不是什么难事。首先在<code>/source/</code>目录下新建一个<code>404.md</code>,内容如下:</p>
<pre><code class="prism language-json"><span class="token operator">--</span><span class="token operator">-</span>
title<span class="token punctuation">:</span> <span class="token number">404</span>
date<span class="token punctuation">:</span> <span class="token number">2019</span><span class="token operator">-</span><span class="token number">07</span><span class="token operator">-</span><span class="token number">19</span> <span class="token number">16</span><span class="token punctuation">:</span><span class="token number">41</span><span class="token punctuation">:</span><span class="token number">10</span>
type<span class="token punctuation">:</span> <span class="token string">"404"</span>
layout<span class="token punctuation">:</span> <span class="token string">"404"</span>
description<span class="token punctuation">:</span> <span class="token string">"你来到了没有知识的荒原 :("</span>
<span class="token operator">--</span><span class="token operator">-</span>
</code></pre>
<p>然后在<code>/themes/matery/layout/</code>目录下新建一个<code>404.ejs</code>文件,内容如下:</p>
<pre><code class="prism language-html"><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>style</span> <span class="token attr-name">type</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>text/css<span class="token punctuation">"</span></span><span class="token punctuation">></span></span><span class="token style language-css">
<span class="token comment">/* don't remove. */</span>
<span class="token selector">.about-cover</span> <span class="token punctuation">{</span>
<span class="token property">height</span><span class="token punctuation">:</span> 75vh<span class="token punctuation">;</span>
<span class="token punctuation">}</span>
</span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>style</span><span class="token punctuation">></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>div</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>bg-cover pd-header about-cover<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>div</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>container<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>div</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>row<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>div</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>col s10 offset-s1 m8 offset-m2 l8 offset-l2<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>div</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>brand<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>div</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>title center-align<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>
404
<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>div</span><span class="token punctuation">></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>div</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>description center-align<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>
<%= page.description %>
<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>div</span><span class="token punctuation">></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>div</span><span class="token punctuation">></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>div</span><span class="token punctuation">></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>div</span><span class="token punctuation">></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>div</span><span class="token punctuation">></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>div</span><span class="token punctuation">></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>script</span><span class="token punctuation">></span></span><span class="token script language-javascript">
<span class="token comment">// 每天切换 banner 图.Switch banner image every day.</span>
<span class="token function">$</span><span class="token punctuation">(</span><span class="token string">'.bg-cover'</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">css</span><span class="token punctuation">(</span><span class="token string">'background-image'</span><span class="token punctuation">,</span> <span class="token string">'url(/medias/banner/'</span> <span class="token operator">+</span> <span class="token keyword">new</span> <span class="token class-name">Date</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">getDay</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token string">'.jpg)'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
</span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>script</span><span class="token punctuation">></span></span>
</code></pre>
<h2>“关于”页面增加简历(可选)</h2>
<p>修改<code>/themes/matery/layout/about.ejs</code>,找到<code><div class="card"></code>标签,然后找到它对应的<code></div></code>标签,接在后面新增一个card,语句如下:</p>
<pre><code class="prism language-html"><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>div</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>card<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>div</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>card-content<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>div</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>card-content article-card-content<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>div</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>title center-align<span class="token punctuation">"</span></span> <span class="token attr-name">data-aos</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>zoom-in-up<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>i</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>fa fa-address-book<span class="token punctuation">"</span></span><span class="token punctuation">></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>i</span><span class="token punctuation">></span></span><span class="token entity" title=" ">&nbsp;</span><span class="token entity" title=" ">&nbsp;</span><%- __('myCV') %>
<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>div</span><span class="token punctuation">></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>div</span> <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>articleContent<span class="token punctuation">"</span></span> <span class="token attr-name">data-aos</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>fade-up<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>
<%- page.content %>
<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>div</span><span class="token punctuation">></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>div</span><span class="token punctuation">></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>div</span><span class="token punctuation">></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>div</span><span class="token punctuation">></span></span>
</code></pre>
<p>这样就会多出一张card,然后可以在<code>/source/about/index.md</code>下面写上你的简历了,当然这里的位置随你自己设置,你也可以把简历作为第一个card。</p>
<h2>解决mathjax与代码高亮的冲突</h2>
<p>如果你按照教程安装了代码高亮插件<code>hexo-prism-plugin</code>,单独使用是没有问题的,但如果你又使用了mathjax,并且按照网上教程,安装<code>kramed</code>插件并修改了js文件里的正则表达式(为了解决markdown和mathjax的语法冲突),好了,那你的代码就无法高亮了。解决方法很简单,别用<code>kramed</code>插件了,还用原来自带的<code>marked</code>插件,直接改它的正则表达式就行了,改法如下:</p>
<p>打开<code>D:\study\program\blog\node_modules\marked\lib\marked.js</code><br>
<code>escape:</code>处替换成:</p>
<pre><code>escape: /^\\([`*\[\]()#$+\-.!_>])/,
</code></pre>
<p><code>em:</code>处替换成:</p>
<pre><code>em: /^\*((?:\*\*|[\s\S])+?)\*(?!\*)/,
</code></pre>
<p>这时在文章里写数学公式基本没有问题了,但是要注意:<br>
<strong>数学公式中如果出现了连续两个{,中间一定要加空格!</strong></p>
<h2>增加建站时间</h2>
<p>修改<code>/themes/matery/layout/_partial/footer.ejs</code>文件,在最后加上</p>
<pre><code class="prism language-js"><span class="token operator"><</span>script language<span class="token operator">=</span>javascript<span class="token operator">></span>
<span class="token keyword">function</span> <span class="token function">siteTime</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
window<span class="token punctuation">.</span><span class="token function">setTimeout</span><span class="token punctuation">(</span><span class="token string">"siteTime()"</span><span class="token punctuation">,</span> <span class="token number">1000</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">var</span> seconds <span class="token operator">=</span> <span class="token number">1000</span><span class="token punctuation">;</span>
<span class="token keyword">var</span> minutes <span class="token operator">=</span> seconds <span class="token operator">*</span> <span class="token number">60</span><span class="token punctuation">;</span>
<span class="token keyword">var</span> hours <span class="token operator">=</span> minutes <span class="token operator">*</span> <span class="token number">60</span><span class="token punctuation">;</span>
<span class="token keyword">var</span> days <span class="token operator">=</span> hours <span class="token operator">*</span> <span class="token number">24</span><span class="token punctuation">;</span>
<span class="token keyword">var</span> years <span class="token operator">=</span> days <span class="token operator">*</span> <span class="token number">365</span><span class="token punctuation">;</span>
<span class="token keyword">var</span> today <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Date</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">var</span> todayYear <span class="token operator">=</span> today<span class="token punctuation">.</span><span class="token function">getFullYear</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">var</span> todayMonth <span class="token operator">=</span> today<span class="token punctuation">.</span><span class="token function">getMonth</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token number">1</span><span class="token punctuation">;</span>
<span class="token keyword">var</span> todayDate <span class="token operator">=</span> today<span class="token punctuation">.</span><span class="token function">getDate</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">var</span> todayHour <span class="token operator">=</span> today<span class="token punctuation">.</span><span class="token function">getHours</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">var</span> todayMinute <span class="token operator">=</span> today<span class="token punctuation">.</span><span class="token function">getMinutes</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">var</span> todaySecond <span class="token operator">=</span> today<span class="token punctuation">.</span><span class="token function">getSeconds</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">/* Date.UTC() -- 返回date对象距世界标准时间(UTC)1970年1月1日午夜之间的毫秒数(时间戳)
year - 作为date对象的年份,为4位年份值
month - 0-11之间的整数,做为date对象的月份
day - 1-31之间的整数,做为date对象的天数
hours - 0(午夜24点)-23之间的整数,做为date对象的小时数
minutes - 0-59之间的整数,做为date对象的分钟数
seconds - 0-59之间的整数,做为date对象的秒数
microseconds - 0-999之间的整数,做为date对象的毫秒数 */</span>
<span class="token keyword">var</span> t1 <span class="token operator">=</span> Date<span class="token punctuation">.</span><span class="token constant">UTC</span><span class="token punctuation">(</span><span class="token number">2017</span><span class="token punctuation">,</span> <span class="token number">09</span><span class="token punctuation">,</span> <span class="token number">11</span><span class="token punctuation">,</span> <span class="token number">00</span><span class="token punctuation">,</span> <span class="token number">00</span><span class="token punctuation">,</span> <span class="token number">00</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">//北京时间2018-2-13 00:00:00</span>
<span class="token keyword">var</span> t2 <span class="token operator">=</span> Date<span class="token punctuation">.</span><span class="token constant">UTC</span><span class="token punctuation">(</span>todayYear<span class="token punctuation">,</span> todayMonth<span class="token punctuation">,</span> todayDate<span class="token punctuation">,</span> todayHour<span class="token punctuation">,</span> todayMinute<span class="token punctuation">,</span> todaySecond<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">var</span> diff <span class="token operator">=</span> t2 <span class="token operator">-</span> t1<span class="token punctuation">;</span>
<span class="token keyword">var</span> diffYears <span class="token operator">=</span> Math<span class="token punctuation">.</span><span class="token function">floor</span><span class="token punctuation">(</span>diff <span class="token operator">/</span> years<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">var</span> diffDays <span class="token operator">=</span> Math<span class="token punctuation">.</span><span class="token function">floor</span><span class="token punctuation">(</span><span class="token punctuation">(</span>diff <span class="token operator">/</span> days<span class="token punctuation">)</span> <span class="token operator">-</span> diffYears <span class="token operator">*</span> <span class="token number">365</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">var</span> diffHours <span class="token operator">=</span> Math<span class="token punctuation">.</span><span class="token function">floor</span><span class="token punctuation">(</span><span class="token punctuation">(</span>diff <span class="token operator">-</span> <span class="token punctuation">(</span>diffYears <span class="token operator">*</span> <span class="token number">365</span> <span class="token operator">+</span> diffDays<span class="token punctuation">)</span> <span class="token operator">*</span> days<span class="token punctuation">)</span> <span class="token operator">/</span> hours<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">var</span> diffMinutes <span class="token operator">=</span> Math<span class="token punctuation">.</span><span class="token function">floor</span><span class="token punctuation">(</span><span class="token punctuation">(</span>diff <span class="token operator">-</span> <span class="token punctuation">(</span>diffYears <span class="token operator">*</span> <span class="token number">365</span> <span class="token operator">+</span> diffDays<span class="token punctuation">)</span> <span class="token operator">*</span> days <span class="token operator">-</span> diffHours <span class="token operator">*</span> hours<span class="token punctuation">)</span> <span class="token operator">/</span> minutes<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">var</span> diffSeconds <span class="token operator">=</span> Math<span class="token punctuation">.</span><span class="token function">floor</span><span class="token punctuation">(</span><span class="token punctuation">(</span>diff <span class="token operator">-</span> <span class="token punctuation">(</span>diffYears <span class="token operator">*</span> <span class="token number">365</span> <span class="token operator">+</span> diffDays<span class="token punctuation">)</span> <span class="token operator">*</span> days <span class="token operator">-</span> diffHours <span class="token operator">*</span> hours <span class="token operator">-</span> diffMinutes <span class="token operator">*</span> minutes<span class="token punctuation">)</span> <span class="token operator">/</span> seconds<span class="token punctuation">)</span><span class="token punctuation">;</span>
document<span class="token punctuation">.</span><span class="token function">getElementById</span><span class="token punctuation">(</span><span class="token string">"sitetime"</span><span class="token punctuation">)</span><span class="token punctuation">.</span>innerHTML <span class="token operator">=</span> <span class="token string">"本站已运行 "</span> <span class="token operator">+</span>diffYears<span class="token operator">+</span><span class="token string">" 年 "</span><span class="token operator">+</span>diffDays <span class="token operator">+</span> <span class="token string">" 天 "</span> <span class="token operator">+</span> diffHours <span class="token operator">+</span> <span class="token string">" 小时 "</span> <span class="token operator">+</span> diffMinutes <span class="token operator">+</span> <span class="token string">" 分钟 "</span> <span class="token operator">+</span> diffSeconds <span class="token operator">+</span> <span class="token string">" 秒"</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span><span class="token comment">/*因为建站时间还没有一年,就将之注释掉了。需要的可以取消*/</span>
<span class="token function">siteTime</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token operator"><</span><span class="token operator">/</span>script<span class="token operator">></span>
</code></pre>
<p>然后在合适的地方(比如copyright声明后面)加上下面的代码就行了:</p>
<pre><code class="prism language-html"><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>span</span> <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>sitetime<span class="token punctuation">"</span></span><span class="token punctuation">></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>span</span><span class="token punctuation">></span></span>
</code></pre>
<h2>修改不蒜子初始化计数</h2>
<p>因为不蒜子至今未开放注册,所以没办法在官网修改初始化,只能自己动手了。和上一条一样,在<code>/themes/matery/layout/_partial/footer.ejs</code>文件最后加上:</p>
<pre><code class="prism language-js"><span class="token operator"><</span>script<span class="token operator">></span>
<span class="token function">$</span><span class="token punctuation">(</span>document<span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">ready</span><span class="token punctuation">(</span><span class="token keyword">function</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token keyword">var</span> int <span class="token operator">=</span> <span class="token function">setInterval</span><span class="token punctuation">(</span>fixCount<span class="token punctuation">,</span> <span class="token number">50</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token comment">// 50ms周期检测函数</span>
<span class="token keyword">var</span> pvcountOffset <span class="token operator">=</span> <span class="token number">80000</span><span class="token punctuation">;</span><span class="token comment">// 初始化首次数据</span>
<span class="token keyword">var</span> uvcountOffset <span class="token operator">=</span> <span class="token number">20000</span><span class="token punctuation">;</span>
<span class="token keyword">function</span> <span class="token function">fixCount</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token keyword">if</span> <span class="token punctuation">(</span>document<span class="token punctuation">.</span><span class="token function">getElementById</span><span class="token punctuation">(</span><span class="token string">"busuanzi_container_site_pv"</span><span class="token punctuation">)</span><span class="token punctuation">.</span>style<span class="token punctuation">.</span>display <span class="token operator">!=</span> <span class="token string">"none"</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token function">$</span><span class="token punctuation">(</span><span class="token string">"#busuanzi_value_site_pv"</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">html</span><span class="token punctuation">(</span><span class="token function">parseInt</span><span class="token punctuation">(</span><span class="token function">$</span><span class="token punctuation">(</span><span class="token string">"#busuanzi_value_site_pv"</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">html</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token operator">+</span> pvcountOffset<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token function">clearInterval</span><span class="token punctuation">(</span>int<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token function">$</span><span class="token punctuation">(</span><span class="token string">"#busuanzi_container_site_pv"</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">css</span><span class="token punctuation">(</span><span class="token string">"display"</span><span class="token punctuation">)</span> <span class="token operator">!=</span> <span class="token string">"none"</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token function">$</span><span class="token punctuation">(</span><span class="token string">"#busuanzi_value_site_uv"</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">html</span><span class="token punctuation">(</span><span class="token function">parseInt</span><span class="token punctuation">(</span><span class="token function">$</span><span class="token punctuation">(</span><span class="token string">"#busuanzi_value_site_uv"</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">html</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token operator">+</span> uvcountOffset<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 加上初始数据 </span>
<span class="token function">clearInterval</span><span class="token punctuation">(</span>int<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 停止检测</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token operator"><</span><span class="token operator">/</span>script<span class="token operator">></span>
</code></pre>
<p>然后把上面几行有段代码:</p>
<pre><code class="prism language-html"><% if (theme.busuanziStatistics && theme.busuanziStatistics.totalTraffic) { %>
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>span</span> <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>busuanzi_container_site_pv<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>i</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>fa fa-heart-o<span class="token punctuation">"</span></span><span class="token punctuation">></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>i</span><span class="token punctuation">></span></span>
本站总访问量 <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>span</span> <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>busuanzi_value_site_pv<span class="token punctuation">"</span></span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>white-color<span class="token punctuation">"</span></span><span class="token punctuation">></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>span</span><span class="token punctuation">></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>span</span><span class="token punctuation">></span></span>
<% } %>
<% if (theme.busuanziStatistics && theme.busuanziStatistics.totalNumberOfvisitors) { %>
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>span</span> <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>busuanzi_container_site_uv<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>
人次,<span class="token entity" title=" ">&nbsp;</span>访客数 <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>span</span> <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>busuanzi_value_site_uv<span class="token punctuation">"</span></span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>white-color<span class="token punctuation">"</span></span><span class="token punctuation">></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>span</span><span class="token punctuation">></span></span> 人.
<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>span</span><span class="token punctuation">></span></span>
<% } %>
</code></pre>
<p>修改为:</p>
<pre><code class="prism language-html"><% if (theme.busuanziStatistics && theme.busuanziStatistics.totalTraffic) { %>
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>span</span> <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>busuanzi_container_site_pv<span class="token punctuation">"</span></span><span class="token style-attr language-css"><span class="token attr-name"> <span class="token attr-name">style</span></span><span class="token punctuation">='</span><span class="token attr-value"><span class="token property">display</span><span class="token punctuation">:</span>none</span><span class="token punctuation">'</span></span><span class="token punctuation">></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>i</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>fa fa-heart-o<span class="token punctuation">"</span></span><span class="token punctuation">></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>i</span><span class="token punctuation">></span></span>
本站总访问量 <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>span</span> <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>busuanzi_value_site_pv<span class="token punctuation">"</span></span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>white-color<span class="token punctuation">"</span></span><span class="token punctuation">></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>span</span><span class="token punctuation">></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>span</span><span class="token punctuation">></span></span>
<% } %>
<% if (theme.busuanziStatistics && theme.busuanziStatistics.totalNumberOfvisitors) { %>
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>span</span> <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>busuanzi_container_site_uv<span class="token punctuation">"</span></span><span class="token style-attr language-css"><span class="token attr-name"> <span class="token attr-name">style</span></span><span class="token punctuation">='</span><span class="token attr-value"><span class="token property">display</span><span class="token punctuation">:</span>none</span><span class="token punctuation">'</span></span><span class="token punctuation">></span></span>
人次,<span class="token entity" title=" ">&nbsp;</span>访客数 <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>span</span> <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>busuanzi_value_site_uv<span class="token punctuation">"</span></span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>white-color<span class="token punctuation">"</span></span><span class="token punctuation">></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>span</span><span class="token punctuation">></span></span> 人.
<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>span</span><span class="token punctuation">></span></span>
<% } %>
</code></pre>
<p>其实就是增加了两个<code>style='display:none'</code>而已。</p>
<h2>添加动漫人物</h2>
<p>其实三步就行了,不用像网上有些教程那么复杂。</p>
<p><strong>第一步:</strong></p>
<pre><code>npm install --save hexo-helper-live2d
</code></pre>
<p><strong>第二步:</strong></p>
<pre><code>npm install live2d-widget-model-shizuku
</code></pre>
<p><strong>第三步:</strong><br>
在根目录配置文件中添加如下代码:</p>
<pre><code>live2d:
enable: true
scriptFrom: local
pluginRootPath: live2dw/
pluginJsPath: lib/
pluginModelPath: assets/
tagMode: false
log: false
model:
use: live2d-widget-model-shizuku
display:
position: right
width: 150
height: 300
mobile:
show: true
react:
opacity: 0.7
</code></pre>
<p>然后<code>hexo g</code>再<code>hexo s</code>就能预览出效果了,但是有个注意的地方,我发现<strong>这个动漫人物最好不要和不蒜子同时使用</strong>,不然不蒜子会显示不出来。</p>
<h2>图片添加水印</h2>
<p>为了防止别人抄袭你文章,可以把所有的图片都加上水印,方法很简单。</p>
<p>首先在博客根目录下新建一个<code>watermark.py</code>,代码如下:</p>
<pre><code class="prism language-python"><span class="token comment"># -*- coding: utf-8 -*-</span>
<span class="token keyword">import</span> sys
<span class="token keyword">import</span> glob
<span class="token keyword">from</span> PIL <span class="token keyword">import</span> Image
<span class="token keyword">from</span> PIL <span class="token keyword">import</span> ImageDraw
<span class="token keyword">from</span> PIL <span class="token keyword">import</span> ImageFont
<span class="token keyword">def</span> <span class="token function">watermark</span><span class="token punctuation">(</span>post_name<span class="token punctuation">)</span><span class="token punctuation">:</span>
<span class="token keyword">if</span> post_name <span class="token operator">==</span> <span class="token string">'all'</span><span class="token punctuation">:</span>
post_name <span class="token operator">=</span> <span class="token string">'*'</span>
dir_name <span class="token operator">=</span> <span class="token string">'source/_posts/'</span> <span class="token operator">+</span> post_name <span class="token operator">+</span> <span class="token string">'/*'</span>
<span class="token keyword">for</span> files <span class="token keyword">in</span> glob<span class="token punctuation">.</span>glob<span class="token punctuation">(</span>dir_name<span class="token punctuation">)</span><span class="token punctuation">:</span>
im <span class="token operator">=</span> Image<span class="token punctuation">.</span><span class="token builtin">open</span><span class="token punctuation">(</span>files<span class="token punctuation">)</span>
<span class="token keyword">if</span> <span class="token builtin">len</span><span class="token punctuation">(</span>im<span class="token punctuation">.</span>getbands<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token operator"><</span> <span class="token number">3</span><span class="token punctuation">:</span>
im <span class="token operator">=</span> im<span class="token punctuation">.</span>convert<span class="token punctuation">(</span><span class="token string">'RGB'</span><span class="token punctuation">)</span>
<span class="token keyword">print</span><span class="token punctuation">(</span>files<span class="token punctuation">)</span>
font <span class="token operator">=</span> ImageFont<span class="token punctuation">.</span>truetype<span class="token punctuation">(</span><span class="token string">'STSONG.TTF'</span><span class="token punctuation">,</span> <span class="token builtin">max</span><span class="token punctuation">(</span><span class="token number">30</span><span class="token punctuation">,</span> <span class="token builtin">int</span><span class="token punctuation">(</span>im<span class="token punctuation">.</span>size<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span> <span class="token operator">/</span> <span class="token number">20</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span>
draw <span class="token operator">=</span> ImageDraw<span class="token punctuation">.</span>Draw<span class="token punctuation">(</span>im<span class="token punctuation">)</span>
draw<span class="token punctuation">.</span>text<span class="token punctuation">(</span><span class="token punctuation">(</span>im<span class="token punctuation">.</span>size<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span> <span class="token operator">/</span> <span class="token number">2</span><span class="token punctuation">,</span> im<span class="token punctuation">.</span>size<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span> <span class="token operator">/</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">,</span>
u<span class="token string">'@yourname'</span><span class="token punctuation">,</span> fill<span class="token operator">=</span><span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">,</span> font<span class="token operator">=</span>font<span class="token punctuation">)</span>
im<span class="token punctuation">.</span>save<span class="token punctuation">(</span>files<span class="token punctuation">)</span>
<span class="token keyword">if</span> __name__ <span class="token operator">==</span> <span class="token string">'__main__'</span><span class="token punctuation">:</span>
<span class="token keyword">if</span> <span class="token builtin">len</span><span class="token punctuation">(</span>sys<span class="token punctuation">.</span>argv<span class="token punctuation">)</span> <span class="token operator">==</span> <span class="token number">2</span><span class="token punctuation">:</span>
watermark<span class="token punctuation">(</span>sys<span class="token punctuation">.</span>argv<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">)</span>
<span class="token keyword">else</span><span class="token punctuation">:</span>
<span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">' <input>'</span><span class="token punctuation">)</span>
</code></pre>
<p>字体也放根目录下,自己找字体。然后每次写完一篇文章可以运行<code>python3 watermark.py postname</code>添加水印,如果第一次运行要给所有文章添加水印,可以运行<code>python3 watermark.py all</code>。</p>
<h2>添加网易云音乐BGM</h2>
<p>写文章的时候,想插入一段BGM怎么办?</p>
<p>首先打开网易云网页版,找到想听的歌曲,然后点击生成外链:<br>
[外链图片转存失败(img-4dmaww1R-1565585642421)(https://godweiyang.com/2018/04/13/hexo-blog/15.jpg)]<br>
复制如下代码:<br>
<img src="https://imgconvert.csdnimg.cn/aHR0cHM6Ly9nb2R3ZWl5YW5nLmNvbS8yMDE4LzA0LzEzL2hleG8tYmxvZy8xNi5qcGc"></p>
<p>粘贴到文章里就行了,为了美观,设置一下居中,具体代码如下:</p>
<pre><code><div align="middle">这里粘贴刚刚复制的代码</div>
</code></pre>
<h1>个性化设置(beantech主题,已停更)</h1>
<p><strong>下面的个性化设置主要针对的是我之前使用的<code>beantech</code>主题,当然如果你想用我现在博客这个主题,可以不看这部分。这部分已经停止更新,今后我只会更新<code>matery</code>主题的各种配置。</strong></p>
<h2>更换主题</h2>
<p>网上大多数主题都是github排名第一的<code>Next</code>主题,但是我个人不是很喜欢,我更喜欢<code>beantech</code>主题,地址在传送门。</p>
<p>首先要注意的是,<strong>这个github项目不仅包含了主题文件,还包含了hexo的各种文件</strong>。</p>
<p>所以首先下载下来这个项目,然后推荐将下图所有文件全部替换你原本博客根目录下的文件:<br>
<img src="https://imgconvert.csdnimg.cn/aHR0cHM6Ly9nb2R3ZWl5YW5nLmNvbS8yMDE4LzA0LzEzL2hleG8tYmxvZy85LmpwZw"></p>
<p>当然一般的主题和这个主题有点不一样,只含有主题文件夹,所以把整个文件夹丢到<code>theme</code>下就行了。</p>
<p>然后运行<code>hexo clean</code>清空所有生成的网页缓存,<code>hexo g</code>、<code>hexo d</code>。这时候新的主题网页就生成好了,博客根目录的情况应该大致如下:<br>
<img src="https://imgconvert.csdnimg.cn/aHR0cHM6Ly9nb2R3ZWl5YW5nLmNvbS8yMDE4LzA0LzEzL2hleG8tYmxvZy8xMC5qcGc"></p>
<h2>博客目录构成介绍</h2>
<p>从上图可以看出,博客的目录结构如下:</p>
<pre><code>- node_modules
- public
- scaffolds
- source
- _posts
- about
- archive
- img
- tags
- themes
</code></pre>
<p><code>node_modules</code>是node.js各种库的目录,<code>public</code>是生成的网页文件目录,<code>scaffolds</code>里面就三个文件,存储着新文章和新页面的初始设置,<code>source</code>是我们最常用到的一个目录,里面存放着文章、各类页面、图像等文件,<code>themes</code>存放着主题文件,一般也用不到。</p>
<p>我们平时写文章只需要关注<code>source/_posts</code>这个文件夹就行了。</p>
<p>网站图片都保存在<code>D:\study\program\blog\source\img</code>目录下,可以修改成自己的图片。</p>
<h2>修复文档分类bug</h2>
<p>这个主题文档分类功能有个bug,一直没有得到解决,直到最近,我才发现是源文件的单词拼错了。。。</p>
<p>打开<code>D:\study\program\blog\scaffolds\post.md</code>,单词<code>catagories</code>改为<code>categories</code>。</p>
<h2>添加畅言评论插件</h2>
<p>主题自带了多说评论插件,但是多说已经关闭了,所以我换成了畅言评论插件。</p>
<p>首先你得注册一个畅言账号,地址。<br>
然后打开如下页面,复制该段代码:<br>
<img src="https://imgconvert.csdnimg.cn/aHR0cHM6Ly9nb2R3ZWl5YW5nLmNvbS8yMDE4LzA0LzEzL2hleG8tYmxvZy8xMS5qcGc"><br>
打开<code>D:\study\program\blog\themes\beantech\layout\post.ejs</code>,将代码粘贴到如下位置:<br>
[外链图片转存失败(img-wy6fBoSw-1565585642423)(https://godweiyang.com/2018/04/13/hexo-blog/12.jpg)]<br>
然后重新生成一下网页,可以看到效果图如下:<br>
<img src="https://imgconvert.csdnimg.cn/aHR0cHM6Ly9nb2R3ZWl5YW5nLmNvbS8yMDE4LzA0LzEzL2hleG8tYmxvZy8xMy5qcGc"><br>
更多插件例如热评话题之类的,可以自行在畅言后台找到代码添加。</p>
<h2>添加图片放大功能</h2>
<p>首先下载<code>zooming.js</code>文件地址,保存在<code>D:\study\program\blog\themes\beantech\source\js</code>目录下。</p>
<p>打开<code>D:\study\program\blog\themes\beantech\layout\post.ejs</code>,在最下方粘贴如下代码:</p>
<pre><code><script type="text/javascript" src="/js/zooming.js"></script>
</code></pre>
<p>然后文章里的图片就可以单击全屏啦。</p>
<h2>添加数学公式显示</h2>
<p>打开<code>D:\study\program\blog\themes\beantech\layout\post.ejs</code>,在最下方粘贴如下代码:</p>
<pre><code><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=default"></script>
</code></pre>
<p>由于markdown语法与mathjax语法存在冲突,所以还需要修改源文件。</p>
<p>打开<code>D:\study\program\blog\node_modules\marked\lib\marked.js</code><br>
<code>escape:</code>处替换成:</p>
<pre><code>escape: /^$[`*\[\]()#$+\-.!_>])/
</code></pre>
<p><code>em:</code>处替换成:</p>
<pre><code>em: /^\*((?:\*\*|[\s\S])+?)\*(?!\*)/
</code></pre>
<p>这时在文章里写数学公式基本没有问题了,但是要注意:<br>
<strong>数学公式中如果出现了连续两个{,中间一定要加空格!</strong></p>
<p>举个例子:<br>
行内公式:<span class="katex--inline"><span class="katex"><span class="katex-mathml"><math><semantics><mrow><mi>y</mi><mo>=</mo><mi>f</mi><mo stretchy="false">(</mo><mi>x</mi><mo stretchy="false">)</mo></mrow>y = f(x)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height: 0.625em; vertical-align: -0.19444em"></span><span class="mord mathdefault" style="margin-right: 0.03588em">y</span><span class="mspace" style="margin-right: 0.277778em"></span><span class="mrel">=</span><span class="mspace" style="margin-right: 0.277778em"></span></span><span class="base"><span class="strut" style="height: 1em; vertical-align: -0.25em"></span><span class="mord mathdefault" style="margin-right: 0.10764em">f</span><span class="mopen">(</span><span class="mord mathdefault">x</span><span class="mclose">)</span></span></span></span></span><br>
代码:</p>
<pre><code>$y = f(x)$
</code></pre>
<p>行间公式:<br>
<span class="katex--display"><span class="katex-display"><span class="katex"><span class="katex-mathml"><math><semantics><mrow><mi>y</mi><mo>=</mo><msub><mi>f</mi><msub><mi>g</mi><mn>1</mn></msub></msub><mo stretchy="false">(</mo><mi>x</mi><mo stretchy="false">)</mo></mrow>y = {f_{ {g_1}}}(x)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height: 0.625em; vertical-align: -0.19444em"></span><span class="mord mathdefault" style="margin-right: 0.03588em">y</span><span class="mspace" style="margin-right: 0.277778em"></span><span class="mrel">=</span><span class="mspace" style="margin-right: 0.277778em"></span></span><span class="base"><span class="strut" style="height: 1.03611em; vertical-align: -0.286108em"></span><span class="mord"><span class="mord"><span class="mord mathdefault" style="margin-right: 0.10764em">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.151392em"><span class="" style="top: -2.55em; margin-left: -0.10764em; margin-right: 0.05em"><span class="pstrut" style="height: 2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathdefault mtight" style="margin-right: 0.03588em">g</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.317314em"><span class="" style="top: -2.357em; margin-left: -0.03588em; margin-right: 0.0714286em"><span class="pstrut" style="height: 2.5em"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height: 0.143em"><span class=""></span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height: 0.286108em"><span class=""></span></span></span></span></span></span></span><span class="mopen">(</span><span class="mord mathdefault">x</span><span class="mclose">)</span></span></span></span></span></span><br>
代码:</p>
<pre><code>\\
</code></pre>
<p><strong>注意上面花括号之间有空格!</strong></p>
<h2>添加留言板</h2>
<p>在<code>D:\study\program\blog\themes\beantech\layout</code>中新建<code>bbs.ejs</code>,文件内容如下:</p>
<pre><code>---
layout: page
---
<style type="text/css">
header.intro-header{
background-position: right;
}
</style>
<!-- Chinese Version -->
<div class="zh post-container">
<%- page.content %>
</div>
</code></pre>
<p>然后在<code>D:\study\program\blog\source</code>中新建<code>\bbs</code>文件夹,里面在新建<code>index.md</code>文件,内容如下:</p>
<pre><code>---
layout: "bbs"
title: "BBS"
date: 2017-09-19 12:48:33
description: "欢迎交换友链,一起交流学习!"
header-img: "img/header_img/home-bg-2-dark.png"
comments: true
---
此处替换为你的畅言评论代码~~~
</code></pre>
<h2>添加置顶功能</h2>
<p>运行如下两条命令安装置顶插件:</p>
<pre><code>npm uninstall hexo-generator-index --save
npm install hexo-generator-index-pin-top --save
</code></pre>
<p>然后打开<code>D:\study\program\blog\themes\beantech\layout\index.ejs</code>,在如下位置添加代码:<br>
[外链图片转存失败(img-8S7TklFa-1565585642424)(https://godweiyang.com/2018/04/13/hexo-blog/14.jpg)]</p>
<pre><code><% if (post.top) {%>
<i class="fa fa-thumb-tack"></i>
<font color=7D26CD>置顶</font>
<span class="post-meta-divider">|</span>
<%}%>
</code></pre>
<p>然后在你想置顶的文章md文件里,添加如下配置选项:</p>
<pre><code>top: true
</code></pre>
<h2>添加访客人数统计和字数统计</h2>
<p>我们使用一个国外的流量统计网站:gostats.com,首先注册一下。</p>
<p>然后自己添加网站地址,过程就不详细说了,然后点击<code>Get counter code</code>,选择一个自己喜欢的风格。<br>
如下图所示,选择一个样式,选择<code>HTML</code>,生成代码:<br>
<img src="https://imgconvert.csdnimg.cn/aHR0cHM6Ly9nb2R3ZWl5YW5nLmNvbS8yMDE4LzA0LzEzL2hleG8tYmxvZy8xNy5qcGc"></p>
<p>复制这段代码到<code>D:\study\program\blog\themes\beantech\layout\_partial\footer.ejs</code>,具体位置如下:<br>
[外链图片转存失败(img-htQCgGTV-1565585642424)(https://godweiyang.com/2018/04/13/hexo-blog/18.jpg)]<br>
默认的代码和我图中不一样,因为我不想点击图片跳转到它统计网站的链接,可以模仿我的自行修改。</p>
<p>字数统计首先安装插件</p>
<pre><code>npm i --save hexo-wordcount
</code></pre>
<p>然后打开<code>D:\study\program\blog\themes\beantech\layout\_partial\footer.ejs</code>,添加如下代码:</p>
<pre><code><span class="post-count"><%= totalcount(site) %> words altogether</span>
</code></pre>
<p>具体位置见上图。</p>
<h2>文章属性配置</h2>
<p>首先解释一下文章开头的属性配置,如下图所示:<br>
[外链图片转存失败(img-cCBn8XVq-1565585642425)(https://godweiyang.com/2018/04/13/hexo-blog/19.jpg)]</p>
<pre><code>title: 文章标题
catalog: 是否显示段落目录
date: 文章日期
subtitle: 子标题
header-img: 顶部背景图片
top: 是否置顶
tags: 标签
categories: 分类
</code></pre>
<p>每次写文章修改每个值就行了。</p><br><br>
来源:https://www.cnblogs.com/godweiyang/p/12203875.html
頁:
[1]