泰福 發表於 2020-1-17 01:03:00

超详细Hexo+Github博客搭建小白教程

<div class="RichText ztext Post-RichText">
    <p></p>
    <p style="text-align: center">
      </p>
      <img class="origin_image zh-lightbox-thumb lazyload" width="720" alt="v2-3816395f6ef20c3946934f89c118c421_b.jpg" data-src="https://ss.csdn.net/p?https://pic2.zhimg.com/v2-3816395f6ef20c3946934f89c118c421_b.jpg">
   
    <h2>
      <b>原文链接:</b>
    </h2>
    超详细Hexo+Github博客搭建小白教程 | 韦阳的博客
    <blockquote>知乎更新可能慢一点,想要获取最新更新,请移步原文。<br>有任何问题请联系我扣扣:792321264,vx:weiyang792321264,24小时随时在线哦~~<br>如果觉得有用的话可以看心情打赏一杯奶茶,我会很开心哒。</blockquote>
    <h2>我的博客源代码地址</h2>
    <p>大家可以直接素质二连,star&amp;fork我的博客源代码:</p>
    godweiyang/hexo-matery-modified
    <p>然后改改配置就可以写文章啦。</p>
    <h2>前言</h2>
    <p>17年9月的时候开始搭建了第一个自己的独立博客,到现在也稍微像模像样了。很多小伙伴应该也想过搭建一个自己的博客,网上也有一堆详细教程。我在此稍稍总结一下具体的搭建步骤,另外网上很少有修改博客源码的个性化教程,我就稍稍分享一下我的一些修改经验,更多的个性化操作需要你自己以后去摸索。</p>
    <p>具体效果可以参观我的博客:</p>
    韦阳的博客
    <p>欢迎大家支持。</p>
    <p>我不是一个前端程序员,有些东西不是很了解,写的有问题或有改进的地方请大家指出。</p>
    <p>首先要了解一下我们搭建博客要用到的框架。Hexo是高效的静态站点生成框架,它基于Node.js。通过Hexo,你可以直接使用Markdown语法来撰写博客。相信很多小伙伴写工程都写过README.md文件吧,对,就是这个格式的!写完后只需两三条命令即可将生成的网页上传到你的github上,然后别人就可以看到你的网页啦。是不是很简单?你无需关心网页源代码的具体细节,你只需要用心写好你的博客内容就行。</p>
    <p>
      <b>目录结构</b>
    </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>备份博客源文件</li>
      <li>博客源代码下载</li>
      <li>个性化设置(matery主题)</li>
      <li>常见问题及解答(FAQ)</li>
      <li>个性化设置(beantech主题,已停更)</li>
    </ul><h2>安装Node.js</h2>
    <p>首先下载稳定版</p>
    Node.js
    <p>我这里给的是64位的。</p>
    <p>安装选项全部默认,一路点击<code>Next</code>。</p>
    <p>最后安装好之后,按<code>Win+R</code>打开命令提示符,输入<code>node -v</code>和<code>npm -v</code>,如果出现版本号,那么就安装成功了。</p>
    <h2>添加国内镜像源</h2>
    <p>如果没有梯子的话,可以使用阿里的国内镜像进行加速。</p>
    <div class="has">
      <pre>      <code class="language-bash">npm config <span class="nb">set</span> registry https://registry.npm.taobao.org</code>
      </pre>
    </div>
    <h2>安装Git</h2>
    <p>为了把本地的网页文件上传到github上面去,我们需要用到分布式版本控制工具————Git</p>
    Git - Downloading Package
    <p>安装选项还是全部默认,只不过最后一步添加路径时选择<code>Use Git from the Windows Command Prompt</code>,这样我们就可以直接在命令提示符里打开git了。</p>
    <p>安装完成后在命令提示符中输入<code>git --version</code>验证是否安装成功。</p>
    <h2>注册Github账号</h2>
    <p>接下来就去注册一个github账号,用来存放我们的网站。大多数小伙伴应该都有了吧,作为一个合格的程序猿(媛)还是要有一个的。</p>
    <p>打开</p>
    Build software better, together
    <p>新建一个项目,如下所示: </p>
    <p style="text-align: center">
      </p>
      <img class="origin_image zh-lightbox-thumb lazyload" width="634" alt="v2-4270b2eec17601922d98aa03ea2c79cc_b.jpg" data-src="https://ss.csdn.net/p?https://pic1.zhimg.com/v2-4270b2eec17601922d98aa03ea2c79cc_b.jpg">
   
    <p> 然后如下图所示,输入自己的项目名字,后面一定要加<code>.github.io</code>后缀,README初始化也要勾上。 </p>
    <p style="text-align: center">
      </p>
      <img class="origin_image zh-lightbox-thumb lazyload" width="727" alt="v2-d2b3b1ca2bd72e9f221c33c3890e6c32_b.jpg" data-src="https://ss.csdn.net/p?https://pic3.zhimg.com/v2-d2b3b1ca2bd72e9f221c33c3890e6c32_b.jpg">
   
    <p> 然后项目就建成了,点击<code>Settings</code>,向下拉到最后有个<code>GitHub Pages</code>,点击<code>Choose a theme</code>选择一个主题。然后等一会儿,再回到<code>GitHub Pages</code>,会变成下面这样: </p>
    <p style="text-align: center">
      </p>
      <img class="content_image lazyload" width="394" alt="v2-281f7ca404cbb2b769f09c34794ac5b6_b.jpg" data-src="https://ss.csdn.net/p?https://pic3.zhimg.com/v2-281f7ca404cbb2b769f09c34794ac5b6_b.jpg">
   
    <p> 点击那个链接,就会出现自己的网页啦,效果如下: </p>
    <p style="text-align: center">
      </p>
      <img class="origin_image zh-lightbox-thumb lazyload" width="1101" alt="v2-3a0e46d3a6fa7e5ac9f585158cb76a88_b.jpg" data-src="https://ss.csdn.net/p?https://pic1.zhimg.com/v2-3a0e46d3a6fa7e5ac9f585158cb76a88_b.jpg">
   
    <p class="ztext-empty-paragraph">
      <br></p>
    <h2>安装Hexo</h2>
    <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>打开本地服务器,然后浏览器打开<span class="invisible">http://</span><span class="visible">localhost:4000/</span><span class="invisible"></span>,就可以看到我们的博客啦,效果如下: </p>
    <p style="text-align: center">
      </p>
      <img class="origin_image zh-lightbox-thumb lazyload" width="1200" alt="v2-7461124ec772f6fe453d07554cb11363_b.jpg" data-src="https://ss.csdn.net/p?https://pic4.zhimg.com/v2-7461124ec772f6fe453d07554cb11363_b.jpg">
   
    <p class="ztext-empty-paragraph">
      <br></p>
    <p>按<code>ctrl+c</code>关闭本地服务器。</p>
    <h2>连接Github与本地</h2>
    <p>首先右键打开git bash,然后输入下面命令:</p>
    <div class="has">
      <pre>      <code class="language-bash">git config --global user.name <span class="s2">"godweiyang"</span>
git config --global user.email <span class="s2">"792321264@qq.com"</span></code>
      </pre>
    </div>
    <p>用户名和邮箱根据你注册github的信息自行修改。</p>
    <p>然后生成密钥SSH key:</p>
    <div class="has">
      <pre>      <code class="language-bash">ssh-keygen -t rsa -C <span class="s2">"792321264@qq.com"</span></code>
      </pre>
    </div>
    <p>打开github,在头像下面点击<code>settings</code>,再点击<code>SSH and GPG keys</code>,新建一个SSH,名字随便。</p>
    <p>git bash中输入</p>
    <div class="has">
      <pre>      <code class="language-bash">cat ~/.ssh/id_rsa.pub</code>
      </pre>
    </div>
    <p>将输出的内容复制到框中,点击确定保存。</p>
    <p>输入<code>ssh -T git@github.com</code>,如果如下图所示,出现你的用户名,那就成功了。 </p>
    <p style="text-align: center">
      </p>
      <img class="origin_image zh-lightbox-thumb lazyload" width="645" alt="v2-d2681a4830e54238450b6dc2a57d0c55_b.jpg" data-src="https://ss.csdn.net/p?https://pic2.zhimg.com/v2-d2681a4830e54238450b6dc2a57d0c55_b.jpg">
   
    <p class="ztext-empty-paragraph">
      <br></p>
    <p>打开博客根目录下的<code>_config.yml</code>文件,这是博客的配置文件,在这里你可以修改与博客相关的各种信息。</p>
    <p>修改最后一行的配置:</p>
    <div class="has">
      <pre>      <code class="language-bash">deploy:
type: git
repository: https://github.com/godweiyang/godweiyang.github.io
branch: master</code>
      </pre>
    </div>
    <p>repository修改为你自己的github项目地址。</p>
    <h2>写文章、发布文章</h2>
    <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>
    <h2>绑定域名</h2>
    <p>现在默认的域名还是<code>xxx.github.io</code>,是不是很没有牌面?想不想也像我一样弄一个专属域名呢,首先你得购买一个域名,xx云都能买,看你个人喜好了。</p>
    <p>以我的百度云为例,如下图所示,添加两条解析记录: </p>
    <p style="text-align: center">
      </p>
      <img class="origin_image zh-lightbox-thumb lazyload" width="1200" alt="v2-e11377329d5cef129c0aefd10eaa1607_b.jpg" data-src="https://ss.csdn.net/p?https://pic4.zhimg.com/v2-e11377329d5cef129c0aefd10eaa1607_b.jpg">
   
    <p class="ztext-empty-paragraph">
      <br></p>
    <p>然后打开你的github博客项目,点击<code>settings</code>,拉到下面<code>Custom domain</code>处,填上你自己的域名,保存: </p>
    <p style="text-align: center">
      </p>
      <img class="content_image lazyload" width="355" alt="v2-8125794bbf0055917b820178489c7b0f_b.jpg" data-src="https://ss.csdn.net/p?https://pic4.zhimg.com/v2-8125794bbf0055917b820178489c7b0f_b.jpg">
   
    <p class="ztext-empty-paragraph">
      <br></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>
    <h2>备份博客源文件</h2>
    <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>当然我新建了一个仓库存放了源文件,具体效果可以看我的博客源文件仓库:</p>
    godweiyang/hexo-matery-modified
    <p>大家也可以先用下文hexo安装方法安装完hexo,然后直接<code>git clone git@github.com:godweiyang/hexo-matery-modified.git</code>克隆我的所有源文件,然后这是我修改完的基本没bug的定制化的博客,就可以直接拿来用啦。</p>
    <p>
      <b>我这个源文件和原来的主题没有什么区别,只是我把插件都安装完了,有些小bug也修复了,所以拿来就能直接用,方便大家。</b>
    </p>
    <h2>博客源代码下载</h2>
    <p>如果大家不想这么麻烦的装一堆东西,然后还要自己修改bug,那么只需要做好上面的准备工作,然后下载我的源代码,改改个人配置就行了。</p>
    <p>源码地址:</p>
    godweiyang/hexo-matery-modified
    <p>大家可以直接下载下来使用,修改个人配置信息即可,当然环境要先搭好。</p>
    <p>
      <b>如果大家下载好了源代码,就可以直接使用了,基本可以跳过文章后面的部分了!喜欢的记得star并fork哦!</b>
    </p>
    <h2>个性化设置(matery主题)</h2>
    <p>下面的个性化设置主要针对的是<code>matery</code>主题,如果你想用我现在博客这个主题,可以直接看这个章节。</p>
    <p>
      <b>更换主题</b>
    </p>
    <p>这两天花时间将我的博客换了一个主题,现在这个主题看着更加的炫(zhuang)酷(bi),并且响应式更友好,点起来就很舒服,功能也多很多。</p>
    <p>主题的原地址在这里:</p>
    blinkfox/hexo-theme-matery
    <p>它的文档写得也非常的详细,还有中英文两个版本,作者回复也很及时。效果图如下,可以看出非常合我的口味: </p>
    <p style="text-align: center">
      </p>
      <img class="origin_image zh-lightbox-thumb lazyload" width="1200" alt="v2-c7ab14f63f28aecc620fd51d5efdaafa_b.jpg" data-src="https://ss.csdn.net/p?https://pic3.zhimg.com/v2-c7ab14f63f28aecc620fd51d5efdaafa_b.jpg">
   
    <p class="ztext-empty-paragraph">
      <br></p>
    <p>但是我自己使用起来还是遇到了好几个问题,经过两天的不懈摸鱼,终于基本解决了,这里分享一下。</p>
    <p>首先先按照文档教程安装一遍主题,然后是可以正常打开的,如果你是一般使用的话,基本没啥问题了。但是我是重度强迫症,一点小毛病就看着难受,下面列举一下我遇到的问题以及解决方法。</p>
    <p>
      <b>文章头设置</b>
    </p>
    <p>首先为了新建文章方便,建议将<code>/scaffolds/post.md</code>修改为如下代码:</p>
    <div class="has">
      <pre>      <code class="language-json"><span class="err">---</span>
<span class="err">title:</span> <span class="p">{</span><span class="err">{</span> <span class="err">title</span> <span class="p">}</span><span class="err">}</span>
<span class="err">date:</span> <span class="p">{</span><span class="err">{</span> <span class="err">date</span> <span class="p">}</span><span class="err">}</span>
<span class="err">top:</span> <span class="kc">false</span>
<span class="err">cover:</span> <span class="kc">false</span>
<span class="err">password:</span>
<span class="err">toc:</span> <span class="kc">true</span>
<span class="err">mathjax:</span> <span class="kc">true</span>
<span class="err">summary:</span>
<span class="err">tags:</span>
<span class="err">categories:</span>
<span class="err">---</span></code>
      </pre>
    </div>
    <p>这样新建文章后不用你自己补充了,修改信息就行。</p>
    <p>
      <b>添加404页面</b>
    </p>
    <p>原来的主题没有404页面,加一个也不是什么难事。首先在<code>/source/</code>目录下新建一个<code>404.md</code>,内容如下:</p>
    <div class="has">
      <pre>      <code class="language-json"><span class="err">---</span>
<span class="err">title:</span> <span class="mi">404</span>
<span class="err">date:</span> <span class="mi">2019-07-19</span> <span class="mi">16</span><span class="err">:</span><span class="mi">41</span><span class="err">:</span><span class="mi">10</span>
<span class="err">type:</span> <span class="s2">"404"</span>
<span class="err">layout:</span> <span class="s2">"404"</span>
<span class="err">description:</span> <span class="s2">"你来到了没有知识的荒原 :("</span>
<span class="err">---</span></code>
      </pre>
    </div>
    <p>然后在<code>/themes/matery/layout/</code>目录下新建一个<code>404.ejs</code>文件,内容如下:</p>
    <div class="has">
      <pre>      <code class="language-html"><span class="p">&lt;</span><span class="nt">style</span> <span class="na">type</span><span class="o">=</span><span class="s">"text/css"</span><span class="p">&gt;</span>
    <span class="c">/* don't remove. */</span>
    <span class="p">.</span><span class="nc">about-cover</span> <span class="p">{</span>
      <span class="k">height</span><span class="p">:</span> <span class="mi">75</span><span class="kt">vh</span><span class="p">;</span>
    <span class="p">}</span>
<span class="p">&lt;/</span><span class="nt">style</span><span class="p">&gt;</span>

<span class="p">&lt;</span><span class="nt">div</span> <span class="na">class</span><span class="o">=</span><span class="s">"bg-cover pd-header about-cover"</span><span class="p">&gt;</span>
    <span class="p">&lt;</span><span class="nt">div</span> <span class="na">class</span><span class="o">=</span><span class="s">"container"</span><span class="p">&gt;</span>
      <span class="p">&lt;</span><span class="nt">div</span> <span class="na">class</span><span class="o">=</span><span class="s">"row"</span><span class="p">&gt;</span>
            <span class="p">&lt;</span><span class="nt">div</span> <span class="na">class</span><span class="o">=</span><span class="s">"col s10 offset-s1 m8 offset-m2 l8 offset-l2"</span><span class="p">&gt;</span>
                <span class="p">&lt;</span><span class="nt">div</span> <span class="na">class</span><span class="o">=</span><span class="s">"brand"</span><span class="p">&gt;</span>
                  <span class="p">&lt;</span><span class="nt">div</span> <span class="na">class</span><span class="o">=</span><span class="s">"title center-align"</span><span class="p">&gt;</span>
                        404
                  <span class="p">&lt;/</span><span class="nt">div</span><span class="p">&gt;</span>
                  <span class="p">&lt;</span><span class="nt">div</span> <span class="na">class</span><span class="o">=</span><span class="s">"description center-align"</span><span class="p">&gt;</span>
                        <span class="err">&lt;</span>%= page.description %&gt;
                  <span class="p">&lt;/</span><span class="nt">div</span><span class="p">&gt;</span>
                <span class="p">&lt;/</span><span class="nt">div</span><span class="p">&gt;</span>
            <span class="p">&lt;/</span><span class="nt">div</span><span class="p">&gt;</span>
      <span class="p">&lt;/</span><span class="nt">div</span><span class="p">&gt;</span>
    <span class="p">&lt;/</span><span class="nt">div</span><span class="p">&gt;</span>
<span class="p">&lt;/</span><span class="nt">div</span><span class="p">&gt;</span>

<span class="p">&lt;</span><span class="nt">script</span><span class="p">&gt;</span>
    <span class="c1">// 每天切换 banner 图.Switch banner image every day.
</span><span class="c1"></span>    <span class="nx">$</span><span class="p">(</span><span class="s1">'.bg-cover'</span><span class="p">).</span><span class="nx">css</span><span class="p">(</span><span class="s1">'background-image'</span><span class="p">,</span> <span class="s1">'url(/medias/banner/'</span> <span class="o">+</span> <span class="k">new</span> <span class="nb">Date</span><span class="p">().</span><span class="nx">getDay</span><span class="p">()</span> <span class="o">+</span> <span class="s1">'.jpg)'</span><span class="p">);</span>
<span class="p">&lt;/</span><span class="nt">script</span><span class="p">&gt;</span></code>
      </pre>
    </div>
    <p>
      <b>“关于”页面增加简历(可选)</b>
    </p>
    <p>修改<code>/themes/matery/layout/about.ejs</code>,找到<code>&lt;div class="card"&gt;</code>标签,然后找到它对应的<code>&lt;/div&gt;</code>标签,接在后面新增一个card,语句如下:</p>
    <div class="has">
      <pre>      <code class="language-html"><span class="p">&lt;</span><span class="nt">div</span> <span class="na">class</span><span class="o">=</span><span class="s">"card"</span><span class="p">&gt;</span>
    <span class="p">&lt;</span><span class="nt">div</span> <span class="na">class</span><span class="o">=</span><span class="s">"card-content"</span><span class="p">&gt;</span>
      <span class="p">&lt;</span><span class="nt">div</span> <span class="na">class</span><span class="o">=</span><span class="s">"card-content article-card-content"</span><span class="p">&gt;</span>
                <span class="p">&lt;</span><span class="nt">div</span> <span class="na">class</span><span class="o">=</span><span class="s">"title center-align"</span> <span class="na">data-aos</span><span class="o">=</span><span class="s">"zoom-in-up"</span><span class="p">&gt;</span>
                  <span class="p">&lt;</span><span class="nt">i</span> <span class="na">class</span><span class="o">=</span><span class="s">"fa fa-address-book"</span><span class="p">&gt;&lt;/</span><span class="nt">i</span><span class="p">&gt;</span><span class="ni">&amp;nbsp;&amp;nbsp;</span><span class="err">&lt;</span>%- __('myCV') %&gt;
                <span class="p">&lt;/</span><span class="nt">div</span><span class="p">&gt;</span>
                <span class="p">&lt;</span><span class="nt">div</span> <span class="na">id</span><span class="o">=</span><span class="s">"articleContent"</span> <span class="na">data-aos</span><span class="o">=</span><span class="s">"fade-up"</span><span class="p">&gt;</span>
                  <span class="err">&lt;</span>%- page.content %&gt;
                <span class="p">&lt;/</span><span class="nt">div</span><span class="p">&gt;</span>
      <span class="p">&lt;/</span><span class="nt">div</span><span class="p">&gt;</span>
    <span class="p">&lt;/</span><span class="nt">div</span><span class="p">&gt;</span>
<span class="p">&lt;/</span><span class="nt">div</span><span class="p">&gt;</span></code>
      </pre>
    </div>
    <p>这样就会多出一张card,然后可以在<code>/source/about/index.md</code>下面写上你的简历了,当然这里的位置随你自己设置,你也可以把简历作为第一个card。</p>
    <p>
      <b>解决mathjax与代码高亮的冲突</b>
    </p>
    <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> <code>escape:</code>处替换成:</p>
    <div class="has">
      <pre>      <code class="language-json"><span class="err">escape:</span> <span class="err">/^\\(</span><span class="p">[</span><span class="err">`*\</span><span class="p">[</span><span class="err">\</span><span class="p">]</span><span class="err">()#$+\-.!_&gt;</span><span class="p">]</span><span class="err">)/,</span></code>
      </pre>
    </div>
    <p><code>em:</code>处替换成:</p>
    <div class="has">
      <pre>      <code class="language-json"><span class="err">em:</span> <span class="err">/^\*((?:\*\*|</span><span class="p">[</span><span class="err">\s\S</span><span class="p">]</span><span class="err">)+?)\*(?!\*)/,</span></code>
      </pre>
    </div>
    <p>这时在文章里写数学公式基本没有问题了,但是要注意: <b>数学公式中如果出现了连续两个{,中间一定要加空格!</b></p>
    <p>
      <b>增加建站时间</b>
    </p>
    <p>修改<code>/themes/matery/layout/_partial/footer.ejs</code>文件,在最后加上</p>
    <div class="has">
      <pre>      <code class="language-js"><span class="o">&lt;</span><span class="nx">script</span> <span class="nx">language</span><span class="o">=</span><span class="nx">javascript</span><span class="o">&gt;</span>
    <span class="kd">function</span> <span class="nx">siteTime</span><span class="p">()</span> <span class="p">{</span>
      <span class="nb">window</span><span class="p">.</span><span class="nx">setTimeout</span><span class="p">(</span><span class="s2">"siteTime()"</span><span class="p">,</span> <span class="mi">1000</span><span class="p">);</span>
      <span class="kd">var</span> <span class="nx">seconds</span> <span class="o">=</span> <span class="mi">1000</span><span class="p">;</span>
      <span class="kd">var</span> <span class="nx">minutes</span> <span class="o">=</span> <span class="nx">seconds</span> <span class="o">*</span> <span class="mi">60</span><span class="p">;</span>
      <span class="kd">var</span> <span class="nx">hours</span> <span class="o">=</span> <span class="nx">minutes</span> <span class="o">*</span> <span class="mi">60</span><span class="p">;</span>
      <span class="kd">var</span> <span class="nx">days</span> <span class="o">=</span> <span class="nx">hours</span> <span class="o">*</span> <span class="mi">24</span><span class="p">;</span>
      <span class="kd">var</span> <span class="nx">years</span> <span class="o">=</span> <span class="nx">days</span> <span class="o">*</span> <span class="mi">365</span><span class="p">;</span>
      <span class="kd">var</span> <span class="nx">today</span> <span class="o">=</span> <span class="k">new</span> <span class="nb">Date</span><span class="p">();</span>
      <span class="kd">var</span> <span class="nx">todayYear</span> <span class="o">=</span> <span class="nx">today</span><span class="p">.</span><span class="nx">getFullYear</span><span class="p">();</span>
      <span class="kd">var</span> <span class="nx">todayMonth</span> <span class="o">=</span> <span class="nx">today</span><span class="p">.</span><span class="nx">getMonth</span><span class="p">()</span> <span class="o">+</span> <span class="mi">1</span><span class="p">;</span>
      <span class="kd">var</span> <span class="nx">todayDate</span> <span class="o">=</span> <span class="nx">today</span><span class="p">.</span><span class="nx">getDate</span><span class="p">();</span>
      <span class="kd">var</span> <span class="nx">todayHour</span> <span class="o">=</span> <span class="nx">today</span><span class="p">.</span><span class="nx">getHours</span><span class="p">();</span>
      <span class="kd">var</span> <span class="nx">todayMinute</span> <span class="o">=</span> <span class="nx">today</span><span class="p">.</span><span class="nx">getMinutes</span><span class="p">();</span>
      <span class="kd">var</span> <span class="nx">todaySecond</span> <span class="o">=</span> <span class="nx">today</span><span class="p">.</span><span class="nx">getSeconds</span><span class="p">();</span>
      <span class="cm">/* Date.UTC() -- 返回date对象距世界标准时间(UTC)1970年1月1日午夜之间的毫秒数(时间戳)
</span><span class="cm">      year - 作为date对象的年份,为4位年份值
</span><span class="cm">      month - 0-11之间的整数,做为date对象的月份
</span><span class="cm">      day - 1-31之间的整数,做为date对象的天数
</span><span class="cm">      hours - 0(午夜24点)-23之间的整数,做为date对象的小时数
</span><span class="cm">      minutes - 0-59之间的整数,做为date对象的分钟数
</span><span class="cm">      seconds - 0-59之间的整数,做为date对象的秒数
</span><span class="cm">      microseconds - 0-999之间的整数,做为date对象的毫秒数 */</span>
      <span class="kd">var</span> <span class="nx">t1</span> <span class="o">=</span> <span class="nb">Date</span><span class="p">.</span><span class="nx">UTC</span><span class="p">(</span><span class="mi">2017</span><span class="p">,</span> <span class="mi">09</span><span class="p">,</span> <span class="mi">11</span><span class="p">,</span> <span class="mi">00</span><span class="p">,</span> <span class="mi">00</span><span class="p">,</span> <span class="mi">00</span><span class="p">);</span> <span class="c1">//北京时间2018-2-13 00:00:00
</span><span class="c1"></span>      <span class="kd">var</span> <span class="nx">t2</span> <span class="o">=</span> <span class="nb">Date</span><span class="p">.</span><span class="nx">UTC</span><span class="p">(</span><span class="nx">todayYear</span><span class="p">,</span> <span class="nx">todayMonth</span><span class="p">,</span> <span class="nx">todayDate</span><span class="p">,</span> <span class="nx">todayHour</span><span class="p">,</span> <span class="nx">todayMinute</span><span class="p">,</span> <span class="nx">todaySecond</span><span class="p">);</span>
      <span class="kd">var</span> <span class="nx">diff</span> <span class="o">=</span> <span class="nx">t2</span> <span class="o">-</span> <span class="nx">t1</span><span class="p">;</span>
      <span class="kd">var</span> <span class="nx">diffYears</span> <span class="o">=</span> <span class="nb">Math</span><span class="p">.</span><span class="nx">floor</span><span class="p">(</span><span class="nx">diff</span> <span class="o">/</span> <span class="nx">years</span><span class="p">);</span>
      <span class="kd">var</span> <span class="nx">diffDays</span> <span class="o">=</span> <span class="nb">Math</span><span class="p">.</span><span class="nx">floor</span><span class="p">((</span><span class="nx">diff</span> <span class="o">/</span> <span class="nx">days</span><span class="p">)</span> <span class="o">-</span> <span class="nx">diffYears</span> <span class="o">*</span> <span class="mi">365</span><span class="p">);</span>
      <span class="kd">var</span> <span class="nx">diffHours</span> <span class="o">=</span> <span class="nb">Math</span><span class="p">.</span><span class="nx">floor</span><span class="p">((</span><span class="nx">diff</span> <span class="o">-</span> <span class="p">(</span><span class="nx">diffYears</span> <span class="o">*</span> <span class="mi">365</span> <span class="o">+</span> <span class="nx">diffDays</span><span class="p">)</span> <span class="o">*</span> <span class="nx">days</span><span class="p">)</span> <span class="o">/</span> <span class="nx">hours</span><span class="p">);</span>
      <span class="kd">var</span> <span class="nx">diffMinutes</span> <span class="o">=</span> <span class="nb">Math</span><span class="p">.</span><span class="nx">floor</span><span class="p">((</span><span class="nx">diff</span> <span class="o">-</span> <span class="p">(</span><span class="nx">diffYears</span> <span class="o">*</span> <span class="mi">365</span> <span class="o">+</span> <span class="nx">diffDays</span><span class="p">)</span> <span class="o">*</span> <span class="nx">days</span> <span class="o">-</span> <span class="nx">diffHours</span> <span class="o">*</span> <span class="nx">hours</span><span class="p">)</span> <span class="o">/</span> <span class="nx">minutes</span><span class="p">);</span>
      <span class="kd">var</span> <span class="nx">diffSeconds</span> <span class="o">=</span> <span class="nb">Math</span><span class="p">.</span><span class="nx">floor</span><span class="p">((</span><span class="nx">diff</span> <span class="o">-</span> <span class="p">(</span><span class="nx">diffYears</span> <span class="o">*</span> <span class="mi">365</span> <span class="o">+</span> <span class="nx">diffDays</span><span class="p">)</span> <span class="o">*</span> <span class="nx">days</span> <span class="o">-</span> <span class="nx">diffHours</span> <span class="o">*</span> <span class="nx">hours</span> <span class="o">-</span> <span class="nx">diffMinutes</span> <span class="o">*</span> <span class="nx">minutes</span><span class="p">)</span> <span class="o">/</span> <span class="nx">seconds</span><span class="p">);</span>
      <span class="nb">document</span><span class="p">.</span><span class="nx">getElementById</span><span class="p">(</span><span class="s2">"sitetime"</span><span class="p">).</span><span class="nx">innerHTML</span> <span class="o">=</span> <span class="s2">"本站已运行 "</span> <span class="o">+</span><span class="nx">diffYears</span><span class="o">+</span><span class="s2">" 年 "</span><span class="o">+</span><span class="nx">diffDays</span> <span class="o">+</span> <span class="s2">" 天 "</span> <span class="o">+</span> <span class="nx">diffHours</span> <span class="o">+</span> <span class="s2">" 小时 "</span> <span class="o">+</span> <span class="nx">diffMinutes</span> <span class="o">+</span> <span class="s2">" 分钟 "</span> <span class="o">+</span> <span class="nx">diffSeconds</span> <span class="o">+</span> <span class="s2">" 秒"</span><span class="p">;</span>
    <span class="p">}</span><span class="cm">/*因为建站时间还没有一年,就将之注释掉了。需要的可以取消*/</span>
    <span class="nx">siteTime</span><span class="p">();</span>
<span class="o">&lt;</span><span class="err">/script&gt;</span>
</code>
      </pre>
    </div>
    <p>然后在合适的地方(比如copyright声明后面)加上下面的代码就行了:</p>
    <div class="has">
      <pre>      <code class="language-html"><span class="p">&lt;</span><span class="nt">span</span> <span class="na">id</span><span class="o">=</span><span class="s">"sitetime"</span><span class="p">&gt;&lt;/</span><span class="nt">span</span><span class="p">&gt;</span></code>
      </pre>
    </div>
    <p>
      <b>修改不蒜子初始化计数</b>
    </p>
    <p>因为不蒜子至今未开放注册,所以没办法在官网修改初始化,只能自己动手了。和上一条一样,在<code>/themes/matery/layout/_partial/footer.ejs</code>文件最后加上:</p>
    <div class="has">
      <pre>      <code class="language-js"><span class="o">&lt;</span><span class="nx">script</span><span class="o">&gt;</span>
    <span class="nx">$</span><span class="p">(</span><span class="nb">document</span><span class="p">).</span><span class="nx">ready</span><span class="p">(</span><span class="kd">function</span> <span class="p">()</span> <span class="p">{</span>

      <span class="kd">var</span> <span class="kr">int</span> <span class="o">=</span> <span class="nx">setInterval</span><span class="p">(</span><span class="nx">fixCount</span><span class="p">,</span> <span class="mi">50</span><span class="p">);</span><span class="c1">// 50ms周期检测函数
</span><span class="c1"></span>      <span class="kd">var</span> <span class="nx">pvcountOffset</span> <span class="o">=</span> <span class="mi">80000</span><span class="p">;</span><span class="c1">// 初始化首次数据
</span><span class="c1"></span>      <span class="kd">var</span> <span class="nx">uvcountOffset</span> <span class="o">=</span> <span class="mi">20000</span><span class="p">;</span>

      <span class="kd">function</span> <span class="nx">fixCount</span><span class="p">()</span> <span class="p">{</span>
            <span class="k">if</span> <span class="p">(</span><span class="nb">document</span><span class="p">.</span><span class="nx">getElementById</span><span class="p">(</span><span class="s2">"busuanzi_container_site_pv"</span><span class="p">).</span><span class="nx">style</span><span class="p">.</span><span class="nx">display</span> <span class="o">!=</span> <span class="s2">"none"</span><span class="p">)</span> <span class="p">{</span>
                <span class="nx">$</span><span class="p">(</span><span class="s2">"#busuanzi_value_site_pv"</span><span class="p">).</span><span class="nx">html</span><span class="p">(</span><span class="nb">parseInt</span><span class="p">(</span><span class="nx">$</span><span class="p">(</span><span class="s2">"#busuanzi_value_site_pv"</span><span class="p">).</span><span class="nx">html</span><span class="p">())</span> <span class="o">+</span> <span class="nx">pvcountOffset</span><span class="p">);</span>
                <span class="nx">clearInterval</span><span class="p">(</span><span class="kr">int</span><span class="p">);</span>
            <span class="p">}</span>
            <span class="k">if</span> <span class="p">(</span><span class="nx">$</span><span class="p">(</span><span class="s2">"#busuanzi_container_site_pv"</span><span class="p">).</span><span class="nx">css</span><span class="p">(</span><span class="s2">"display"</span><span class="p">)</span> <span class="o">!=</span> <span class="s2">"none"</span><span class="p">)</span> <span class="p">{</span>
                <span class="nx">$</span><span class="p">(</span><span class="s2">"#busuanzi_value_site_uv"</span><span class="p">).</span><span class="nx">html</span><span class="p">(</span><span class="nb">parseInt</span><span class="p">(</span><span class="nx">$</span><span class="p">(</span><span class="s2">"#busuanzi_value_site_uv"</span><span class="p">).</span><span class="nx">html</span><span class="p">())</span> <span class="o">+</span> <span class="nx">uvcountOffset</span><span class="p">);</span> <span class="c1">// 加上初始数据
</span><span class="c1"></span>                <span class="nx">clearInterval</span><span class="p">(</span><span class="kr">int</span><span class="p">);</span> <span class="c1">// 停止检测
</span><span class="c1"></span>            <span class="p">}</span>
      <span class="p">}</span>
    <span class="p">});</span>
<span class="o">&lt;</span><span class="err">/script&gt;</span>
</code>
      </pre>
    </div>
    <p>然后把上面几行有段代码:</p>
    <div class="has">
      <pre>      <code class="language-html"><span class="err">&lt;</span>% if (theme.busuanziStatistics <span class="err">&amp;&amp;</span> theme.busuanziStatistics.totalTraffic) { %&gt;
    <span class="p">&lt;</span><span class="nt">span</span> <span class="na">id</span><span class="o">=</span><span class="s">"busuanzi_container_site_pv"</span><span class="p">&gt;</span>
      <span class="p">&lt;</span><span class="nt">i</span> <span class="na">class</span><span class="o">=</span><span class="s">"fa fa-heart-o"</span><span class="p">&gt;&lt;/</span><span class="nt">i</span><span class="p">&gt;</span>
      本站总访问量 <span class="p">&lt;</span><span class="nt">span</span> <span class="na">id</span><span class="o">=</span><span class="s">"busuanzi_value_site_pv"</span> <span class="na">class</span><span class="o">=</span><span class="s">"white-color"</span><span class="p">&gt;&lt;/</span><span class="nt">span</span><span class="p">&gt;</span>
    <span class="p">&lt;/</span><span class="nt">span</span><span class="p">&gt;</span>
<span class="err">&lt;</span>% } %&gt;
<span class="err">&lt;</span>% if (theme.busuanziStatistics <span class="err">&amp;&amp;</span> theme.busuanziStatistics.totalNumberOfvisitors) { %&gt;
    <span class="p">&lt;</span><span class="nt">span</span> <span class="na">id</span><span class="o">=</span><span class="s">"busuanzi_container_site_uv"</span><span class="p">&gt;</span>
      人次,<span class="ni">&amp;nbsp;</span>访客数 <span class="p">&lt;</span><span class="nt">span</span> <span class="na">id</span><span class="o">=</span><span class="s">"busuanzi_value_site_uv"</span> <span class="na">class</span><span class="o">=</span><span class="s">"white-color"</span><span class="p">&gt;&lt;/</span><span class="nt">span</span><span class="p">&gt;</span> 人.
    <span class="p">&lt;/</span><span class="nt">span</span><span class="p">&gt;</span>
<span class="err">&lt;</span>% } %&gt;</code>
      </pre>
    </div>
    <p>修改为:</p>
    <div class="has">
      <pre>      <code class="language-html"><span class="err">&lt;</span>% if (theme.busuanziStatistics <span class="err">&amp;&amp;</span> theme.busuanziStatistics.totalTraffic) { %&gt;
    <span class="p">&lt;</span><span class="nt">span</span> <span class="na">id</span><span class="o">=</span><span class="s">"busuanzi_container_site_pv"</span> <span class="na">style</span><span class="o">=</span><span class="s">'display:none'</span><span class="p">&gt;</span>
      <span class="p">&lt;</span><span class="nt">i</span> <span class="na">class</span><span class="o">=</span><span class="s">"fa fa-heart-o"</span><span class="p">&gt;&lt;/</span><span class="nt">i</span><span class="p">&gt;</span>
      本站总访问量 <span class="p">&lt;</span><span class="nt">span</span> <span class="na">id</span><span class="o">=</span><span class="s">"busuanzi_value_site_pv"</span> <span class="na">class</span><span class="o">=</span><span class="s">"white-color"</span><span class="p">&gt;&lt;/</span><span class="nt">span</span><span class="p">&gt;</span>
    <span class="p">&lt;/</span><span class="nt">span</span><span class="p">&gt;</span>
<span class="err">&lt;</span>% } %&gt;
<span class="err">&lt;</span>% if (theme.busuanziStatistics <span class="err">&amp;&amp;</span> theme.busuanziStatistics.totalNumberOfvisitors) { %&gt;
    <span class="p">&lt;</span><span class="nt">span</span> <span class="na">id</span><span class="o">=</span><span class="s">"busuanzi_container_site_uv"</span> <span class="na">style</span><span class="o">=</span><span class="s">'display:none'</span><span class="p">&gt;</span>
      人次,<span class="ni">&amp;nbsp;</span>访客数 <span class="p">&lt;</span><span class="nt">span</span> <span class="na">id</span><span class="o">=</span><span class="s">"busuanzi_value_site_uv"</span> <span class="na">class</span><span class="o">=</span><span class="s">"white-color"</span><span class="p">&gt;&lt;/</span><span class="nt">span</span><span class="p">&gt;</span> 人.
    <span class="p">&lt;/</span><span class="nt">span</span><span class="p">&gt;</span>
<span class="err">&lt;</span>% } %&gt;</code>
      </pre>
    </div>
    <p>其实就是增加了两个<code>style='display:none'</code>而已。</p>
    <p>
      <b>添加动漫人物</b>
    </p>
    <p>其实三步就行了,不用像网上有些教程那么复杂。</p>
    <p>
      <b>第一步:</b>
    </p>
    <div class="has">
      <pre>      <code class="language-bash">npm install --save hexo-helper-live2d</code>
      </pre>
    </div>
    <p>
      <b>第二步:</b>
    </p>
    <div class="has">
      <pre>      <code class="language-bash">npm install live2d-widget-model-shizuku</code>
      </pre>
    </div>
    <p><b>第三步:</b> 在根目录配置文件中添加如下代码:</p>
    <div class="has">
      <pre>      <code class="language-json"><span class="err">live</span><span class="mi">2</span><span class="err">d:</span>
<span class="err">enable:</span> <span class="kc">true</span>
<span class="err">scriptFrom:</span> <span class="err">local</span>
<span class="err">pluginRootPath:</span> <span class="err">live</span><span class="mi">2</span><span class="err">dw/</span>
<span class="err">pluginJsPath:</span> <span class="err">lib/</span>
<span class="err">pluginModelPath:</span> <span class="err">assets/</span>
<span class="err">tagMode:</span> <span class="kc">false</span>
<span class="err">log:</span> <span class="kc">false</span>
<span class="err">model:</span>
    <span class="err">use:</span> <span class="err">live</span><span class="mi">2</span><span class="err">d-widget-model-shizuku</span>
<span class="err">display:</span>
    <span class="err">position:</span> <span class="err">right</span>
    <span class="err">width:</span> <span class="mi">150</span>
    <span class="err">height:</span> <span class="mi">300</span>
<span class="err">mobile:</span>
    <span class="err">show:</span> <span class="kc">true</span>
<span class="err">react:</span>
    <span class="err">opacity:</span> <span class="mf">0.7</span></code>
      </pre>
    </div>
    <p>然后<code>hexo g</code>再<code>hexo s</code>就能预览出效果了,但是有个注意的地方,我发现<b>这个动漫人物最好不要和不蒜子同时使用</b>,不然不蒜子会显示不出来。</p>
    <p>
      <b>图片添加水印</b>
    </p>
    <p>为了防止别人抄袭你文章,可以把所有的图片都加上水印,方法很简单。</p>
    <p>首先在博客根目录下新建一个<code>watermark.py</code>,代码如下:</p>
    <div class="has">
      <pre>      <code class="language-python"><span class="c1"># -*- coding: utf-8 -*-</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="kn">import</span> <span class="nn">glob</span>
<span class="kn">from</span> <span class="nn">PIL</span> <span class="kn">import</span> <span class="n">Image</span>
<span class="kn">from</span> <span class="nn">PIL</span> <span class="kn">import</span> <span class="n">ImageDraw</span>
<span class="kn">from</span> <span class="nn">PIL</span> <span class="kn">import</span> <span class="n">ImageFont</span>


<span class="k">def</span> <span class="nf">watermark</span><span class="p">(</span><span class="n">post_name</span><span class="p">):</span>
    <span class="k">if</span> <span class="n">post_name</span> <span class="o">==</span> <span class="s1">'all'</span><span class="p">:</span>
      <span class="n">post_name</span> <span class="o">=</span> <span class="s1">'*'</span>
    <span class="n">dir_name</span> <span class="o">=</span> <span class="s1">'source/_posts/'</span> <span class="o">+</span> <span class="n">post_name</span> <span class="o">+</span> <span class="s1">'/*'</span>
    <span class="k">for</span> <span class="n">files</span> <span class="ow">in</span> <span class="n">glob</span><span class="o">.</span><span class="n">glob</span><span class="p">(</span><span class="n">dir_name</span><span class="p">):</span>
      <span class="n">im</span> <span class="o">=</span> <span class="n">Image</span><span class="o">.</span><span class="nb">open</span><span class="p">(</span><span class="n">files</span><span class="p">)</span>
      <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">im</span><span class="o">.</span><span class="n">getbands</span><span class="p">())</span> <span class="o">&lt;</span> <span class="mi">3</span><span class="p">:</span>
            <span class="n">im</span> <span class="o">=</span> <span class="n">im</span><span class="o">.</span><span class="n">convert</span><span class="p">(</span><span class="s1">'RGB'</span><span class="p">)</span>
            <span class="k">print</span><span class="p">(</span><span class="n">files</span><span class="p">)</span>
      <span class="n">font</span> <span class="o">=</span> <span class="n">ImageFont</span><span class="o">.</span><span class="n">truetype</span><span class="p">(</span><span class="s1">'STSONG.TTF'</span><span class="p">,</span> <span class="nb">max</span><span class="p">(</span><span class="mi">30</span><span class="p">,</span> <span class="nb">int</span><span class="p">(</span><span class="n">im</span><span class="o">.</span><span class="n">size</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">/</span> <span class="mi">20</span><span class="p">)))</span>
      <span class="n">draw</span> <span class="o">=</span> <span class="n">ImageDraw</span><span class="o">.</span><span class="n">Draw</span><span class="p">(</span><span class="n">im</span><span class="p">)</span>
      <span class="n">draw</span><span class="o">.</span><span class="n">text</span><span class="p">((</span><span class="n">im</span><span class="o">.</span><span class="n">size</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">/</span> <span class="mi">2</span><span class="p">,</span> <span class="n">im</span><span class="o">.</span><span class="n">size</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">/</span> <span class="mi">2</span><span class="p">),</span>
                  <span class="sa">u</span><span class="s1">'@yourname'</span><span class="p">,</span> <span class="n">fill</span><span class="o">=</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="n">font</span><span class="o">=</span><span class="n">font</span><span class="p">)</span>
      <span class="n">im</span><span class="o">.</span><span class="n">save</span><span class="p">(</span><span class="n">files</span><span class="p">)</span>


<span class="k">if</span> <span class="vm">__name__</span> <span class="o">==</span> <span class="s1">'__main__'</span><span class="p">:</span>
    <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">)</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span>
      <span class="n">watermark</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
    <span class="k">else</span><span class="p">:</span>
      <span class="k">print</span><span class="p">(</span><span class="s1">' &lt;input&gt;'</span><span class="p">)</span></code>
      </pre>
    </div>
    <p>字体也放根目录下,自己找字体。然后每次写完一篇文章可以运行<code>python3 watermark.py postname</code>添加水印,如果第一次运行要给所有文章添加水印,可以运行<code>python3 watermark.py all</code>。</p>
    <p>
      <b>添加网易云音乐BGM</b>
    </p>
    <p>写文章的时候,想插入一段BGM怎么办?</p>
    <p>首先打开网易云网页版,找到想听的歌曲,然后点击生成外链: </p>
    <p style="text-align: center">
      </p>
      <img class="origin_image zh-lightbox-thumb lazyload" width="744" alt="v2-f0b4d14ccf55209a67c0e059ef72ff2c_b.jpg" data-src="https://ss.csdn.net/p?https://pic1.zhimg.com/v2-f0b4d14ccf55209a67c0e059ef72ff2c_b.jpg">
   
    <p> 复制如下代码: </p>
    <p style="text-align: center">
      </p>
      <img class="origin_image zh-lightbox-thumb lazyload" width="983" alt="v2-caa9bfc14aca0213ebba87eae226c76a_b.jpg" data-src="https://ss.csdn.net/p?https://pic3.zhimg.com/v2-caa9bfc14aca0213ebba87eae226c76a_b.jpg">
   
    <p class="ztext-empty-paragraph">
      <br></p>
    <p>粘贴到文章里就行了,为了美观,设置一下居中,具体代码如下:</p>
    <div class="has">
      <pre>      <code class="language-html"><span class="p">&lt;</span><span class="nt">div</span> <span class="na">align</span><span class="o">=</span><span class="s">"middle"</span><span class="p">&gt;</span>这里粘贴刚刚复制的代码<span class="p">&lt;/</span><span class="nt">div</span><span class="p">&gt;</span></code>
      </pre>
    </div>
    <p>
      <b>添加百度统计和谷歌统计代码</b>
    </p>
    <p>打开<code>themes/matery/layout/_partial/head.ejs</code>,修改下面两行:</p>
    <div class="has">
      <pre>      <code class="language-html"><span class="p">&lt;</span><span class="nt">meta</span> <span class="na">name</span><span class="o">=</span><span class="s">"baidu-site-verification"</span> <span class="na">content</span><span class="o">=</span><span class="s">"fmlEuI34ir"</span> <span class="p">/&gt;</span>
<span class="p">&lt;</span><span class="nt">meta</span> <span class="na">name</span><span class="o">=</span><span class="s">"google-site-verification"</span> <span class="na">content</span><span class="o">=</span><span class="s">"yCy2azpds5XSuGZvis6OuA-XIGF5GuGpYRAaGfD6o48"</span> <span class="p">/&gt;</span></code>
      </pre>
    </div>
    <p>其中<code>content</code>内容改成你自己的就行了。</p>
    <p>
      <b>修复代码块行号不显示bug</b>
    </p>
    <p>修改<code>themes/matery/source/css/matery.css</code>第95行左右的<code>pre</code>和<code>code</code>两段改为如下代码:</p>
    <div class="has">
      <pre>      <code class="language-css"><span class="nt">pre</span> <span class="p">{</span>
    <span class="c">/* padding: 1.5rem !important; */</span>
    <span class="k">padding</span><span class="p">:</span> <span class="mf">1.5</span><span class="kt">rem</span> <span class="mf">1.5</span><span class="kt">rem</span> <span class="mf">1.5</span><span class="kt">rem</span> <span class="mf">3.3</span><span class="kt">rem</span> <span class="cp">!important</span><span class="p">;</span>
    <span class="k">margin</span><span class="p">:</span> <span class="mi">1</span><span class="kt">rem</span> <span class="mi">0</span> <span class="cp">!important</span><span class="p">;</span>
    <span class="k">background</span><span class="p">:</span> <span class="mh">#272822</span><span class="p">;</span>
    <span class="k">overflow</span><span class="p">:</span> <span class="kc">auto</span><span class="p">;</span>
    <span class="k">border-radius</span><span class="p">:</span> <span class="mf">0.35</span><span class="kt">rem</span><span class="p">;</span>
    <span class="k">tab-size</span><span class="p">:</span> <span class="mi">4</span><span class="p">;</span>
<span class="p">}</span>

<span class="nt">code</span> <span class="p">{</span>
    <span class="k">padding</span><span class="p">:</span> <span class="mi">1</span><span class="kt">px</span> <span class="mi">5</span><span class="kt">px</span><span class="p">;</span>
    <span class="k">font-family</span><span class="p">:</span> <span class="n">Inconsolata</span><span class="p">,</span> <span class="n">Monaco</span><span class="p">,</span> <span class="n">Consolas</span><span class="p">,</span> <span class="s1">'Courier New'</span><span class="p">,</span> <span class="n">Courier</span><span class="p">,</span> <span class="kc">monospace</span><span class="p">;</span>
    <span class="c">/* font-size: 0.91rem; */</span>
    <span class="k">color</span><span class="p">:</span> <span class="mh">#e96900</span><span class="p">;</span>
    <span class="k">background-color</span><span class="p">:</span> <span class="mh">#f8f8f8</span><span class="p">;</span>
    <span class="k">border-radius</span><span class="p">:</span> <span class="mi">2</span><span class="kt">px</span><span class="p">;</span>
<span class="p">}</span></code>
      </pre>
    </div>
    <p>然后在根目录的<code>_config.yml</code>中设置<code>prism_plugin.line_number</code>为<code>true</code>。</p>
    <p>
      <b>优化文章url路径</b>
    </p>
    <p>有教程认为,将博客目录结构改为如下,就能减少层级,有利于搜索引擎的SEO。其实不然,网站内容的层级是按照从首页开始点击几次能到达你的文章来算的,所以你改不改都是两层就到达了,不在首页的也可以通过<code>index-archives-post</code>到达,跟文章url长度没有任何关系,所以如下操作作废,你想改也行,不改也行。但是建议已经建站一段时间的同学千万别改,不然会产生很多死链,并且评论issue全部会清空,很麻烦。</p>
    <p>~~seo搜索引擎优化认为,网站的最佳结构是用户从首页点击三次就可以到达任何一个页面,但是我们使用hexo编译的站点打开文章的url是:<code>sitename/year/mounth/day/title</code>四层的结构,这样的url结构很不利于seo,爬虫就会经常爬不到我们的文章,于是,我们可以将url直接改成<code>sitename/title</code>的形式,并且title最好是用英文,在根目录的<code>_config.yml</code>文件下修改permalink如下:~~</p>
    <div class="has">
      <pre>      <code class="language-text"># permalink: :year/:month/:day/:title/
permalink: :title/</code>
      </pre>
    </div>
    <h2>
      <b>常见问题及解答(FAQ)</b>
    </h2>
    <p>这个章节主要更新许多同学在搭建博客的过程中咨询我的一些问题。</p>
    <p>
      <b>为什么本地生成完ssh key之后没有.ssh文件夹?</b>
    </p>
    <p>这是我没有想到会遇到的问题,但是很多人还是遇到了,主要问题就是在输入完<code>ssh-keygen -t rsa -C "792321264@qq.com"</code>之后,很多同学没有按照提示继续输入,而是就这么结束了,然后报错了也没有发现。正确做法是按照提示,一路按回车就行了。</p>
    <p>
      <b>为什么代码块显示有问题?</b>
    </p>
    <p>代码要显示正确,要注意以下几个点:根目录<code>_config.yml</code>文件下的<code>highlight</code>中的<code>line_number</code>要设置为<code>false</code>,因为暂时行号暂时有bug,还没有修复。不要按照网上教程安装<code>kramed</code>插件,已经装了的卸载掉。 * 修改<code>node_modules/marked/lib/marked.js</code>文件中的<code>escape</code>和<code>em</code>两行(在538行左右),改成下面:</p>
    <div class="has">
      <pre>      <code class="language-json"><span class="err">escape:</span> <span class="err">/^\\(</span><span class="p">[</span><span class="err">`*\</span><span class="p">[</span><span class="err">\</span><span class="p">]</span><span class="err">()#$+\-.!_&gt;</span><span class="p">]</span><span class="err">)/,</span>
<span class="err">em:</span> <span class="err">/^\*((?:\*\*|</span><span class="p">[</span><span class="err">\s\S</span><span class="p">]</span><span class="err">)+?)\*(?!\*)/,</span></code>
      </pre>
    </div>
    <p>
      <b>为什么博客本地预览没问题,push到github上就显示不正常?</b>
    </p>
    <p>这个问题可能原因有很多,我暂时列举遇到的情况: * github博客的仓库名称一定要和你的github名字完全一样,比如你github名字叫<code>abc</code>,那么仓库名字一定要是<code>abc.github.io</code>。这是大多数人会犯的错误,会导致显示不正常。</p>
    <p>
      <b>更换主题之后,配置文件是修改根目录下的还是主题目录下的?</b>
    </p>
    <p>这个其实都要修改,一般也不会出现重复的属性。具体使用哪个,要看主题的源代码,如果是<code>config.xxx</code>那就是用的根目录配置文件,如果是<code>theme.xxx</code>那就用的是主题目录的配置文件。</p>
    <p>
      <b>在哪建立github分支?</b>
    </p>
    <p>点击仓库的<code>settings-branches</code>,右边点击<code>add new branch</code>即可。</p>
    <h2>个性化设置(beantech主题,已停更)</h2>
    <p>
      <b>下面的个性化设置主要针对的是我之前使用的<code>beantech</code>主题,当然如果你想用我现在博客这个主题,可以不看这部分。这部分已经停止更新,今后我只会更新<code>matery</code>主题的各种配置。</b>
    </p>
    <p>
      <b>更换主题</b>
    </p>
    <p>网上大多数主题都是github排名第一的<code>Next</code>主题,但是我个人不是很喜欢,我更喜欢<code>beantech</code>主题,地址在传送门。</p>
    <p>首先要注意的是,<b>这个github项目不仅包含了主题文件,还包含了hexo的各种文件</b>。</p>
    <p>所以首先下载下来这个项目,然后推荐将下图所有文件全部替换你原本博客根目录下的文件: </p>
    <p style="text-align: center">
      </p>
      <img class="content_image lazyload" width="289" alt="v2-c40a774df6d3f46f6e93728a03d9734a_b.jpg" data-src="https://ss.csdn.net/p?https://pic3.zhimg.com/v2-c40a774df6d3f46f6e93728a03d9734a_b.jpg">
   
    <p class="ztext-empty-paragraph">
      <br></p>
    <p>当然一般的主题和这个主题有点不一样,只含有主题文件夹,所以把整个文件夹丢到<code>theme</code>下就行了。</p>
    <p>然后运行<code>hexo clean</code>清空所有生成的网页缓存,<code>hexo g</code>、<code>hexo d</code>。这时候新的主题网页就生成好了,博客根目录的情况应该大致如下: </p>
    <p style="text-align: center">
      </p>
      <img class="origin_image zh-lightbox-thumb lazyload" width="631" alt="v2-ad0c8f12a14a883e35f166a193d2e3d8_b.jpg" data-src="https://ss.csdn.net/p?https://pic1.zhimg.com/v2-ad0c8f12a14a883e35f166a193d2e3d8_b.jpg">
   
    <p class="ztext-empty-paragraph">
      <br></p>
    <p>
      <b>博客目录构成介绍</b>
    </p>
    <p>从上图可以看出,博客的目录结构如下:</p>
    <div class="has">
      <pre>      <code class="language-text">- node_modules
- public
- scaffolds
- source
    - _posts
    - about
    - archive
    - img
    - tags
- themes</code>
      </pre>
    </div>
    <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>
    <p>
      <b>修复文档分类bug</b>
    </p>
    <p>这个主题文档分类功能有个bug,一直没有得到解决,直到最近,我才发现是源文件的单词拼错了。。。</p>
    <p>打开<code>D:\study\program\blog\scaffolds\post.md</code>,单词<code>catagories</code>改为<code>categories</code>。</p>
    <p>
      <b>添加畅言评论插件</b>
    </p>
    <p>主题自带了多说评论插件,但是多说已经关闭了,所以我换成了畅言评论插件。</p>
    <p>首先你得注册一个畅言账号,</p>
    云评论 - 专业的社会化评论系统
    <p>然后打开如下页面,复制该段代码: </p>
    <p style="text-align: center">
      </p>
      <img class="origin_image zh-lightbox-thumb lazyload" width="1200" alt="v2-6d7e684dc9967595521840684f2ea0da_b.jpg" data-src="https://ss.csdn.net/p?https://pic3.zhimg.com/v2-6d7e684dc9967595521840684f2ea0da_b.jpg">
   
    <p> 打开<code>D:\study\program\blog\themes\beantech\layout\post.ejs</code>,将代码粘贴到如下位置: </p>
    <p style="text-align: center">
      </p>
      <img class="origin_image zh-lightbox-thumb lazyload" width="1200" alt="v2-f30b0d3f2251801204f414c6ec9ab383_b.jpg" data-src="https://ss.csdn.net/p?https://pic4.zhimg.com/v2-f30b0d3f2251801204f414c6ec9ab383_b.jpg">
   
    <p> 然后重新生成一下网页,可以看到效果图如下: </p>
    <p style="text-align: center">
      </p>
      <img class="origin_image zh-lightbox-thumb lazyload" width="825" alt="v2-7cd571ed9a38274b07de648a56c3c07f_b.jpg" data-src="https://ss.csdn.net/p?https://pic4.zhimg.com/v2-7cd571ed9a38274b07de648a56c3c07f_b.jpg">
   
    <p> 更多插件例如热评话题之类的,可以自行在畅言后台找到代码添加。</p>
    <p>
      <b>添加图片放大功能</b>
    </p>
    <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>
    <div class="has">
      <pre>      <code class="language-html"><span class="p">&lt;</span><span class="nt">script</span> <span class="na">type</span><span class="o">=</span><span class="s">"text/javascript"</span> <span class="na">src</span><span class="o">=</span><span class="s">"/js/zooming.js"</span><span class="p">&gt;&lt;/</span><span class="nt">script</span><span class="p">&gt;</span></code>
      </pre>
    </div>
    <p>然后文章里的图片就可以单击全屏啦。</p>
    <p>
      <b>添加数学公式显示</b>
    </p>
    <p>打开<code>D:\study\program\blog\themes\beantech\layout\post.ejs</code>,在最下方粘贴如下代码:</p>
    <div class="has">
      <pre>      <code class="language-html"><span class="p">&lt;</span><span class="nt">script</span> <span class="na">type</span><span class="o">=</span><span class="s">"text/javascript"</span> <span class="na">src</span><span class="o">=</span><span class="s">"http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=default"</span><span class="p">&gt;&lt;/</span><span class="nt">script</span><span class="p">&gt;</span></code>
      </pre>
    </div>
    <p>由于markdown语法与mathjax语法存在冲突,所以还需要修改源文件。</p>
    <p>打开<code>D:\study\program\blog\node_modules\marked\lib\marked.js</code> <code>escape:</code>处替换成:</p>
    <div class="has">
      <pre>      <code class="language-json"><span class="err">escape:</span> <span class="err">/^$</span><span class="p">[</span><span class="err">`*\</span><span class="p">[</span><span class="err">\</span><span class="p">]</span><span class="err">()#$+\-.!_&gt;</span><span class="p">]</span><span class="err">)/</span></code>
      </pre>
    </div>
    <p><code>em:</code>处替换成:</p>
    <div class="has">
      <pre>      <code class="language-json"><span class="err">em:</span> <span class="err">/^\*((?:\*\*|</span><span class="p">[</span><span class="err">\s\S</span><span class="p">]</span><span class="err">)+?)\*(?!\*)/</span></code>
      </pre>
    </div>
    <p>这时在文章里写数学公式基本没有问题了,但是要注意: <b>数学公式中如果出现了连续两个{,中间一定要加空格!</b></p>
    <p>举个例子: 行内公式:$y = f(x)$ 代码:</p>
    <div class="has">
      <pre>      <code class="language-text">$y = f(x)$</code>
      </pre>
    </div>
    <p>行间公式: \ 代码:</p>
    <div class="has">
      <pre>      <code class="language-text">\\</code>
      </pre>
    </div>
    <p>
      <b>注意上面花括号之间有空格!</b>
    </p>
    <p>
      <b>添加留言板</b>
    </p>
    <p>在<code>D:\study\program\blog\themes\beantech\layout</code>中新建<code>bbs.ejs</code>,文件内容如下:</p>
    <div class="has">
      <pre>      <code class="language-html">---
layout: page
---
<span class="p">&lt;</span><span class="nt">style</span> <span class="na">type</span><span class="o">=</span><span class="s">"text/css"</span><span class="p">&gt;</span>
    <span class="nt">header</span><span class="p">.</span><span class="nc">intro-header</span><span class="p">{</span>
      <span class="k">background-position</span><span class="p">:</span> <span class="kc">right</span><span class="p">;</span>
    <span class="p">}</span>
<span class="p">&lt;/</span><span class="nt">style</span><span class="p">&gt;</span>
<span class="c">&lt;!-- Chinese Version --&gt;</span>
<span class="p">&lt;</span><span class="nt">div</span> <span class="na">class</span><span class="o">=</span><span class="s">"zh post-container"</span><span class="p">&gt;</span>
    <span class="err">&lt;</span>%- page.content %&gt;
<span class="p">&lt;/</span><span class="nt">div</span><span class="p">&gt;</span></code>
      </pre>
    </div>
    <p>然后在<code>D:\study\program\blog\source</code>中新建<code>\bbs</code>文件夹,里面在新建<code>index.md</code>文件,内容如下:</p>
    <div class="has">
      <pre>      <code class="language-json"><span class="err">---</span>
<span class="err">layout:</span> <span class="s2">"bbs"</span>
<span class="err">title:</span> <span class="s2">"BBS"</span>
<span class="err">date:</span> <span class="mi">2017-09-19</span> <span class="mi">12</span><span class="err">:</span><span class="mi">48</span><span class="err">:</span><span class="mi">33</span>
<span class="err">description:</span> <span class="s2">"欢迎交换友链,一起交流学习!"</span>
<span class="err">header-img:</span> <span class="s2">"img/header_img/home-bg-2-dark.png"</span>
<span class="err">comments:</span> <span class="kc">true</span>
<span class="err">---</span>
<span class="err">此处替换为你的畅言评论代码~~~</span></code>
      </pre>
    </div>
    <p>
      <b>添加置顶功能</b>
    </p>
    <p>运行如下两条命令安装置顶插件:</p>
    <div class="has">
      <pre>      <code class="language-bash">npm uninstall hexo-generator-index --save
npm install hexo-generator-index-pin-top --save</code>
      </pre>
    </div>
    <p>然后打开<code>D:\study\program\blog\themes\beantech\layout\index.ejs</code>,在如下位置添加代码: </p>
    <p style="text-align: center">
      </p>
      <img class="origin_image zh-lightbox-thumb lazyload" width="881" alt="v2-8675b6ed6b1652c8b794f850a05d1e2a_b.jpg" data-src="https://ss.csdn.net/p?https://pic3.zhimg.com/v2-8675b6ed6b1652c8b794f850a05d1e2a_b.jpg">
   
    <p class="ztext-empty-paragraph">
      <br></p>
    <div class="has">
      <pre>      <code class="language-html"><span class="err">&lt;</span>% if (post.top) {%&gt;
    <span class="p">&lt;</span><span class="nt">i</span> <span class="na">class</span><span class="o">=</span><span class="s">"fa fa-thumb-tack"</span><span class="p">&gt;&lt;/</span><span class="nt">i</span><span class="p">&gt;</span>
    <span class="p">&lt;</span><span class="nt">font</span> <span class="na">color</span><span class="o">=</span><span class="s">7D26CD</span><span class="p">&gt;</span>置顶<span class="p">&lt;/</span><span class="nt">font</span><span class="p">&gt;</span>
    <span class="p">&lt;</span><span class="nt">span</span> <span class="na">class</span><span class="o">=</span><span class="s">"post-meta-divider"</span><span class="p">&gt;</span>|<span class="p">&lt;/</span><span class="nt">span</span><span class="p">&gt;</span>
<span class="err">&lt;</span>%}%&gt;</code>
      </pre>
    </div>
    <p>然后在你想置顶的文章md文件里,添加如下配置选项:</p>
    <div class="has">
      <pre>      <code class="language-json"><span class="err">top:</span> <span class="kc">true</span></code>
      </pre>
    </div>
    <p>
      <b>添加访客人数统计和字数统计</b>
    </p>
    <p>我们使用一个国外的流量统计网站:</p>
    godweiyang:超详细Hexo+Github博客搭建小白教程
    <p>首先注册一下。</p>
    <p>然后自己添加网站地址,过程就不详细说了,然后点击<code>Get counter code</code>,选择一个自己喜欢的风格。 如下图所示,选择一个样式,选择<code>HTML</code>,生成代码: </p>
    <p style="text-align: center">
      </p>
      <img class="origin_image zh-lightbox-thumb lazyload" width="958" alt="v2-cc251dd4993a39f8a767de2a8f310582_b.jpg" data-src="https://ss.csdn.net/p?https://pic3.zhimg.com/v2-cc251dd4993a39f8a767de2a8f310582_b.jpg">
   
    <p class="ztext-empty-paragraph">
      <br></p>
    <p>复制这段代码到<code>D:\study\program\blog\themes\beantech\layout\_partial\footer.ejs</code>,具体位置如下: </p>
    <p style="text-align: center">
      </p>
      <img class="origin_image zh-lightbox-thumb lazyload" width="1200" alt="v2-59a8758576457d58a0576cab3f7475b4_b.jpg" data-src="https://ss.csdn.net/p?https://pic1.zhimg.com/v2-59a8758576457d58a0576cab3f7475b4_b.jpg">
   
    <p> 默认的代码和我图中不一样,因为我不想点击图片跳转到它统计网站的链接,可以模仿我的自行修改。</p>
    <p>字数统计首先安装插件</p>
    <div class="has">
      <pre>      <code class="language-bash">npm i --save hexo-wordcount</code>
      </pre>
    </div>
    <p>然后打开<code>D:\study\program\blog\themes\beantech\layout\_partial\footer.ejs</code>,添加如下代码:</p>
    <div class="has">
      <pre>      <code class="language-html"><span class="p">&lt;</span><span class="nt">span</span> <span class="na">class</span><span class="o">=</span><span class="s">"post-count"</span><span class="p">&gt;</span><span class="err">&lt;</span>%= totalcount(site) %&gt; words altogether<span class="p">&lt;/</span><span class="nt">span</span><span class="p">&gt;</span></code>
      </pre>
    </div>
    <p>具体位置见上图。</p>
    <p>
      <b>文章属性配置</b>
    </p>
    <p>首先解释一下文章开头的属性配置,如下图所示: </p>
    <p style="text-align: center">
      </p>
      <img class="content_image lazyload" width="405" alt="v2-e963917b8bb5dd43eb76e6d5b045d991_b.jpg" data-src="https://ss.csdn.net/p?https://pic2.zhimg.com/v2-e963917b8bb5dd43eb76e6d5b045d991_b.jpg">
   
    <p class="ztext-empty-paragraph">
      <br></p>
    <div class="has">
      <pre>      <code class="language-json"><span class="err">title:</span> <span class="err">文章标题</span>
<span class="err">catalog:</span> <span class="err">是否显示段落目录</span>
<span class="err">date:</span> <span class="err">文章日期</span>
<span class="err">subtitle:</span> <span class="err">子标题</span>
<span class="err">header-img:</span> <span class="err">顶部背景图片</span>
<span class="err">top:</span> <span class="err">是否置顶</span>
<span class="err">tags:</span> <span class="err">标签</span>
<span class="err">categories:</span> <span class="err">分类</span></code>
      </pre>
    </div>
    <p>每次写文章修改每个值就行了。</p>
</div><br><br>
来源:https://www.cnblogs.com/godweiyang/p/12203938.html
頁: [1]
查看完整版本: 超详细Hexo+Github博客搭建小白教程