<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>悠悠の哉</title>
  
  <subtitle>Welcome here |ω・)</subtitle>
  <link href="https://qmike.top/atom.xml" rel="self"/>
  
  <link href="https://qmike.top/"/>
  <updated>2022-09-21T16:36:25.797Z</updated>
  <id>https://qmike.top/</id>
  
  <author>
    <name>QMike</name>
    
  </author>
  
  <generator uri="https://hexo.io/">Hexo</generator>
  
  <entry>
    <title>Butterfly进阶篇（三） - 自定义看板娘</title>
    <link href="https://qmike.top/posts/6cf9df4b.html"/>
    <id>https://qmike.top/posts/6cf9df4b.html</id>
    <published>2022-09-22T00:20:00.000Z</published>
    <updated>2022-09-21T16:36:25.797Z</updated>
    
    <content type="html"><![CDATA[<h1>前言</h1><p>基于live2d模块，用最基础的方式为博客安装看板娘，更高阶的方法和模型请参考<a href="https://akilar.top/posts/5b8f515f/">店长的教程</a>。</p><p>本篇设置基于Butterfly主题4.4.0版本。</p><h1>1. 安装</h1><p>在Hexo根目录下打开终端，输入以下指令安装必要插件。</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm install --save hexo-helper-live2d</span><br></pre></td></tr></table></figure><p>打开站点配置文件<code>config.yml</code><br>搜索<code>live2d</code>,按照如下注释内容指示进行操作。<br>如果没有搜到<code>live2d</code>的配置项，就直接把以下内容复制到最底部。</p><figure class="highlight yml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># Live2D</span></span><br><span class="line"><span class="comment">## https://github.com/EYHN/hexo-helper-live2d</span></span><br><span class="line"><span class="attr">live2d:</span></span><br><span class="line">  <span class="attr">enable:</span> <span class="literal">true</span> <span class="comment">#开关插件版看板娘</span></span><br><span class="line">  <span class="attr">scriptFrom:</span> <span class="string">local</span> <span class="comment"># 默认</span></span><br><span class="line">  <span class="attr">pluginRootPath:</span> <span class="string">live2dw/</span> <span class="comment"># 插件在站点上的根目录(相对路径)</span></span><br><span class="line">  <span class="attr">pluginJsPath:</span> <span class="string">lib/</span> <span class="comment"># 脚本文件相对与插件根目录路径</span></span><br><span class="line">  <span class="attr">pluginModelPath:</span> <span class="string">assets/</span> <span class="comment"># 模型文件相对与插件根目录路径</span></span><br><span class="line">  <span class="comment"># scriptFrom: jsdelivr # jsdelivr CDN</span></span><br><span class="line">  <span class="comment"># scriptFrom: unpkg # unpkg CDN</span></span><br><span class="line">  <span class="comment"># scriptFrom: https://npm.elemecdn.com/live2d-widget@3.x/lib/L2Dwidget.min.js # 你的自定义 url</span></span><br><span class="line">  <span class="attr">tagMode:</span> <span class="literal">false</span> <span class="comment"># 标签模式, 是否仅替换 live2d tag标签而非插入到所有页面中</span></span><br><span class="line">  <span class="attr">debug:</span> <span class="literal">false</span> <span class="comment"># 调试, 是否在控制台输出日志</span></span><br><span class="line">  <span class="attr">model:</span></span><br><span class="line">    <span class="attr">use:</span> <span class="string">live2d-widget-model-wanko</span> <span class="comment"># npm-module package name</span></span><br><span class="line">    <span class="comment"># use: wanko # 博客根目录/live2d_models/ 下的目录名</span></span><br><span class="line">    <span class="comment"># use: ./wives/wanko # 相对于博客根目录的路径</span></span><br><span class="line">    <span class="comment"># use: https://npm.elemecdn.com/live2d-widget-model-wanko@1.0.5/assets/wanko.model.json # 你的自定义 url</span></span><br><span class="line">  <span class="attr">display:</span></span><br><span class="line">    <span class="attr">position:</span> <span class="string">left</span> <span class="comment">#控制看板娘相对位置</span></span><br><span class="line">    <span class="attr">width:</span> <span class="number">180</span> <span class="comment">#控制看板娘大小</span></span><br><span class="line">    <span class="attr">height:</span> <span class="number">360</span> <span class="comment">#控制看板娘大小</span></span><br><span class="line">    <span class="attr">hOffset:</span> <span class="number">0</span> <span class="comment">#控制看板娘平行位置</span></span><br><span class="line">    <span class="attr">vOffset:</span> <span class="number">-100</span> <span class="comment">#控制看板娘垂直位置</span></span><br><span class="line">  <span class="attr">mobile:</span></span><br><span class="line">    <span class="attr">show:</span> <span class="literal">true</span> <span class="comment"># 手机中是否展示</span></span><br><span class="line">  <span class="attr">react:</span></span><br><span class="line">    <span class="attr">opacity:</span> <span class="number">0.85</span> <span class="comment">#设置透明度</span></span><br></pre></td></tr></table></figure><p>完成后保存修改，在Hexo根目录下运行指令</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">hexo clean</span><br><span class="line">hexo g</span><br><span class="line">hexo s</span><br></pre></td></tr></table></figure><blockquote><p>注意必须要使用hexo clean是因为我们需要清空缓存重新生成静态页面，不然看板娘没被加入生成的静态页面里，是不会出现的。</p></blockquote><h1>2.更换看板娘</h1><p>同样是在Hexo根目录下打开终端，选择想要的看板娘进行安装，例如我这里用到的是 <code>live2d-widget-model-wanko</code>，一个装在碗里的小狗狗。其他的模型也可以在<a href="https://huaji8.top/post/live2d-plugin-2.0/">模型预览</a>里查看以供选择。</p><p>输入指令</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm install --save live2d-widget-model-wanko</span><br></pre></td></tr></table></figure><p>然后在站点配置文件<code>_config.yml</code>里找到<code>model</code>项修改为期望的模型。</p><figure class="highlight yml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">model:</span></span><br><span class="line">  <span class="attr">use:</span> <span class="string">live2d-widget-model-wanko</span></span><br><span class="line">  <span class="comment"># 默认就是live2d-widget-model-wanko</span></span><br></pre></td></tr></table></figure><p>之后重新运行就可以预览效果</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">hexo clean</span><br><span class="line">hexo g</span><br><span class="line">hexo s</span><br></pre></td></tr></table></figure><p>如果要调整看板娘的大小、位置等，在<code>config.yml</code>中修改<code>live2d</code>的配置项。</p>]]></content>
    
    
    <summary type="html">Butterfly主题安装的进阶内容，自定义live2d模型，也就是左下角的“小当家”看板娘</summary>
    
    
    
    <category term="博客" scheme="https://qmike.top/categories/%E5%8D%9A%E5%AE%A2/"/>
    
    
  </entry>
  
  <entry>
    <title>Butterfly进阶篇（二） - 自定义样式文件</title>
    <link href="https://qmike.top/posts/f42db57d.html"/>
    <id>https://qmike.top/posts/f42db57d.html</id>
    <published>2022-09-20T00:17:00.000Z</published>
    <updated>2022-09-21T16:36:25.797Z</updated>
    
    <content type="html"><![CDATA[<h1>前言</h1><p>通过设置css样式表自定义网站的各类样式，包括底栏、滚动条、鼠标等</p><p>本篇设置基于Butterfly主题4.4.0版本</p><blockquote><p>参考这个大佬的<a href="https://www.bilibili.com/video/BV1ph411H7ng/?spm_id_from=pageDriver&amp;vd_source=8bba695aa4490252230ffd2e2cc0609b">视频</a></p></blockquote><h1>1. 准备工作</h1><p>在hexo博客目录的<code>source</code>文件夹中创建<code>css</code>文件夹，并在里面新建<code>style.css</code>样式表文档。</p><p>后面的所有样式就写在这个文档里面，网站会自动调用。</p><p>在修改特定样式前右键要修改的部位，点击“检查”会出现网站的样式代码，找到该位置的class名称，在<code>style.css</code>中输入class名称和相应的属性。</p><p><img src="https://mikepicture.oss-cn-chengdu.aliyuncs.com/picture/image-20220905121148860.png" alt="image-20220905121148860"></p><h1>2. 修改底栏footer</h1><p>将footer修改为“透明”，字体修改为“黑色”：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">#footer&#123;</span><br><span class="line">    background: transparent;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">#footer-wrap&#123;</span><br><span class="line">    color: #0d0d0d;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h1>3. 修改滚动条和鼠标</h1><p>样式文件参考<a href="https://github.com/fenshen000/HexoStaticFile/tree/master/src/css">github上的代码</a></p><p>在<code>style.css</code>样式表文档中添加代码：</p><figure class="highlight css"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">/* 鼠标样式 */</span></span><br><span class="line"><span class="selector-tag">body</span> &#123;</span><br><span class="line">    <span class="attribute">cursor</span>: <span class="built_in">url</span>(<span class="string">https://cdn.jsdelivr.net/gh/constown/HexoCustomFile/public/cursors/default.cur</span>),</span><br><span class="line">      default;</span><br><span class="line">  &#125;</span><br><span class="line">  <span class="selector-tag">a</span>,</span><br><span class="line">  <span class="selector-tag">img</span> &#123;</span><br><span class="line">    <span class="attribute">cursor</span>: <span class="built_in">url</span>(<span class="string">https://cdn.jsdelivr.net/gh/constown/HexoCustomFile/public/cursors/pointer.cur</span>),</span><br><span class="line">      default;</span><br><span class="line">  &#125;</span><br><span class="line"></span><br><span class="line">  <span class="comment">/* 滚动条样式 */</span></span><br><span class="line">::-webkit-scrollbar &#123;</span><br><span class="line">    <span class="attribute">width</span>: <span class="number">8px</span>;</span><br><span class="line">    <span class="attribute">height</span>: <span class="number">8px</span>;</span><br><span class="line">  &#125;</span><br><span class="line">  </span><br><span class="line">  ::-webkit-scrollbar-track &#123;</span><br><span class="line">    <span class="attribute">background-color</span>: <span class="built_in">rgba</span>(<span class="number">73</span>, <span class="number">177</span>, <span class="number">245</span>, <span class="number">0.2</span>);</span><br><span class="line">    <span class="attribute">border-radius</span>: <span class="number">2em</span>;</span><br><span class="line">  &#125;</span><br><span class="line">  </span><br><span class="line">  ::-webkit-scrollbar-thumb &#123;</span><br><span class="line">    <span class="attribute">background-color</span>: <span class="number">#49b1f5</span>;</span><br><span class="line">    <span class="attribute">background-image</span>: <span class="built_in">-webkit-linear-gradient</span>(</span><br><span class="line">      <span class="number">45deg</span>,</span><br><span class="line">      <span class="built_in">rgba</span>(<span class="number">255</span>, <span class="number">255</span>, <span class="number">255</span>, <span class="number">0.4</span>) <span class="number">25%</span>,</span><br><span class="line">      transparent <span class="number">25%</span>,</span><br><span class="line">      transparent <span class="number">50%</span>,</span><br><span class="line">      <span class="built_in">rgba</span>(<span class="number">255</span>, <span class="number">255</span>, <span class="number">255</span>, <span class="number">0.4</span>) <span class="number">50%</span>,</span><br><span class="line">      <span class="built_in">rgba</span>(<span class="number">255</span>, <span class="number">255</span>, <span class="number">255</span>, <span class="number">0.4</span>) <span class="number">75%</span>,</span><br><span class="line">      transparent <span class="number">75%</span>,</span><br><span class="line">      transparent</span><br><span class="line">    );</span><br><span class="line">    <span class="attribute">border-radius</span>: <span class="number">2em</span>;</span><br><span class="line">  &#125;</span><br><span class="line">  </span><br><span class="line">  ::-webkit-scrollbar-corner &#123;</span><br><span class="line">    <span class="attribute">background-color</span>: transparent;</span><br><span class="line">  &#125;</span><br><span class="line">  </span><br><span class="line">  ::-moz-selection &#123;</span><br><span class="line">    <span class="attribute">color</span>: <span class="number">#fff</span>;</span><br><span class="line">    <span class="attribute">background-color</span>: <span class="number">#49b1f5</span>;</span><br><span class="line">  &#125;</span><br></pre></td></tr></table></figure>]]></content>
    
    
    <summary type="html">Butterfly主题安装的进阶内容，自定义网页样式文件</summary>
    
    
    
    <category term="博客" scheme="https://qmike.top/categories/%E5%8D%9A%E5%AE%A2/"/>
    
    
  </entry>
  
  <entry>
    <title>VScode添加GitBash终端</title>
    <link href="https://qmike.top/posts/77940e6f.html"/>
    <id>https://qmike.top/posts/77940e6f.html</id>
    <published>2022-09-04T17:00:00.000Z</published>
    <updated>2022-09-21T16:36:25.797Z</updated>
    
    <content type="html"><![CDATA[<h1>前言</h1><p>VScode的终端中没有包含Git Bash，但预留了它的位置。本文将演示如何在设置中添加Git Bash终端。</p><blockquote><p>本文适用于VScode 1.71.0 版本及其它较新版本</p></blockquote><h1>操作步骤</h1><ol><li>文件-&gt;首选项-&gt;设置，打开设置</li><li>搜索<code>shell windows</code></li></ol><img src="https://mikepicture.oss-cn-chengdu.aliyuncs.com/picture/1.png" alt="1" style="zoom:50%;" /><ol start="3"><li>打开settings.json在里面输入代码如下：</li></ol><img src="https://mikepicture.oss-cn-chengdu.aliyuncs.com/picture/image-20220904170153395.png" alt="image-20220904170153395" style="zoom: 90%;" /><p>注意两点：</p><ul><li>settings.json中原先为<code>&quot;Git Bash&quot;</code>，需要删除空格，例如改为<code>&quot;GitBash&quot;</code></li><li>删除<code>&quot;GitBash&quot;</code>中的<code>&quot;Source&quot;</code>，只保留<code>&quot;path&quot;</code></li></ul><ol start="4"><li>保存重启vscode，按ctrl+~键打开终端，完成</li></ol><img src="https://mikepicture.oss-cn-chengdu.aliyuncs.com/picture/image-20220904170717210.png" alt="image-20220904170717210" style="zoom: 50%;" />]]></content>
    
    
    <summary type="html">在新版VScode的终端中添加GitBash，注明了相关的注意事项</summary>
    
    
    
    <category term="VScode" scheme="https://qmike.top/categories/VScode/"/>
    
    
  </entry>
  
  <entry>
    <title>Butterfly 进阶篇（一） - SEO 优化搜索引擎收录</title>
    <link href="https://qmike.top/posts/2a1b5a62.html"/>
    <id>https://qmike.top/posts/2a1b5a62.html</id>
    <published>2022-09-04T10:00:00.000Z</published>
    <updated>2022-09-21T16:36:25.797Z</updated>
    
    <content type="html"><![CDATA[<h1>前言</h1><p>我们必须把我们的网站推送到搜索引擎那， 否则别人除了输入我们的域名或者搜索文章，是没法发现我们的博文。</p><p>本篇设置基于Butterfly主题4.4.0版本</p><blockquote><p>本文主要参考<a href="https://blog.juanertu.com/archives/9013c8d8.html">Hexo 框架 (六)：SEO 优化及站点被搜索引擎收录设置 | juanertu.com</a></p><p>详细视频教程参考这个大佬的<a href="https://www.bilibili.com/video/BV1W34y1o7yK/?spm_id_from=333.788&amp;vd_source=8bba695aa4490252230ffd2e2cc0609b">相关视频</a></p></blockquote><h1>1. 查看是否被收录</h1><p>使用想要查找的搜索引擎，输入：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">site:你的网站</span><br><span class="line">比如我的：site:qmike.top</span><br></pre></td></tr></table></figure><h1>2. 永久化URL网址链接</h1><blockquote><p>我们可以发现 hexo 默认生成的文章地址路径是 【网站名称／年／月／日／文章名称】。</p><p>这种链接对搜索爬虫是很不友好的，第一它的 url 结构超过了三层，太深了。</p></blockquote><p>安装<code>abbrlink</code>插件：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm install hexo-abbrlink --save</span><br></pre></td></tr></table></figure><p>关于此插件的详细信息参见它的<a href="https://github.com/rozbo/hexo-abbrlink">官方文档</a>。作用是将文章的链接转换成数字后字母，即将博客网站的网页转成<code>.html</code>永久链接的格式，有利于搜索引擎的收录。</p><p>修改hexo根目录下<code>config.yml</code>中的<code>permalink</code>的值：</p><figure class="highlight yml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># URL</span></span><br><span class="line"><span class="comment">## Set your site url here. For example, if you use GitHub Page, set url as &#x27;https://username.github.io/project&#x27;</span></span><br><span class="line"><span class="attr">url:</span> <span class="string">https://qmike.top</span></span><br><span class="line"><span class="attr">permalink:</span> <span class="string">posts/:abbrlink.html</span></span><br></pre></td></tr></table></figure><p>在<code>config.yml</code>最底下添加<code>abbrlink config</code></p><figure class="highlight yml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># abbrlink config</span></span><br><span class="line"><span class="attr">abbrlink:</span></span><br><span class="line">  <span class="attr">alg:</span> <span class="string">crc32</span>      <span class="comment"># support crc16(default) and crc32</span></span><br><span class="line">  <span class="attr">rep:</span> <span class="string">hex</span>        <span class="comment"># support dec(default) and hex</span></span><br><span class="line"><span class="comment"># 不用添加其它代码</span></span><br></pre></td></tr></table></figure><p>配置完成后，网站的链接应该类似这样：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">https://qmike.top/posts/77940e6f.html        # 有.html后缀 </span><br></pre></td></tr></table></figure><h1>3. 站点地图</h1><p>站点地图即 <a href="https://baike.baidu.com/item/sitemap/6241567?fr=aladdin">sitemap</a>， 是一个页面，上面放置了网站上需要搜索引擎抓取的所有页面的链接。站点地图可以告诉搜索引擎网站上有哪些可供抓取的网页，以便搜索引擎可以更加智能地抓取网站。所以我们首先需要生成一个站点地图。</p><p>安装百度和 Google 的站点地图生成插件：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">npm install hexo-generator-baidu-sitemap --save</span><br><span class="line">npm install hexo-generator-sitemap --save</span><br></pre></td></tr></table></figure><p>然后来到hexo根目录配置文件<code>config.yml</code>，在下面添加：</p><figure class="highlight yml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 站点地图</span></span><br><span class="line"><span class="attr">sitemap:</span></span><br><span class="line">  <span class="attr">path:</span> <span class="string">sitemap.xml</span></span><br><span class="line"><span class="attr">baidusitemap:</span></span><br><span class="line">  <span class="attr">path:</span> <span class="string">baidusitemap.xml</span></span><br></pre></td></tr></table></figure><p>然后重新推送到服务器，访问如下 URL:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">https://你的域名/sitemap.xml</span><br><span class="line">https://你的域名/baidusitemap.xml</span><br></pre></td></tr></table></figure><p>看看网页中有没有出现代码。有的话就成功。</p><blockquote><p>注意代码中的域名是否和自己网站的一样，使用<code>github page</code>部署的网站，可能会出现域名不同的情况，需要之前完成token令牌密钥的验证，<a href="https://www.bilibili.com/video/BV1W34y1o7yK/?spm_id_from=333.788&amp;vd_source=8bba695aa4490252230ffd2e2cc0609b">视频</a>中有介绍。</p></blockquote><p>给你的 hexo 网站添加蜘蛛协议 robots.txt, 把 robots.txt 放在你的 hexo 站点的 source 文件下即可。</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"># hexo robots.txt</span><br><span class="line">User-agent: *</span><br><span class="line">Allow: /</span><br><span class="line"></span><br><span class="line">Sitemap: https://qmike.top/sitemap.xml</span><br><span class="line">Sitemap: https://qmike.top/baidusitemap.xml</span><br></pre></td></tr></table></figure><h1>4. 百度收录</h1><h2 id="提交网站">提交网站</h2><p>通过百度站长平台进行链接提交，增加网站的索引量。先去注册并登录：<a href="https://ziyuan.baidu.com/?castk=LTE=">百度站长平台</a></p><img src="https://mikepicture.oss-cn-chengdu.aliyuncs.com/picture/image-20220904180119988.png" alt="image-20220904180119988" style="zoom: 33%;" /><p>需要验证网站，我选择的是 https://，这根据你前面是否添加 SSL 证书来选择。并且我使用的是不带 www 的，看个人。然后到第三步，我使用的 HTML 标签验证。</p><img src="https://mikepicture.oss-cn-chengdu.aliyuncs.com/picture/image-20220904181206160.png" style="zoom: 80%;" /><p>把 <code>content</code> 中的字符串复制到主题配置文件<code>_config.butterfly.yml</code>中的 <code>baidu_site_verification</code> 。</p><figure class="highlight yml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># Baidu Webmaster tools verification.</span></span><br><span class="line"><span class="comment"># See: https://ziyuan.baidu.com/site</span></span><br><span class="line"><span class="attr">site_verification:</span></span><br><span class="line">  <span class="comment"># - name: google-site-verification</span></span><br><span class="line">  <span class="comment">#   content: xxxxxx</span></span><br><span class="line">  <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">baidu-site-verification</span></span><br><span class="line">    <span class="attr">content:</span>  <span class="comment"># 在这里填上面的字符串</span></span><br></pre></td></tr></table></figure><blockquote><p>需要将网站部署完后，再去百度站长平台完成HTML 标签验证</p></blockquote><h2 id="提交链接">提交链接</h2><p>百度站长平台的链接提交方式分为自动提交和手动提交两种，此处只讲自动提交，手动提交按照要求操作即可。</p><p><strong>主动推送</strong>最为快速的提交方式，是被百度收录最快的推送方式。主动推送可以通过安装插件实现：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm install hexo-baidu-url-submit --save</span><br></pre></td></tr></table></figure><p>然后在hexo根目录配置文件<code>_config.yml</code>中，添加：</p><figure class="highlight yml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 主动推送百度，被百度收录</span></span><br><span class="line"><span class="attr">baidu_url_submit:</span></span><br><span class="line">  <span class="attr">count:</span> <span class="number">10</span> <span class="comment"># 提交最新的10个链接</span></span><br><span class="line">  <span class="attr">host:</span> <span class="comment"># 百度站长平台中注册的域名</span></span><br><span class="line">  <span class="attr">token:</span> <span class="comment"># 秘钥，百度站长平台 &gt; 普通收录 &gt; 推送接口 &gt; 接口调用地址中token字段</span></span><br><span class="line">  <span class="attr">path:</span> <span class="string">baidu_urls.txt</span> <span class="comment"># 文本文档的地址， 新链接会保存在此文本文档里，不用改</span></span><br></pre></td></tr></table></figure><ul><li><p>host为自己网站的域名，例如我的为<code>https://qmike.top</code></p></li><li><p>token需要打开“普通收录–&gt;推送接口”进行查看</p><img src="https://mikepicture.oss-cn-chengdu.aliyuncs.com/picture/image-20220904212055771.png" alt="image-20220904212055771" style="zoom: 67%;" /></li></ul><p>其次，记得查看hexo根目录中<code>_config.yml</code> 文件中<code> url</code>的值， 必须包含是百度站长平台注册的域名。</p><p>最后，在<code>_config.yml</code> 文件中的 <code>deploy</code>加入新的<code>type</code>:</p><figure class="highlight yml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">deploy:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="attr">type:</span> <span class="string">git</span></span><br><span class="line">    <span class="attr">repository:</span> <span class="string">https://github.com/fenshen000/fenshen000.github.io.git</span></span><br><span class="line">    <span class="attr">branch:</span> <span class="string">main</span></span><br><span class="line">  <span class="bullet">-</span> <span class="attr">type:</span> <span class="string">baidu_url_submitter</span></span><br></pre></td></tr></table></figure><blockquote><p>这里是新建一个type，一定要注意这段代码里面各行的缩进值</p></blockquote><p>其主动推送的实现原理如下：</p><ul><li><p>新链接的产生， <code>hexo generate</code> 会产生一个文本文件，里面包含最新的链接</p></li><li><p>新链接的提交， <code>hexo deploy</code> 会从上述文件中读取链接，提交至百度搜索引擎</p><blockquote><p>不知道对于部署在Netlify上的网站有没有用，再查查资料</p></blockquote></li></ul><p>若要实现手动提交，则把下面的代码粘贴到百度站长平台的“手动收录”地址窗口即可：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">https://你的域名/sitemap.xml</span><br><span class="line">https://你的域名/baidusitemap.xml</span><br></pre></td></tr></table></figure><img src="https://mikepicture.oss-cn-chengdu.aliyuncs.com/picture/image-20220904213924274.png" alt="image-20220904213924274" style="zoom: 50%;" /><p>后续慢慢等收录吧，百度收录比较慢。</p><h1>5. 谷歌收录</h1><p>提交谷歌搜索引擎比较简单，在提交之前，我们依然可以使用 <code>site:域名</code> 查看网站是否被收录。进入<a href="https://developers.google.com/search#?modal_active=none">Google搜索中心</a>，登录你的谷歌账号。然后找到<a href="https://search.google.com/search-console/welcome">注册Search Console</a>(在“使用入门–&gt;SEO新手指南”中可以找到入口)，就直接输入你要收录的网站域名就行。</p><p>详细操作参考谷歌的<a href="https://support.google.com/webmasters/answer/9008080#html_verification&amp;zippy=%2C%E5%9F%9F%E5%90%8D%E6%8F%90%E4%BE%9B%E5%95%86%2Chtml-%E6%A0%87%E8%AE%B0%2Chtml-%E6%96%87%E4%BB%B6%E4%B8%8A%E4%BC%A0">官方指南</a></p><img src="https://mikepicture.oss-cn-chengdu.aliyuncs.com/picture/image-20220904220444787.png" alt="image-20220904220444787" style="zoom: 67%;" /><p>选择第一个或者第二个都可以的，我这里两个都选择了。</p><p>“网址前缀”验证很简单，输入网址<code>https://qmike.top</code>即可直接验证。“网域”验证较为复杂，点击“继续”后，操作如下：</p><blockquote><p>可以添加所有的网址变体，包括https，http，www和非www变体</p></blockquote><img src="https://mikepicture.oss-cn-chengdu.aliyuncs.com/picture/image-20220904221520736.png" alt="image-20220904221520736" style="zoom:67%;" /><p>打开你的域名提供商网站，在里面添加“解析设置”。以阿里云为例：</p><ul><li><p>打开域名的“解析设置”，点击“添加记录”</p><img src="https://mikepicture.oss-cn-chengdu.aliyuncs.com/picture/image-20220904224419062.png" alt="image-20220904224419062" style="zoom: 40%;" /></li><li><p>“记录类型”选择“TXT”，“主机记录”选择“@”，记录值写入上面复制的TXT记录值</p><img src="https://mikepicture.oss-cn-chengdu.aliyuncs.com/picture/image-20220904225057831.png" alt="image-20220904225057831" style="zoom: 67%;" /></li><li><p>重新部署后返回谷歌页面进行验证，可能需要等待一段时间。</p></li></ul><img src="https://mikepicture.oss-cn-chengdu.aliyuncs.com/picture/20200403223509.png" alt="20200403223509" style="zoom: 80%;" /><p>两种方式，你可以下载个 HTML 文件然后放在站点目录下的 <code>source</code> 中，然后推送到服务器。或者把 <code>content</code> 中的字符串复制到主题配置文件<code>_config.butterfly.yml</code>对应内容中：</p><figure class="highlight yml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">site_verification:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">google-site-verification</span></span><br><span class="line">    <span class="attr">content:</span> <span class="comment"># 在这里填上面的字符串</span></span><br><span class="line">  <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">baidu-site-verification</span></span><br><span class="line">    <span class="attr">content:</span> <span class="string">XXXXX</span></span><br></pre></td></tr></table></figure><blockquote><p>部署网站到Netlify，一天时间便会自动收录</p></blockquote><h1>6. 必应收录</h1><p>必应收录也是很简单，点击<a href="https://www.bing.com/webmasters/about">必应站长</a>。先注册登录，必应收录有两种方式，一种使用刚刚谷歌导入过去，第二种是就是自己添加 URL</p><h1>7. 其它收录</h1><p>其他搜索引擎的收录都很类似，就不一一赘述了。</p><h1>8. 添加nofollow标签</h1><p>给非友情链接的出站链接添加「nofollow」标签，nofollow 标签是由谷歌领头创新的一个「反垃圾链接」的标签，并被百度、yahoo 等各大搜索引擎广泛支持，引用 nofollow 标签的目的是：用于指示搜索引擎不要追踪（即抓取）网页上的带有 nofollow 属性的任何出站链接，以减少垃圾链接的分散网站权重。</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm install hexo-filter-nofollow --save</span><br></pre></td></tr></table></figure><p>再在hexo根目录的<code>_config.yml</code> 中添加配置，将 <code>nofollow</code> 设置为 <code>true</code>：</p><figure class="highlight yml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">nofollow:</span></span><br><span class="line">  <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">field:</span> <span class="string">site</span></span><br><span class="line">  <span class="attr">exclude:</span> <span class="string">&#x27;&#x27;</span></span><br></pre></td></tr></table></figure><p>这样，例外的链接将不会被加上 <code>nofollow</code> 属性。</p>]]></content>
    
    
    <summary type="html">Butterfly主题安装的进阶内容，用过SEO完成优化搜索引擎对个人博客的收录</summary>
    
    
    
    <category term="博客" scheme="https://qmike.top/categories/%E5%8D%9A%E5%AE%A2/"/>
    
    
  </entry>
  
  <entry>
    <title>Butterfly 主题折腾笔记 - 进阶篇功能预设（更新中)</title>
    <link href="https://qmike.top/posts/5862a9c7.html"/>
    <id>https://qmike.top/posts/5862a9c7.html</id>
    <published>2022-09-03T10:00:00.000Z</published>
    <updated>2022-09-21T16:36:25.793Z</updated>
    
    <content type="html"><![CDATA[<h1>前言</h1><p>本篇是对于<a href="">基础篇</a>的拓展，写一下自己魔改这个主题的过程（毕竟个性化的才是最好的），万一以后遇到啥问题也可以返回来查一下可能的问题所在。<br>魔改是一个非常折腾+耗时间的过程，或许本文会一直更新下去吧~（笑）</p><blockquote><p>心中默念一百遍：宁缺毋滥，宁缺毋滥…</p></blockquote><h1>目前想实现的功能</h1><ul><li>修改网页预加载画面</li><li>日期、时间、天气时钟</li><li>看板娘</li><li>添加其它图标库</li><li>一图流、视频流全局背景+全局渐变</li><li>更换字体（建立自己的字体库）</li><li>公告跟随文章自动更新</li><li>footer自定义，如添加链接、更换颜色(设置图片，或者透明背景)</li><li>“归档”页面标题和top_img的设置（总是出问题）</li><li>更换网站logo</li><li>评论区</li><li>网站SEO优化</li><li>白天、黑夜模式转换特效/网站背景变换</li><li>网站数据统计（类似github以及图标格式，想置于about页面）</li></ul><h1>可参考网址</h1><p><a href="https://azure0202.github.io/2021/10/03/Butterfly%E8%87%B4%E7%9F%A5%E8%AE%B0/">https://azure0202.github.io/2021/10/03/Butterfly致知记/</a></p><p><a href="https://zfe.space/categories/%E6%95%99%E7%A8%8B">https://zfe.space/categories/教程</a></p><p><a href="https://blog.imzjw.cn/posts/b74f504f/">https://blog.imzjw.cn/posts/b74f504f/</a></p><p><a href="https://akilar.top/posts/5b8f515f/">https://akilar.top/posts/5b8f515f/</a></p><p><a href="https://guole.fun/">Guo Le’s Blog</a></p><p><a href="https://blog.juanertu.com/">你真是一个美好的人类 - ConstOwn (juanertu.com)</a></p><p><a href="https://anzhiy.cn/">安知鱼 - 生活明朗 万物可爱 (anzhiy.cn)</a></p><p><a href="https://yisous.xyz/">LYXの小破站 (yisous.xyz)</a></p>]]></content>
    
    
    <summary type="html">Butterfly主题安装的进阶内容，主要记录安装文档描述以外的修改，实现一些魔改内容</summary>
    
    
    
    <category term="博客" scheme="https://qmike.top/categories/%E5%8D%9A%E5%AE%A2/"/>
    
    
  </entry>
  
  <entry>
    <title>Anaconda、Pycharm、Python使用方法整理(windows 10)</title>
    <link href="https://qmike.top/posts/be8ba79e.html"/>
    <id>https://qmike.top/posts/be8ba79e.html</id>
    <published>2022-09-02T17:17:00.000Z</published>
    <updated>2022-09-22T00:17:00.000Z</updated>
    
    <content type="html"><![CDATA[<h1>前言</h1><p>本文记录安装Anaconda和Pycharm的全过程，以及遇到的一些问题和解决方法</p><p>安装配置顺序为：纯Python/Anaconda–&gt;Pycharm</p><h1>Anaconda篇</h1><blockquote><p>Anaconda对于python初学者而言及其友好，相比单独安装python主程序，选择Anaconda可以帮助省去很多麻烦，Anaconda里添加了许多常用的功能包，如果单独安装python，这些功能包则需要一条一条自行安装，在Anaconda中则不需要考虑这些，同时Anaconda还附带捆绑了两个非常好用的交互式代码编辑器（Spyder、Jupyter notebook）。</p><p><a href="https://so.csdn.net/so/search?q=Conda&amp;spm=1001.2101.3001.7020">Conda</a>是一个开源的包、环境管理器，可以用于在同一个机器上安装不同版本的软件包及其依赖，并能够在不同的环境之间切换。</p><p><strong>几个重要注意事项（可以点击跳转至相关对应案例！！！）</strong>：</p><ul><li><a href="#%E8%B7%B3%E8%BD%AC1">安装Anaconda时，不要选择“All uers”，而应该选择当前用户</a></li><li><a href="#%E8%B7%B3%E8%BD%AC2">要习惯用“管理员权限”打开CMD，在输入相关命令，可以避免由于文件夹权限不足等受到限制</a></li></ul></blockquote><h2 id="1-安装及初始环境配置">1. 安装及初始环境配置</h2><h3 id="1-1-下载地址">1.1 下载地址</h3><p>可以通过<a href="https://www.anaconda.com/products/distribution">Anaconda官网</a>下载，不过速度一般；另外可以通过<a href="https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/">清华镜像</a>进行下载</p><h3 id="1-2-配置环境变量">1.2 配置环境变量</h3><p>如果是windows的话需要去 控制面板\系统和安全\系统\高级系统设置\环境变量\用户变量\PATH 中添加 anaconda的安装目录的Scripts文件夹，例如默认安装路径C:\ProgramData\Anaconda3\Scripts，看个人安装路径不同需要自己调整。</p><p>之后就可以打开命令行(最好用管理员模式打开) 输入 <code>conda --version</code>，如果输出conda 4.5.4之类的就说明环境变量设置成功了.</p><p>为了避免可能发生的错误，需要在命令行输入<code>conda upgrade --all</code> 先把所有工具包进行升级</p><p><strong>注意以下几点</strong>：</p><p>除了在“用户变量/PATH”中添加，也可以在“系统变量/PATH”中添加Scripts文件夹，重点在于需要将该路径置于PATH变量下：</p><img src="https://mikepicture.oss-cn-chengdu.aliyuncs.com/picture/image-20220808102807618.png" alt="image-20220808102807618" style="zoom: 80%;" /><p>但需要注意的是，<strong>一定不能直接在用户变量/系统变量中新建一个变量</strong>，路径指定为Scripts文件夹：</p><img src="https://mikepicture.oss-cn-chengdu.aliyuncs.com/picture/image-20220808104319394.png" alt="image-20220808104319394" style="zoom:80%;" /><p>具体原因参考用户变量和系统变量的区别：</p><ul><li>环境变量没有区分大小写，例如path跟PATH是一样的</li><li>系统变量对所有用户有效</li><li>用户变量只对当前用户有效</li><li>用户变量与系统变量，名称是变量，值是里面的内容，也就是通过变量存储了想要存储的内容，方便调用</li><li>系统变量与用户变量的PATH：告诉系统可执行文件放在什么路径（平常执行程序的路径，<em><strong>要放在PATH里面，不能新建一个变量，cmd会提示“不是内部或外部命令，或者不是可执行程序”</strong></em>）</li><li>windows系统在执行用户命令时，若用户未给出文件的绝对路径，则首先在当前目录下寻找相应的可执行文件、批处理文件等</li><li>如果当前目录找不到对应文件名的程序，在系统变量的PATH的路径中，依次寻找对应的可执行程序文件（查找顺序是按照路径的录入顺序从左往右寻找的，最前面一条的优先级最高，如果找到程序就停止寻找，后面的路径不再执行）</li><li>如果系统变量的PATH的路径找不到，再到用户变量的PATH路径中寻找（如果系统变量和用户变量的PATH中同时包含了同一个命令，则优先执行系统变量PATH中的命令）</li><li><em><strong>每次新加了命令以后，要确定保存了。再重启CMD</strong></em>，否则命令不生效的</li><li>在CMD里要输出环境变量 ECHO %变量名%</li></ul><h3 id="1-3-同时自动安装的程序">1.3 同时自动安装的程序</h3><p>在 Windows 上，会随 Anaconda 一起安装一批应用程序：</p><ul><li>Anaconda Navigator，它是用于管理环境和包的 GUI</li><li>Anaconda Prompt 终端，它可让你使用命令行界面来管理环境和包</li><li>Spyder，它是面向科学开发的 IDE</li></ul><p>为了避免报错，推荐在默认环境下更新所有的包。打开 Anaconda Prompt （或者 Mac 下的终端），键入：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">conda upgrade --all</span><br></pre></td></tr></table></figure><p>并在提示是否更新的时候输入 y（Yes）以便让更新继续。初次安装下的软件包版本一般都比较老旧，因此提前更新可以避免未来不必要的问题。</p><blockquote><p>若不更新，后续使用时可能会出现报错</p></blockquote><h2 id="2-配置镜像地址-更换为清华镜像">2. 配置镜像地址(更换为清华镜像)</h2><p>修改配置文件下载地址，<strong>修改为清华镜像</strong>：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">conda config --add channels http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/</span><br><span class="line">conda config --add channels http://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/</span><br><span class="line">conda config --add channels http://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/msys2/</span><br><span class="line">conda config --set show_channel_urls yes</span><br></pre></td></tr></table></figure><blockquote><p>注意以下两点：</p><ul><li>在CMD中输入以上代码后，无需按照网上某些教程修改本地配置文件<code>C:\用户\用户名\.condarc</code>，已经自动修改好</li><li>此处清华镜像地址应<strong>以http开头</strong>，而不是原先的https，否则会因为SSL验证无法连接，原因及其它解决方法见<a href="https://blog.csdn.net/kxqt233/article/details/121167753">清华源连接失败原因与解决</a></li></ul></blockquote><p>再次在 Anaconda Prompt 中执行<code>conda upgrade --all</code>更新即可</p><p>查看当前配置命令:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">conda config --show</span><br></pre></td></tr></table></figure><p>配置完后重启一下即可成功</p><h2 id="3-安装-卸载第三方包">3. 安装/卸载第三方包</h2><p>需要安装所需的第三方包时，在CMD中输入以下指令来安装requests包：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">conda install requests_name</span><br></pre></td></tr></table></figure><p>或者</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">pip install requests_name</span><br></pre></td></tr></table></figure><blockquote><p>PyPi地址在国外，因为有墙的原因所以有些地区使用pip安装第三方库的时候会出现下载慢甚至严重的无法访问导致安装失败。通过更换pip镜像源为国内地址可以解决上述问题。这里使用<strong>豆瓣的镜像源</strong>为例：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">pip install requests_name -i https://pypi.douban.com/simple</span><br></pre></td></tr></table></figure></blockquote><p>以安装numpy包为例，安装完成后可验证是否安装成功：</p><p>在CMD/Anaconda Powershell Prompt中输入python进入解释器中，输入<code>import numpy</code>，若不报错即安装成功。可输入<code> help(numpy)</code>查看该包的详细信息。</p><img src="https://mikepicture.oss-cn-chengdu.aliyuncs.com/picture/image-20220808175316987.png" alt="image-20220808175316987"  /><blockquote><p>目前存在两种情况***（暂且无法解释）***：</p><ul><li><p>若在Anaconda Powershell Prompt中安装第三方包，则只能在Anaconda Powershell Prompt中输入<code>import numpy</code>显示安装成功，在CMD中则会显示“未安装numpy”。</p><blockquote><p>有一种解释是：</p><p>CMD基本上都是默认在系统盘上的操作，而对于Anaconda自带的命令窗口，所有可以在CMD中运行的都可以在这里运行，只不过文件的路径改变了（改变为Anaconda的安装目录下）。例如在这两个命令窗口中分别输入ipython.exe notebook，默认的文件.ipynb存储在不同的位置。</p><p><img src="https://mikepicture.oss-cn-chengdu.aliyuncs.com/picture/201801041523279.png" alt="示例"></p></blockquote></li><li><p>通过<code>conda install numpy</code>无法安装numpy包，而通过<code>pip install numpy</code>可以成功安装</p><blockquote><p>可能是conda中不包含numpy包？</p></blockquote></li></ul></blockquote><h3 id="附：pip和conda的区别"><strong>附：pip和conda的区别</strong></h3><blockquote><p>来自Anaconda<a href="https://www.anaconda.com/blog/understanding-conda-and-pip">官方文章</a></p></blockquote><p>​Conda和pip通常被认为是几乎相同的。尽管这两个工具的某些功能重叠，但它们是经过设计的，并用于不同的目的。<a href="https://pip.pypa.io/en/stable/">Pip</a>是 Python Packaging Authority 推荐的源自<a href="https://pypi.org/">Python 包索引</a>的用于安装包的工具。Pip 用于安装Python软件包，例如wheel或源代码。后者可能要求系统在调用pip成功之前安装兼容的编译器和可能的库。</p><p>​<a href="https://conda.io/docs/">Conda</a>是一个跨平台的包和环境管理器，从<a href="https://repo.anaconda.com/">Anaconda 存储库</a>从<a href="https://anaconda.org/">Anaconda Cloud</a>安装和管理Conda包。Conda 包是二进制文件，永远不需要使用编译器来安装它们。此外，<strong>conda包不限于 Python 软件，它们还可能包含 C 或 C++ 库、R 包或任何其他软件</strong>。这突出了 conda 和 pip 之间的关键区别：Pip 安装 Python 包，而 conda 安装可能包含以任何语言编写的软件包。例如，<strong>在使用 pip 之前，必须通过系统包管理器或下载exe程序文件来安装 Python 解释器。另一方面，Conda 可以直接安装 Python 包和 Python 解释器</strong>。</p><p>​这两个工具之间的另一个关键区别是<strong>conda能够创建可以包含不同版本 Python 和/或 安装在其中的包的隔离环境</strong>。这在使用数据科学工具时非常有用，因为不同的工具可能包含相互冲突的要求，因此不可以全部安装到单个环境中。相反的，<strong>Pip 没有对环境的内置支持，而是依赖于其他工具，例如<a href="https://virtualenv.pypa.io/en/latest/">虚拟环境(virtualenv)</a>或者<a href="https://docs.python.org/3/library/venv.html">venv</a>创建孤立的环境</strong>。工具例如<a href="https://pipenv.readthedocs.io/en/latest/">pipenv</a>，<a href="https://poetry.eustace.io/">poetry</a>， 和<a href="https://github.com/ofek/hatch">hatch</a>用于包装 pip 和 virtualenv，以提供一个统一的方法来处理这些环境。</p><p>​Pip 和 conda 在实现环境中的依赖关系方面也有所不同。安装包时，pip 在递归的串行循环中安装依赖项。没有努力确保同时满足所有包的依赖关系。如果较早按顺序安装的软件包相对于较晚安装的软件包具有不兼容的依赖版本，这可能会导致环境以某种方式被破坏。相比之下，conda 使用可满足性 (SAT) 求解器来验证是否满足环境中安装的所有软件包的所有要求。此检查可能需要额外的时间，但有助于防止创建损坏的环境。只要有关依赖项的包元数据是正确的，conda 就可以预见地产生工作环境。</p><p>​鉴于 conda 和 pip 之间的相似性，一些人尝试结合这些工具来创建数据科学环境也就不足为奇了。<strong>将 pip 与 conda 结合的一个主要原因是可能存在一个或多个包只能通过 pip 安装</strong>。Anaconda 存储库中提供了 1,500 多个软件包，包括最流行的数据科学、机器学习和 AI 框架。这些，以及 Anaconda 云上提供的数千个额外的包，包括<a href="https://conda-forge.org/">conda-forge</a>和<a href="https://bioconda.github.io/">bioconda</a>, 可以使用 conda 安装。<strong>尽管有这么多的包集合，但Anaconda 存储库与 PyPI 上超过 150,000 个包相比，它仍然可能是不足的</strong>。可能存在没有被 conda package提供的软件包，但它可以在 PyPI 上使用，并且可以使用 pip 安装。<em><strong>在这些情况下，应该尝试同时使用 conda 和 pip</strong></em>。</p><table><thead><tr><th style="text-align:center"></th><th style="text-align:center">Conda</th><th style="text-align:center">Pip</th></tr></thead><tbody><tr><td style="text-align:center">manages</td><td style="text-align:center">binaries</td><td style="text-align:center">wheel or source</td></tr><tr><td style="text-align:center">can require compilers?</td><td style="text-align:center">no</td><td style="text-align:center">yes</td></tr><tr><td style="text-align:center">package types</td><td style="text-align:center">any</td><td style="text-align:center">Python only</td></tr><tr><td style="text-align:center">create environment</td><td style="text-align:center">yes, built-in</td><td style="text-align:center">no, requires virtualenv or venv</td></tr><tr><td style="text-align:center">dependency checks</td><td style="text-align:center">yes</td><td style="text-align:center">no</td></tr></tbody></table><blockquote><p>注：在安装Anaconda后，会自行安装对应版本的python（Anaconda的安装目录下），无需重新单独安装python</p></blockquote><h2 id="4-管理虚拟环境（基于命令行窗口）">4. 管理虚拟环境（基于命令行窗口）</h2><p>用anaconda来创建我们一个个独立的python环境。接下来的例子都是在命令行操作的：</p><blockquote><p>可以在CMD或Anaconda Powershell Prompt直接输入python试试, 这样会进入base环境的python解释器, 如果你把原来环境中的python环境去除掉会更能体会到, 这个时候在命令行中使用的已经不是你原来的python而是base环境下的python.而命令行前面也会多一个(base) 说明当前我们处于的是base环境下。</p></blockquote><p><strong>（1）创建虚拟环境：</strong></p><p>当不满足一个base环境时，可以为自己的程序安装单独的虚拟环境。创建一个<strong>名称为python34</strong>的虚拟环境并指定python版本为3.4（这里conda会自动找3.4中最新的版本下载）：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">conda create -n python34 python=3.4</span><br></pre></td></tr></table></figure><p>或者</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">conda create --name python34 python=3.4</span><br></pre></td></tr></table></figure><p><strong>（2）切换环境：</strong></p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">activate environment_name</span><br></pre></td></tr></table></figure><p>如果忘记了名称我们可以先用<code>conda env list</code>去查看所有的环境。</p><p><strong>（3）为创建的环境安装/卸载包：</strong></p><p>新创建的环境除了python自带的一些官方包之外是没有其他包的, 一个比较干净的环境。我们可以试试在虚拟环境下，先输入python打开python解释器，然后输入<code>import requests</code>，会报错找不到requests包，这是很正常的。按照需求，对新建的环境安装所需包即可。</p><p><em>安装包</em>：（安装完成之后我们再输入python进入解释器并<code>import requests</code>, 这次一定就是成功的了）</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">conda install requests_name</span><br></pre></td></tr></table></figure><p>或者</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">pip install requests_name</span><br></pre></td></tr></table></figure><p><em>卸载包</em>：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">conda remove requests_name</span><br></pre></td></tr></table></figure><p>或者</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">pip uninstall requests_name</span><br></pre></td></tr></table></figure><p><strong>（4）卸载环境：</strong></p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">conda remove --name environment_name --all</span><br></pre></td></tr></table></figure><p><strong>（5）环境相关指令总结：</strong></p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br></pre></td><td class="code"><pre><span class="line"># 创建一个名为faultcode的环境，指定Python版本是3.9（不用管是3.9.x，conda会为我们自动寻找3.9.x中的最新版本）</span><br><span class="line"># 创建好的环境可以在Anaconda Navigator--environment中查看</span><br><span class="line">conda create --name faultcode python=3.9</span><br><span class="line"># 或者</span><br><span class="line">conda create -n faultcode python=3.9</span><br><span class="line"> </span><br><span class="line"> </span><br><span class="line"># 安装好后，使用activate切换到该环境</span><br><span class="line">activate faultcode                 # for Windows</span><br><span class="line">source activate faultcode          # for Linux &amp; Mac</span><br><span class="line"></span><br><span class="line"> </span><br><span class="line"># 激活后，会发现terminal输入的地方多了faultcode的字样，实际上，此时系统做的事情就是把默认2.7环境从PATH中去除，再把3.9对应的命令加入PATH</span><br><span class="line"># 此时，再次输入</span><br><span class="line">python --version</span><br><span class="line"># 可以得到`Python 3.9.5 :: Anaconda 4.1.1 (64-bit)`，即系统已经切换到了3.9的环境</span><br><span class="line"># 在该虚拟环境下便可以像base环境中一样进行设置、安装所需的包等操作</span><br><span class="line"> </span><br><span class="line"> </span><br><span class="line"># 如果想离开这个环境，返回默认的环境，运行</span><br><span class="line">deactivate                         # for Windows</span><br><span class="line">source deactivate                  # for Linux &amp; Mac</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"># 删除一个已有的环境</span><br><span class="line">conda remove --name faultcode --all</span><br><span class="line"># 或者</span><br><span class="line">conda remove -n faultcode --all</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"># 列出conda管理的所有环境</span><br><span class="line"># 如果忘记了环境的名称，可以列出你创建的所有环境。你会看到环境的列表，而当前所在环境的旁边会有一个星号。</span><br><span class="line"># 默认的环境（即当你不在选定环境中时使用的环境）名为 root。</span><br><span class="line">conda env list</span><br><span class="line"># 或者</span><br><span class="line">conda info -e</span><br></pre></td></tr></table></figure><blockquote><p>anaconda所谓的创建虚拟环境其实就是安装了一个真实的python环境, 只不过我们可以通过activate，conda等命令去随意的切换我们当前的python环境, 用不同版本的解释器和不同的包环境去运行python脚本。</p></blockquote><p><strong>（6）其它的常用命令：</strong></p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line">conda info                   # 列出Anaconda的所有信息，包括conda version、python version、package cache、envs directories等</span><br><span class="line"></span><br><span class="line">conda config --show          # 查看Anaconda的详细配置信息</span><br><span class="line"></span><br><span class="line">conda create --help          # 查看与create相关的help文档信息</span><br><span class="line"></span><br><span class="line">activate                     # 切换到base环境</span><br><span class="line"></span><br><span class="line">conda list                   # 列出当前环境的所有包</span><br><span class="line"></span><br><span class="line">conda install requests_name  # 安装requests_name包</span><br><span class="line"></span><br><span class="line">conda remove requests_name   # 卸载requets_name包</span><br><span class="line"></span><br><span class="line">conda update requests_name   # 更新requests包</span><br><span class="line"></span><br><span class="line">conda env export &gt; environment.yaml   # 导出当前环境的包信息</span><br><span class="line"></span><br><span class="line">conda env create -f environment.yaml  # 用配置文件创建新的虚拟环境</span><br></pre></td></tr></table></figure><h2 id="5-修改Anaconda虚拟环境的创建路径">5. 修改Anaconda虚拟环境的创建路径</h2><p>首先，明确如何查看Anaconda虚拟环境的创建路径</p><p>输入以下命令</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">conda info</span><br></pre></td></tr></table></figure><p>或者</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">conda config --show </span><br></pre></td></tr></table></figure><p>查看虚拟环境创建位置</p><p><img src="https://mikepicture.oss-cn-chengdu.aliyuncs.com/picture/image-20220812181036188.png" alt="image-20220812181036188"></p><blockquote><p>可见虚拟环境的默认创建路径为C:\Users\User_name\.conda\envs*(也有可能直接默认Anaconda安装目录下的envs文件夹)*</p><p>如果按照[第四节](#4. 管理虚拟环境（基于命令行窗口）)方法创建的虚拟环境，由于使用<code>-n</code>或者<code>--name</code>命令，会将虚拟安装在C盘默认安装路径的envs目录下。</p><p>为避免造成C盘空间被占用，采用以下两种方法修改虚拟环境安装路径到想要的文件夹。</p></blockquote><h3 id="5-1-不修改默认创建路径">5.1 不修改默认创建路径</h3><p>以在G:\Anaconda\envs中创建名为faultcode的虚拟环境为例，输入相应的命令：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">conda create --prefix=G:\Anaconda\envs\faultcode python=3.9</span><br></pre></td></tr></table></figure><blockquote><p>注意：</p><p>路径G:\Anaconda\envs是目标文件夹，faultcode是</p></blockquote><p>在这个命令中，路径G:\Anaconda\envs是目标文件夹(若没有则自动建立)，faultcode是需要创建的虚拟环境名称。创建完成后，虚拟环境的全称应<strong>包含整个路径</strong>，为<code>G:\Anaconda\envs\faultcode</code>，后续在调用时需要将它完整输入。激活指定路径下的虚拟环境的命令如下：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">activate G:\Anaconda\envs\faultcode</span><br></pre></td></tr></table></figure><p>想要删除指定路径下的虚拟环境，使用如下的命令：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">conda remove --prefix=G:\Anaconda\envs\faultcode --all</span><br></pre></td></tr></table></figure><p>此外，在base环境中<strong>直接</strong>为虚拟环境安装软件包的指令为：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">conda install -prefix=G:\Anaconda\envs\faultcode package_name</span><br></pre></td></tr></table></figure><p>注意，如果在默认路径下安装的虚拟环境添加包，则命令是</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">conda install -n faultcode package_name</span><br></pre></td></tr></table></figure><h3 id="5-2-修改默认创建路径">5.2 修改默认创建路径</h3><p>方法一比较麻烦，需要随时记住完整路径，可以考虑直接修改默认创建路径。</p><p>对应两种解决方式：一种是通过添加dir来替换默认路径，一种是直接配置c盘路径下的.condarc文件</p><p><span id="跳转1">需要注意的是，若按照网上常规的方法，例如<a href="https://blog.csdn.net/weixin_44622686/article/details/125011729">Anaconda更改虚拟环境安装位置 - CSDN</a>，虽然貌似已经修改了默认创建路径，但实际操作后可能会发现仍然是创建到原先的C盘路径，<strong>出现这种情况的原因是在安装Anaconda时选择的是All User，而不是Just Me</strong>。</span></p><p>上述两种“解决方法”一定是在<strong>安装Anaconda时选择的是Just me</strong>，否则无法生效！！！</p><blockquote><p>当然，如果不小心安装时选择了All User，也可以解决：</p><ul><li><span id="跳转2">以管理员身份运行CMD，再运行命令</span></li></ul><p>（这样也可以解决<code>conda upgrade all</code>时由于anaconda文件夹权限不足，部分软件包无法安装的情况）</p><ul><li>修改anaconda安装文件夹的权限，属性-&gt;安全-&gt;Users 权限全部允许（有可能无法生效）</li></ul></blockquote><h4 id="5-2-1-通过添加dir来替换默认路径">5.2.1 通过添加dir来替换默认路径</h4><p>在CMD中输入<code>conda config --show</code>后，会发现虚拟环境目录envs_dirs有多条，其实默认我们会先使用第一个目录，要通过修改配置来重新确定默认环境路径。首先明确修改配置的语法：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">conda config --add key value       #添加语法</span><br><span class="line">conda config --remove key value    #删除语法</span><br></pre></td></tr></table></figure><p>其中，key为 envs_dirs、pkgs_dirs等，value为key对应的值。</p><p>这里如果只保留想用的G:\Anaconda\envs路径，将其它目录全部删除，例如：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">conda config --remove envs_dirs dir(虚拟环境路径)</span><br></pre></td></tr></table></figure><p>则会报下面的错误：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">CondaKeyError: ‘pkgs_dirs’: key ‘pkgs_dirs’ is not in the config file</span><br></pre></td></tr></table></figure><p>原因是这个只能删除在我们user路径下的.condarc文件的内容，及我们用户配置的内容。所以我们不能通过删除来解决。只能通过添加路径替换默认路径解决。</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">conda config --add envs_dirs dir（路径）</span><br></pre></td></tr></table></figure><blockquote><p>若是添加原来已经有的路径，则会发现这个路径变成了环境目录的第一个，可以用来调整envs_dirs安装顺序</p></blockquote><h4 id="5-2-2-直接配置c盘路径下的-condarc文件">5.2.2 直接配置c盘路径下的.condarc文件</h4><p>在用户路径下修改.condarc，在<code>C:\Users\User_name\.condarc</code>下</p><p>添加下面配置：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line">channels:</span><br><span class="line">  - http://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/</span><br><span class="line">  - http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/</span><br><span class="line">  - http://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/msys2/</span><br><span class="line">  - defaults</span><br><span class="line">show_channel_urls: true</span><br><span class="line">envs_dirs:</span><br><span class="line">  - G:\Anaconda\envs</span><br><span class="line">pkgs_dirs:</span><br><span class="line">  - G:\Anaconda3\pkgs</span><br><span class="line">  - C:\Users\User_name\.conda\envs</span><br><span class="line">  - C:\Users\User_name\AppData\Local\conda\conda\envs</span><br></pre></td></tr></table></figure><p>添加了清华源、同时改了envs_dirs、pkgs_dirs。</p><h1>Pycharm篇</h1><blockquote><p>注：Anaconda应在Pycharm之前安装，可能会方便后续的设置</p></blockquote><h2 id="1-配置环境及安装第三方库">1. 配置环境及安装第三方库</h2><h3 id="1-1-基于纯python环境">1.1 基于纯python环境</h3><h4 id="配置Python环境"><em><strong>配置Python环境</strong></em></h4><p>打开软件，通过路径【File】→【Settings】→【Project】→【Project Interpreter】来到我们配置Python环境的界面。一般情况下，这里是一片空白。</p><img src="https://mikepicture.oss-cn-chengdu.aliyuncs.com/picture/1.webp" alt="1" style="zoom:90%;" /><p>点击小齿轮，在弹出的选项中点击【Show All】，然后再弹出的窗口中点击【+】号，进入配置页面。</p><p><img src="https://mikepicture.oss-cn-chengdu.aliyuncs.com/picture/2.webp" alt="2"></p><p>这里可以选择【New Environment】或【Existing Environment】，建议选择【Existing Environment】，然后根据自己安装Python的路径，找到Python.exe，然后勾选【make avaliable to all projects】，将该Python环境应用到所有的项目，最后点击【OK】。</p><p><img src="https://mikepicture.oss-cn-chengdu.aliyuncs.com/picture/3.webp" alt="3"></p><p>这个时候我们会来到这个页面，这里是我们当前配置的Python环境中包含的库信息，点击【OK】，即可完成我们的Python环境配置。</p><p><img src="https://mikepicture.oss-cn-chengdu.aliyuncs.com/picture/4.webp" alt="4"></p><h4 id="安装第三方库"><em><strong>安装第三方库</strong></em></h4><p>安装第三方库，我们有两种方法，第一种方法是使用<code>pip</code>命令。比如我们要安装lxml库，打开命令提示符，输入<code>pip install lxml</code>，然后回车，等待一会即可完成。</p><p><img src="https://mikepicture.oss-cn-chengdu.aliyuncs.com/picture/5.webp" alt="5"></p><p>这个时候，我们再回到Pycharm的环境配置页面，可以看到lxml库已经成功导入。</p><p><img src="https://mikepicture.oss-cn-chengdu.aliyuncs.com/picture/6.webp" alt="6"></p><p>第二种方法，我们可以直接来到我们的Pycharm的环境配置页面，点击【+】号，然后搜索并选中我们需要的第三方库，点击【Install Package】即可进行安装。</p><p><img src="https://mikepicture.oss-cn-chengdu.aliyuncs.com/picture/7.webp" alt="7"></p><h4 id="注意事项"><em><strong>注意事项</strong></em></h4><p>1.我们在配置Python环境的时候，如果选择【New Environment】，需要<strong>将【location】路径设置成一个空白文件夹</strong>，然后找到我们安装的Python，这个时候，Pycharm会将已安装的Python复制到这个空白文件夹中，<em><strong>构建一个新的Python环境</strong></em>。</p><p>2.使用pip安装第三方库是有默认路径的，所以如果想成功使用pip安装第三方库，需要满足以下两个条件：电脑中只安装了一个Python；在配置Python环境的时候，选择的是【Existing Environment】。</p><p>3.如果我们使用pip安装第三方库，但是安装之后，Pycharm中没有成功导入，这个时候建议大家使用<strong>第二种方式</strong>进行安装。</p><h3 id="1-2-基于Anaconda创建的环境">1.2 基于Anaconda创建的环境</h3><h4 id="配置python环境"><em><strong>配置python环境</strong></em></h4><p>首先要通过Anaconda创建一个虚拟环境，以前面建立的faultcode为例为pycharm创建环境(路径为<code>Anaconda的安装目录\envs\faultcode</code>)</p><p>同样地，通过路径【File】→【Settings】→【Project】→【Project Interpreter】来到我们配置Python环境的界面。点击小齿轮，在弹出的选项中点击【Show All】，然后再弹出的窗口中点击【+】号，进入配置页面。</p><p><img src="https://mikepicture.oss-cn-chengdu.aliyuncs.com/picture/2.webp" alt="2"></p><p>纯python是进入<code>Virtualenv Environment</code>，基于Anaconda则选择<code>Conda Enveronment</code>。</p><p>这里可以选择【New Environment】或【Existing Environment】，建议选择【Existing Environment】，然后根据前面创建的虚拟环境&quot;faultcode&quot;的路径，找到相应文件夹下的Python.exe，点击【OK】。</p><blockquote><p>虚拟环境的好处在于：</p><p>可以对每个项目创建专属的配置环境和软件包，避免冲突，因此此处可以不勾选“make available to all projects”</p></blockquote><p><img src="https://mikepicture.oss-cn-chengdu.aliyuncs.com/picture/image-20220814145400671.png" alt="image-20220814145400671"></p><p>来到这个页面，这里是我们当前配置的Python环境中包含的库信息，包含了之前虚拟环境“faultcode”中安装的各个软件包。点击【OK】，即可完成我们的Python环境配置。</p><p><img src="https://mikepicture.oss-cn-chengdu.aliyuncs.com/picture/image-20220814145828621.png" alt="image-20220814145828621"></p><h4 id="安装第三方库-2"><em><strong>安装第三方库</strong></em></h4><p>也是同上的两种方法:</p><ul><li>第一种方法是在CMD使用<code>pip</code>命令或者<code>conda</code>命令，输入<code>activate environment_name</code>转换到。比如我们要安装PyQt5库，打开命令提示符，输入<code>pip install PyQt5</code>，然后回车，等待一会即可完成。</li><li>第二种方法，直接来到我们的Pycharm的环境配置页面，点击【+】号，然后搜索并选中我们需要的第三方库，点击【Install Package】即可进行安装。</li></ul><h3 id="1-3-Pycharm创建运行、调试配置">1.3 Pycharm创建运行、调试配置</h3><blockquote><p>run/debug configuration</p></blockquote><p>参考</p><ul><li><a href="https://www.imooc.com/wiki/pycharmlesson/runningconfig.html">在 PyCharm 里创建运行/调试配置 - 慕课网</a></li><li><a href="https://www.imooc.com/wiki/pycharmlesson/interpreter1.html">PyCharm 配置 Python 解释器</a></li></ul><p>自己的配置（目前可正常运行）：</p><p><img src="https://mikepicture.oss-cn-chengdu.aliyuncs.com/picture/image-20220814152607159.png" alt="image-20220814152607159"></p><h3 id="1-4-其它技巧">1.4 其它技巧</h3><h4 id="界面汉化"><em><strong>界面汉化</strong></em></h4><p>在<code>Settings-Plugin</code>下载插件<code>Chinese(Simplified) Language Pack/中文语言包</code>即可</p><h4 id="查看当前虚拟环境的软件包"><em><strong>查看当前虚拟环境的软件包</strong></em></h4><p>如图所示：</p><p><img src="https://mikepicture.oss-cn-chengdu.aliyuncs.com/picture/image-20220814152847266.png" alt="image-20220814152847266"></p><h4 id="常用快捷键-Windows"><em><strong>常用快捷键(Windows)</strong></em></h4><p><img src="https://mikepicture.oss-cn-chengdu.aliyuncs.com/picture/5ee64e0608c4fa0416000953.jpg" alt="keyboard shortcuts"></p><p><strong>常用快捷键：</strong></p><ul><li><strong>Ctrl + Enter(⌘ ↩)</strong>：在下方新建行但不移动光标；</li><li><strong>Shift + Enter(⇧ ↩)</strong>：在下方新建行并移到新行行首；</li><li><strong>Ctrl + /(⌘ /)</strong>：注释(取消注释)选择的行；</li><li><strong>Ctrl + Alt + L(⌥ ⌘ L)</strong>：格式化代码；</li><li><strong>Ctrl + Shift + +/-(⇧⌘ + / ⇧⌘ -)</strong>：展开/收缩所有的代码块；</li><li><strong>Ctrl + Shift + Enter(⇧ ⌘ ↩)</strong>：完成语句；</li><li><strong>Ctrl + Alt + I(⌃ ⌥ I)</strong>：自动缩进行；</li><li><strong>Alt + Enter(⌥ ↩)</strong>：优化代码，提示信息实现自动导包；</li><li><strong>Ctrl + B(⌘ B)</strong>：显示对象声明信息；</li><li><strong>Double Shift(Double ⇧)</strong>：搜索所有类型对象；</li><li><strong>Ctrl + E(⌘ E)</strong>：最近打开的文件；</li><li><strong>Ctrl + Shift + N (⇧⌘ N)</strong>：查找项目中的任何文件。</li></ul><h4 id="查看运行过程中的变量值"><em><strong>查看运行过程中的变量值</strong></em></h4><img src="https://mikepicture.oss-cn-chengdu.aliyuncs.com/picture/image-20220816170722042.png" alt="image-20220816170722042" style="zoom:80%;" /><p>在Pycharm界面的右上方，点击运行栏的这个灰色向下箭头，选择<code>Edit Configurations</code>，在接下来出现的窗口中，勾选<code>run with Python console</code></p><img src="https://mikepicture.oss-cn-chengdu.aliyuncs.com/picture/image-20220816170821626.png" alt="image-20220816170821626" style="zoom: 55%;" /><p>设置完成后重启Pycharm，运行程序，点击<code>show variables</code>就会出现查看变量的窗口</p><img src="https://mikepicture.oss-cn-chengdu.aliyuncs.com/picture/image-20220816170939520.png" alt="image-20220816170939520" style="zoom: 80%;" /><p>变量窗口：</p><img src="https://mikepicture.oss-cn-chengdu.aliyuncs.com/picture/image-20220816171044005.png" alt="image-20220816171044005" style="zoom: 80%;" /><h2 id="2-安装、使用PyQt5及相关库">2. 安装、使用PyQt5及相关库</h2><p>安装有两种方法：</p><ul><li>pycharm中(Settings-Project-Project Interpreter)直接搜索并安装</li><li>在CMD中为Anaconda创建的虚拟环境添加软件包</li></ul><p>分别参考：</p><ul><li><a href="https://blog.csdn.net/qq_32892383/article/details/108867482">PyCharm安装PyQt5及其工具(Qt Designer、PyUIC、PyRcc)详细教程 - CSDN</a></li><li><a href="https://blog.csdn.net/zhangziju/article/details/80243858">PyQt5+Pycharm安装和配置 - CSDN</a></li></ul><blockquote><p>在找Qt Designer、PyUIC、PyRcc的exe文件时，可能位置有所不同，根据实际情况确定位置.</p><p>由于使用的是anaconda下的虚拟环境，为避免出错，使用的是虚拟环境下的PyQt5及工具的软件包，相关设置如下：</p><ul><li>环境变量：</li></ul><img src="https://mikepicture.oss-cn-chengdu.aliyuncs.com/picture/image-20220814161139826.png" alt="image-20220814161139826" style="zoom: 67%;" /><img src="https://mikepicture.oss-cn-chengdu.aliyuncs.com/picture/image-20220814161056277.png" alt="image-20220814161056277" style="zoom:67%;" /><ul><li>外部工具：<ul><li><p>designer:</p><img src="https://mikepicture.oss-cn-chengdu.aliyuncs.com/picture/image-20220814163543991.png" alt="image-20220814163543991" style="zoom: 67%;" /></li><li><p>PyUIC:</p></li></ul></li></ul><img src="https://mikepicture.oss-cn-chengdu.aliyuncs.com/picture/image-20220814163927669.png" alt="image-20220814163927669" style="zoom: 67%;" /><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"># 实参：</span><br><span class="line">$FileName$</span><br><span class="line">-o</span><br><span class="line">$FileNameWithoutExtension$.py</span><br></pre></td></tr></table></figure><ul><li>PyRcc:</li></ul><img src="https://mikepicture.oss-cn-chengdu.aliyuncs.com/picture/image-20220814164305684.png" alt="image-20220814164305684" style="zoom:67%;" /><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">#实参：</span><br><span class="line">$FileName$</span><br><span class="line">-o</span><br><span class="line">$FileNameWithoutExtension$_rc.py</span><br></pre></td></tr></table></figure></blockquote><h2 id="3-安装、使用Pyinstaller">3. 安装、使用Pyinstaller</h2><p>安装也是同上，有两种方法。此处参考<a href="https://blog.csdn.net/qq_43703185/article/details/119342713">pycharm中安装并配置pyinstaller - CSDN</a></p><p>“外部工具”设置：</p><img src="https://mikepicture.oss-cn-chengdu.aliyuncs.com/picture/image-20220814164410901.png" alt="image-20220814164410901" style="zoom:67%;" /><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">#实参：</span><br><span class="line">--noconsole</span><br><span class="line">--onefile</span><br><span class="line">$FileName$</span><br></pre></td></tr></table></figure><blockquote><p>注：运行pyinstaller后，生成的exe文件在<strong>打包程序所在的文件夹的dist文件夹</strong>中</p></blockquote><h1>Python篇</h1><h2 id="1-纯Python的安装">1. 纯Python的安装</h2><p><a href="https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0014316090478912dab2a3a9e8f4ed49d28854b292f85bb000">廖雪峰的官方网站-安装Python</a></p><p><a href="http://www.runoob.com/python3/python3-install.html">菜鸟教程-Python3 环境搭建</a></p><h2 id="2-教程推荐">2. 教程推荐</h2><p><a href="https://www.liaoxuefeng.com/wiki/1016959663602400">Python教程 - 廖雪峰的官方网站</a></p><p><a href="https://www.runoob.com/python3/python3-tutorial.html">Python3 教程|菜鸟教程</a></p><h1>参考教程</h1><h2 id="Anaconda相关">Anaconda相关</h2><p>Anaconda安装、配置：</p><ul><li><a href="https://blog.csdn.net/ITLearnHall/article/details/81708148">Anaconda详细安装及使用教程（带图文）- CSDN</a></li><li><a href="https://www.jb51.net/article/137772.htm">windows下Anaconda的安装与配置 - 脚本之家</a></li></ul><p>配置镜像地址：</p><ul><li><a href="https://blog.csdn.net/JohnnyRian/article/details/88213063">conda upgrade --all 失败解决方案</a></li></ul><p>修改虚拟环境安装地址：</p><ul><li><a href="https://www.cnblogs.com/lemonbit/p/7068091.html">Anaconda安装虚拟环境到指定路径 - 博客园</a></li><li><a href="https://blog.csdn.net/baigua3362/article/details/101559799">Anaconda下安装虚拟环境到指定路径 - CSDN</a></li><li><a href="https://blog.csdn.net/Chenftli/article/details/124901260">一文解决安装Anaconda后C盘不断增加的问题、修改默认配置 - CSDN</a></li></ul><h2 id="Pycharm相关">Pycharm相关</h2><p>Pycharm使用教程：</p><ul><li><p><a href="https://www.imooc.com/wiki/pycharmlesson/introduce1.html">Pycharm编辑器教程 - 慕课网</a></p><blockquote><p>注：文本教程，不是视频</p></blockquote></li></ul><p>“基于纯python环境”方法：</p><ul><li><a href="https://www.jianshu.com/p/bdeb237af302">Pycharm配置环境及安装第三方库 - 简书</a></li></ul><p>pycharm 创建运行、调试配置：</p><ul><li><a href="https://www.imooc.com/wiki/pycharmlesson/runningconfig.html">在 PyCharm 里创建运行/调试配置 - 慕课网</a></li></ul>]]></content>
    
    
    <summary type="html">Win10下，基于Anaconda、Pycharm的Python环境搭建详细教程</summary>
    
    
    
    <category term="Python" scheme="https://qmike.top/categories/Python/"/>
    
    
  </entry>
  
  <entry>
    <title>Butterfly主题配置bug记录（更新中）</title>
    <link href="https://qmike.top/posts/7e01226e.html"/>
    <id>https://qmike.top/posts/7e01226e.html</id>
    <published>2022-09-01T17:53:00.000Z</published>
    <updated>2022-09-02T11:02:00.000Z</updated>
    
    <content type="html"><![CDATA[<h1>前言</h1><p>世界上除了学不完的知识，还有排不完的bug。。</p><p>本篇记录自己在使用butterfly主题时遇到的各种报错，每个都是独一无二且千奇百怪的</p><p>排除bug是一个非常折腾+耗时间的过程，或许本文会一直更新下去吧~（恼）</p><h1>1. YAMLException: bad indentation of a mapping entry</h1><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line"># 运行hexo g后出现如下报错</span><br><span class="line">YAMLException: bad indentation of a mapping entry (7:20)</span><br><span class="line"></span><br><span class="line"> 4 |</span><br><span class="line"> 5 | menu:</span><br><span class="line"> 6 |   首页:/ || fas fa-home</span><br><span class="line"> 7 |   菜单 || fas fa-list:</span><br><span class="line">------------------------^</span><br><span class="line"> 8 |     时间轴: /archives/ || fas fa-archive</span><br><span class="line"> 9 |     标签: /tags/ || fas fa-tags</span><br><span class="line">    at generateError (D:\Blog\悠悠の哉\node_modules\js-yaml\lib\loader.js:183:10)</span><br><span class="line">    at throwError (D:\Blog\悠悠の哉\node_modules\js-yaml\lib\loader.js:187:9)</span><br><span class="line">    ...</span><br></pre></td></tr></table></figure><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">报错原因：一般是英文冒号后缺失空格</span><br><span class="line">解决方法：通过报错找到相应位置，添加空格</span><br></pre></td></tr></table></figure><blockquote><p>这或许是目前遇到的最多的报错了吧。。</p></blockquote><h1>2. warning: adding embedded git repository: XXXX</h1><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line"># 运行git add .后出现如下报错</span><br><span class="line">warning: adding embedded git repository:xxxxxxxxxx</span><br><span class="line">hint: You&#x27;ve added another git repository inside your current repository.</span><br><span class="line">hint: Clones of the outer repository will not contain the contents of</span><br><span class="line">hint: the embedded repository and will not know how to obtain it.</span><br><span class="line">hint: If you meant to add a submodule, use:</span><br><span class="line">hint:</span><br><span class="line">hint: git submodule add &lt;url&gt;xxxxxxxxxx</span><br><span class="line">hint:</span><br><span class="line">hint: If you added this path by mistake, you can remove it from the</span><br><span class="line">hint: index with:</span><br><span class="line">hint:</span><br><span class="line">hint: git rm --cached   xxxx</span><br><span class="line">hint:</span><br><span class="line">hint: See &quot;git help submodule&quot; for more information.</span><br></pre></td></tr></table></figure><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line">报错原因：没有添加相应的子模块，在.gitmodules中没有这个子模块的path和url信息。</span><br><span class="line">        经常出现在配置完主题，却没有添加子模块的情况。</span><br><span class="line">解决方法：以主题`butterfly`为例，运行如下指令：</span><br><span class="line">        # 如果是文件</span><br><span class="line">        git rm --cached themes/butterfly</span><br><span class="line">        # 如果执行以上命令后若提示：【 error: 如下文件其暂存的内容和工作区及 HEAD 中的都不一样：】 ，`-f`强制删除</span><br><span class="line">        git rm -f --cached themes/butterfly</span><br><span class="line"></span><br><span class="line">#=添加仓库索引=======================================</span><br><span class="line"># 创建子模块并添加butterfly的url地址</span><br><span class="line"># 格式为git submodule add &lt;url&gt; &lt;path&gt;</span><br><span class="line">git submodule add https://github.com/jerryc127/hexo-theme-butterfly.git themes/butterfly</span><br><span class="line"># 或者也可以使用butterfly的ssh地址</span><br></pre></td></tr></table></figure><h1>3. github报错Jekyll::Errors::MissingDependencyException和Gem::MissingSpecError</h1><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line">#配置完butterfly主题，在将本地博客文件push到github上后，显示如下错误：</span><br><span class="line">/usr/local/bundle/gems/jekyll-3.9.2/lib/jekyll/theme.rb:84:in `rescue in gemspec&#x27;: The butterfly theme could not be found. (Jekyll::Errors::MissingDependencyException)</span><br><span class="line">from /usr/local/bundle/gems/jekyll-3.9.2/lib/jekyll/theme.rb:81:in `gemspec&#x27;</span><br><span class="line">from /usr/local/bundle/gems/jekyll-3.9.2/lib/jekyll/theme.rb:19:in `root&#x27;</span><br><span class="line">from /usr/local/bundle/gems/jekyll-3.9.2/lib/jekyll/theme.rb:12:in `initialize&#x27;</span><br><span class="line">    ......</span><br><span class="line">/usr/local/lib/ruby/2.7.0/rubygems/dependency.rb:311:in `to_specs&#x27;: Could not find &#x27;butterfly&#x27; (&gt;= 0) among 148 total gem(s) (Gem::MissingSpecError)</span><br><span class="line">Checked in &#x27;GEM_PATH=/github/home/.gem/ruby/2.7.0:/usr/local/lib/ruby/gems/2.7.0:/usr/local/bundle&#x27;, execute `gem env` for more information</span><br><span class="line">from /usr/local/lib/ruby/2.7.0/rubygems/dependency.rb:323:in `to_spec&#x27;</span><br><span class="line">from /usr/local/lib/ruby/2.7.0/rubygems/specification.rb:986:in `find_by_name&#x27;</span><br><span class="line">from /usr/local/bundle/gems/jekyll-3.9.2/lib/jekyll/theme.rb:82:in `gemspec&#x27;</span><br><span class="line">    ......</span><br><span class="line">  Logging at level: debug</span><br><span class="line">Configuration file: /github/workspace/./_config.yml</span><br><span class="line">             Theme: butterfly</span><br><span class="line">github-pages 227 | Error:  The butterfly theme could not be found.</span><br></pre></td></tr></table></figure><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">原因：尚未清楚出现这个报错的原因。</span><br><span class="line">     由于这一步出现在github page build and deploy，因此初步判断是，github无法根据仓库内容构建和部署github page导致的正常报错，而我没有将网站部署在github page的想法，对于后续Netlify网站的部署也没有任何影响，因此目前对这个报错可以忽略不管。</span><br></pre></td></tr></table></figure><h1>4. YAMLException: duplicated mapping key</h1><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"># 输入hexo g后，出现如下报错：</span><br><span class="line">YAMLException: duplicated mapping key (16:1)</span><br><span class="line"></span><br><span class="line"> 13 | keywords: Butterfly, hexo</span><br><span class="line"> 14 | top_image:</span><br><span class="line"> 15 | cover:</span><br><span class="line"> 16 | highlight_shrink: false</span><br><span class="line">------^</span><br><span class="line">    at generateError (D:\Blog\悠悠の哉\node_modules\js-yaml\lib\loader.js:183:10)</span><br><span class="line">......</span><br></pre></td></tr></table></figure><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Front内容出现了重复，需要将重复内容删除</span><br></pre></td></tr></table></figure><h1>5. 文章目录无法跳转</h1><p>点击文章页一级目录无反应，但二级目录可以正常跳转。打开浏览器右键菜单，点击“检查-控制台”查看<code>html</code>，发现点击目录一级标题后会出现如下报错：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">Uncaught TypeError: Cannot read properties of null (reading &#x27;offsetTop&#x27;)</span><br><span class="line">    at Object.getEleTop (utils.js:208:25)</span><br><span class="line">    at HTMLDivElement.&lt;anonymous&gt; (main.js:369:30)</span><br></pre></td></tr></table></figure><p><img src="https://mikepicture.oss-cn-chengdu.aliyuncs.com/picture/image-20220921014231760.png" alt="image-20220921014231760"></p><p>检查“页面元素”，发现目录一级标题的<code>'toc-link'</code>后没有正常生成<code>href</code>属性，因此无法实现跳转。</p><p><img src="https://mikepicture.oss-cn-chengdu.aliyuncs.com/picture/image-20220921014914595.png" alt="image-20220921014914595"></p><p>出现此问题的原因是<code>markdown-it</code>插件的 bug，butterfly主题的博客是由<code>markdown-it</code>渲染的，而这个插件并未渲染 heading 的 id 所以导致锚点失效，目录无法正常跳转。</p><p>解决方法是首先安装 markdown-it-named-headings 插件：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm install markdown-it-named-headings --save</span><br></pre></td></tr></table></figure><p>然后进入项目的根目录，修改根目录下 <code>node_modules\hexo-renderer-markdown-it\lib\renderer.js</code> 文件，在 <code>renderer.js</code> 中添加一行以使用此插件：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">parser.use(require(&#x27;markdown-it-named-headings&#x27;))</span><br></pre></td></tr></table></figure><blockquote><p>可能需要根据该文件中具体的代码格式进行适当修改</p></blockquote><p>我的修改效果如下：</p><p><img src="https://mikepicture.oss-cn-chengdu.aliyuncs.com/picture/%E4%BF%AE%E6%94%B9js%E6%96%87%E4%BB%B6.png" alt="修改js文件"></p><p>记得保存修改，重新运行后即可正常实现目录一级标题的跳转。</p><blockquote><p>详细问题描述及解决方案参考<a href="https://convivae.top/posts/hexo-bo-ke-cai-keng/">Hexo 博客踩坑 | blog (convivae.top)</a></p></blockquote>]]></content>
    
    
    <summary type="html">总能遇到千奇百怪的bug，算是一本“怪物图鉴”了吧</summary>
    
    
    
    <category term="博客" scheme="https://qmike.top/categories/%E5%8D%9A%E5%AE%A2/"/>
    
    
  </entry>
  
  <entry>
    <title>Butterfly主题折腾笔记-基础篇</title>
    <link href="https://qmike.top/posts/a2d08203.html"/>
    <id>https://qmike.top/posts/a2d08203.html</id>
    <published>2022-08-31T15:00:00.000Z</published>
    <updated>2022-09-01T17:30:00.000Z</updated>
    
    <content type="html"><![CDATA[<h1>前言</h1><p>本篇记录自己在使用butterfly主题对博客进行美化的全过程、技巧，Hexo所有的主题基本都配置了详细的基础教程，假如有相关经验的话，相信是可以很快入手的。当然我这样的小白必然会对其中一些配置方法和细节摸不着头脑，本章会记录我自己在使用<a href="https://butterfly.js.org/">Butterfly安装文档</a>中遇到的问题，以及拓展的内容，基础操作不做描述。</p><p>魔改内容参考<a href="">进阶篇</a></p><h1>1. Git/npm安装区别</h1><p>安装目录不同：git方式，butterfly主题安装在<code>themes</code>文件夹中；npm方式，主题安装在<code>node_modules </code>里</p><p>后续作用不同：npm安装方式方便于后续的“自动化配置“，参考这个<a href="https://www.bilibili.com/video/BV1Cb4y1773P/?spm_id_from=333.788">视频</a>。不过我还没有尝试这个。</p><h1>2. Page/Post Front-matter</h1><p>Front-matter 是 markdown 文件最上方以 — 分隔的区域，用于指定个别档案的变数。</p><ul><li>Page Front-matter 用于<code>主页文章卡片</code>配置</li><li>Post Front-matter 用于<code>文章页</code>配置</li></ul><p>其实就是在每篇博文的markdown文档顶部加上分割线<code>---</code>，中间写上该文档的性质。具体写法：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br></pre></td><td class="code"><pre><span class="line">Page Front-matter:</span><br><span class="line"></span><br><span class="line">---</span><br><span class="line">title:</span><br><span class="line">date:</span><br><span class="line">updated:</span><br><span class="line">type:</span><br><span class="line">comments:</span><br><span class="line">description:</span><br><span class="line">keywords:</span><br><span class="line">top_img:</span><br><span class="line">mathjax:</span><br><span class="line">katex:</span><br><span class="line">aside:</span><br><span class="line">aplayer:</span><br><span class="line">highlight_shrink:</span><br><span class="line">---</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">Post Front-matter:</span><br><span class="line"></span><br><span class="line">---</span><br><span class="line">title:</span><br><span class="line">date:</span><br><span class="line">updated:</span><br><span class="line">tags:</span><br><span class="line">categories:</span><br><span class="line">keywords:</span><br><span class="line">description:</span><br><span class="line">top_img:</span><br><span class="line">comments:</span><br><span class="line">cover:</span><br><span class="line">toc:</span><br><span class="line">toc_number:</span><br><span class="line">toc_style_simple:</span><br><span class="line">copyright:</span><br><span class="line">copyright_author:</span><br><span class="line">copyright_author_href:</span><br><span class="line">copyright_url:</span><br><span class="line">copyright_info:</span><br><span class="line">mathjax:</span><br><span class="line">katex:</span><br><span class="line">aplayer:</span><br><span class="line">highlight_shrink:</span><br><span class="line">aside:</span><br><span class="line">---</span><br></pre></td></tr></table></figure><blockquote><p>各字段含义见<a href="https://butterfly.js.org/posts/dc584b87/#Page-Front-matter">网页</a></p></blockquote><h1>3. 添加新页面</h1><p>例如要生成新页面<code>XXXX</code>，步骤如下：</p><ul><li><p>前往你的 Hexo 博客的<code>根目录</code></p></li><li><p>输入 <code>hexo new page XXXX</code></p></li><li><p>在source文件夹中会新生成<code>XXXX</code>的对应文件夹，<a href="http://xn--index-hr2j95qs50c4k3cuxl.md">打开里面的index.md</a></p></li><li><p>修改这个文件：在最后一行添加 <code>type: &quot;XXXX&quot;</code>，另外可以修改这个子页面的<code>title</code>名称</p></li><li><p>在butterfly主题配置文件<code>_config.butterfly</code>中将这个子页面添加到导航菜单中，类似于：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">menu:</span><br><span class="line">  首页: / || fas fa-home</span><br><span class="line">  归档||fas fa-list||hide:</span><br><span class="line">    时间轴: /archives/ || fas fa-archive</span><br><span class="line">    标签: /tags/ || fas fa-tags</span><br><span class="line">    分类: /categories/ || fas fa-folder-open</span><br><span class="line">  友链: /link/ || fas fa-link</span><br><span class="line">  关于: /about/ || fas fa-heart</span><br></pre></td></tr></table></figure></li><li><p>在index.md中添加<code>&quot;top_img: YYYY.jpg&quot;</code>，即可自定义它的顶部图像</p><blockquote><p>比在<code>_config.butterfly.yml</code>中定义要方便，另外注意图片格式</p></blockquote></li></ul><h1>4. 图标库</h1><p>Butterfly支持 <a href="https://fontawesome.com/icons?from=io">font-awesome v6</a>图标。</p><h1>5. 图片配置技巧</h1><p>对于页面顶部图的配置，除了支持用url链接外，也可以在<code>source</code>文件夹下新建<code>img</code>文件夹，将图片存储在这里面，调用格式为<code>&quot;./img/XXXX.jpg&quot;</code>，加载速度会快一些。</p><blockquote><p>注意不要在主题文件夹下的<code>source/img</code>文件夹中存储图片，例如<code>./themes/butterfly/source/img</code>，会因为主题的更新导致图片文件的覆盖丢失。</p></blockquote><h1>6. 本地搜索功能</h1><p>我的博客启用的是“本地搜索”，安装该功能前先运行<code>hexo clean</code>。</p><p>需要安装 hexo-generator-search，根据它的<a href="https://github.com/wzpan/hexo-generator-search">文档</a>去做相应配置。</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm install hexo-generator-search --save</span><br></pre></td></tr></table></figure><p>然后在主题配置文件<code>_config.butterfly.yml</code>里，启用本地搜索功能：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># Local search</span></span><br><span class="line">local_search:</span><br><span class="line">  <span class="built_in">enable</span>: <span class="literal">true</span></span><br><span class="line">  preload: <span class="literal">true</span></span><br><span class="line">  CDN:</span><br><span class="line"> </span><br></pre></td></tr></table></figure><ul><li><code>enable</code>：是否开启本地搜索</li><li><code>preload</code>：预加载<ul><li>开启后，进入网页后会自动加载搜索文件；</li><li>关闭时，只有点击搜索按钮后，才会加载搜索文件</li></ul></li><li><code>CDN</code>：搜索文件的 CDN 地址（默认使用的本地链接）</li></ul><p>然后重新生成页面即可查看更改。</p><p>其实如果没有其它的需要的话，到这里就可以了，默认配置就已经足够用了。</p><p>也可以在hexo根目录配置文件<code>_config.yml</code>中添加配置：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">search:</span><br><span class="line">  path: search.xml</span><br><span class="line">  field: post</span><br><span class="line">  content: <span class="literal">true</span></span><br><span class="line">  <span class="comment"># 建议不要写入命令template: ./search.xml，实测会报错</span></span><br></pre></td></tr></table></figure><ul><li><code>path</code>：生成的搜索文件的路径，默认是 <code>search.xml</code>，也可以使用 json 格式，改为 <code>search.json</code>。</li><li><code>field</code>：搜索的范围，默认是 <code>post</code>，即只搜索发布的文章，也可以改为 <code>page</code>（搜索页面，即 page 类型的页面，不含发布的导航）或者 <code>all</code>（搜索全部）</li><li><code>content</code>：指是否搜索文章的内容，默认为 <code>true</code>，如果改为 <code>false</code> 的话则只搜索标题、说明等头部内容，不搜索文章的正文</li><li><code>template</code>（可选）：自定义 XML 模板的路径</li></ul><blockquote><p>若可以正常搜索，但无法正常跳转，参考<a href="https://wangjiezhe.com/posts/2018-10-29-Hexo-NexT-2/#fn1">这篇文章</a></p></blockquote><h1>7. 分割线图标替换</h1><p>将图标更换为“太空飞船”。</p><p>修改butterfly主题配置文件<code>_config.butterfly.yml</code>：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">hr_icon:</span><br><span class="line">  <span class="built_in">enable</span>: <span class="literal">true</span></span><br><span class="line">  icon: <span class="string">&#x27;\f197&#x27;</span> <span class="comment"># the unicode value of Font Awesome icon</span></span><br><span class="line">  icon-top: -10px</span><br></pre></td></tr></table></figure><ul><li><p><code>icon-top</code>常用数值：</p><p>-20px：图标位于分割线上方</p><p>-10px：图标位于分割线中间</p><p>0px：图标位于分割线下方</p></li></ul>]]></content>
    
    
    <summary type="html">Butterfly主题安装的基础内容，是对于安装文档的补充和重点内容的摘取，便于像我这样的小白充分理解文档内容，个性化拓展博客网站的功能</summary>
    
    
    
    <category term="博客" scheme="https://qmike.top/categories/%E5%8D%9A%E5%AE%A2/"/>
    
    
  </entry>
  
  <entry>
    <title>个人博客搭建全流程总结</title>
    <link href="https://qmike.top/posts/14042c6a.html"/>
    <id>https://qmike.top/posts/14042c6a.html</id>
    <published>2022-08-29T10:11:00.000Z</published>
    <updated>2022-09-02T16:16:00.000Z</updated>
    
    <content type="html"><![CDATA[<h1>前言</h1><p>基于windows10进行个人博客搭建的全过程，记录一下在搭建过程中遇到的各种问题，为以后避坑。在<a href="https://blog.cuijiacai.com/blog-building/">“爱扑bug的熊”的教程</a>基础上，结合<a href="https://www.bilibili.com/video/BV1mU4y1j72n?spm_id_from=333.999.0.0&amp;vd_source=8bba695aa4490252230ffd2e2cc0609b">b站大佬视频</a>等其它教程改编而成，其它参考的文章放在本文文末。</p><h1>基本知识</h1><blockquote><p>要看具体配置步骤可以直接略过这节内容</p></blockquote><p>从应用层来说，个人博客由以下四个部分组成：</p><ul><li>博客生成框架</li><li>文件托管平台</li><li>站点部署服务</li><li>CDN加速服务</li></ul><p>这四个部分的作用分别如下：</p><p>（1）博客生成框架</p><p>它是一个应用程序，目的是将用户的输入转化为一个由HTML文件、CSS文件以及js文件组成的网站目录，即通常意义上前端的三个组成部分：</p><ul><li>HTML(Hyper Text Markup Language)，前端的<strong>结构层</strong>，从语义角度搭建网页结构</li><li>CSS(Cascading Style Sheet)，前端的<strong>样式层</strong>，从美观的角度修饰页面样式</li><li>js(Java Script)，前端的<strong>行为层</strong>，从交互的角度描述页面行为</li></ul><p>简单来说，博客生成框架是帮助将我们输入的博客内容、设置，转化为一个完整的复杂的前端界面。</p><p>（2）文件托管平台</p><p>它帮助我们把博客目录文件存储在云端，并提供相应的访问和修改的接口。以github平台为例，对应的访问和修改接口是git。</p><p>（3）站点部署服务</p><p>它将我们已经成形的网站目录部署在互联网上，使得网络上的其它主机可以正常访问，否则博客只存在于本地，无法达到“互联互通”的目的。</p><p>最简单的是通过github自带的github pages搭建站点，具体搭建方式可以参考b站视频<a href="https://www.bilibili.com/video/BV1mU4y1j72n?spm_id_from=333.999.0.0&amp;vd_source=8bba695aa4490252230ffd2e2cc0609b">保姆级Hexo+github搭建个人博客 | 视频搬运崽啊(bilibili.com)</a>。优点是无需购买域名，通过<code>XXXX.github.io</code>便可以直接访问博客；缺点是国内访问速度慢且不稳定（参考github的访问及下载速度）。</p><blockquote><p>本文将使用Netlify作为部署站点的服务提供商，把github仅仅作为托管文件的场所。</p><p>按照原教程作者所述，Netlify除了直接部署静态网络的功能外，还支持动态地构建网站，也就是可以自定义一个构建网络的脚本。例如使用脚本<code>npm run clean &amp;&amp; npm run build</code>清除已经构建好的静态网络，然后重新从头构建，防止某些地方的更新不到位。之后，每次向github commmit的时候，Netlify都会自动pull并执行上述脚本，从而保证网站的实时更新。</p></blockquote><p>（4）访问加速服务</p><p>原理是CDN(Content Delivery Network)加速，通过多节点的缓存来提高网络内容的解析和访问速度，利用页面访问的“局限性”。基本工作过程是客户端先访问离自己最近的DNS(Domain Name System)服务器节点，然后根据这个信息去询问CDN服务器节点，由CDN负责从网络中寻找远端的实际存储内容的服务器进行内容的获取，然后将获取的内容缓存下来，这样下一次访问就会比较迅速。</p><p>一般当我们从某个域名提供商那里购买域名后，提供商会默认为我们分配它自己的DNS服务器，我们需要将这个服务器修改为其它想要用的DNS服务器，才能享受对应的CDN加速服务。</p><h1>使用的配置</h1><p>在本文中，使用的个人博客框架是hexo，博客文件拖管于github，博客网站用Netlify生成，国内访问采用Cloudflare进行CDN加速。使用这个解决方案的原因是不需要云服务器，也不需要备案，只需要有一个域名即可。</p><p>在Windows中搭建个人博客时，建议用<code>git bash</code>（在安装git的时候应该已经同时安装了，如果没有的话可以去官网下载）来进行后续的操作及命令的输入。</p><p>git可在<a href="https://git-scm.com/">官网</a>下载，具体的安装及配置参考教程<a href="https://blog.csdn.net/weixin_43951315/article/details/104921428">Git下载、安装及环境配置（超详细）-CSDN</a>，涉及的命令如下（<code>git bash</code>中输入）：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">#必须进行的操作（环境配置）</span></span><br><span class="line"><span class="comment">#Git账号配置</span></span><br><span class="line">git config --global user.name “name”             <span class="comment">#Github账号名</span></span><br><span class="line">git config --global user.email “XXX@email.com”   <span class="comment">#Github注册邮箱</span></span><br><span class="line"><span class="comment">#查询配置</span></span><br><span class="line">git config --global --list</span><br><span class="line"><span class="comment">#生成SSH文件夹</span></span><br><span class="line">ssh-keygen -t rsa -C <span class="string">&quot;XXXX.email.com&quot;</span>            <span class="comment"># 敲击四次回车键，SSH文件目录为C:\Users\用户名.ssh</span></span><br><span class="line"></span><br><span class="line"><span class="comment">#其它可进行的操作（创建本地库）</span></span><br><span class="line"><span class="built_in">mkdir</span> learngit    <span class="comment"># 创建一个空目录learngit</span></span><br><span class="line"><span class="built_in">cd</span> learngit       <span class="comment"># 进入到该目录中</span></span><br><span class="line"><span class="built_in">pwd</span>               <span class="comment"># 显示当前目录</span></span><br></pre></td></tr></table></figure><h1>Hexo</h1><h2 id="1-介绍">1. 介绍</h2><img src="https://s1.ax1x.com/2022/08/30/vhvQsK.png" alt="image-20220826115412769" style="zoom: 40%;" /><p>hexo是一个基于nodejs的静态博客网站生成器，作者是来自台湾的<code>Tommy Chen</code>，为许多技术博客的博主所青睐，主要有如下的一些优点：</p><ul><li>支持<code>Markdown</code>语法，编辑简单，排版优美；</li><li>能够快速生成静态html文件；</li><li>部署容易，接口简单；</li><li>兼容于各大主流操作系统；</li><li>社区主题、插件很多，遇到问题的时候能查到的参考材料也很多。</li></ul><h2 id="2-环境配置">2. 环境配置</h2><p>搭建hexo首先需要有<code>node.js</code>的环境，可以从<a href="https://nodejs.org/zh-cn/">官网</a>直接下载。</p><img src="https://s1.ax1x.com/2022/08/30/v4pt78.png" style="zoom: 50%;" /><p><code>node.js</code>的安装及配置可参考<a href="https://blog.csdn.net/web18224617243/article/details/123191441">node.js安装及环境配置超详细教程[Windows系统安装包方式] - CSDN</a>，我这里只按照默认配置完成了安装。</p><p>在<code>git bush</code>或者<code>cmd</code>中查看版本信息以确认环境配置信息：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">node -v   <span class="comment"># 查看node版本信息</span></span><br><span class="line">npm -v    <span class="comment"># 查看npm版本信息</span></span><br></pre></td></tr></table></figure><p>能够正常看到对应的版本信息，则说明环境配置就已经完成了。</p><p>这里还需要提一下的是<code>npm</code>默认的官网源可能会比较慢，如果想要后续的下载速度快一些，可以通过下面的方式将源设置为淘宝源。</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">npm config get registry                                   <span class="comment"># 查看原来的源</span></span><br><span class="line">npm config <span class="built_in">set</span> registry https://registry.npm.taobao.org   <span class="comment"># 修改为淘宝源</span></span><br><span class="line">npm config get registry                                   <span class="comment"># 查看现在的源</span></span><br></pre></td></tr></table></figure><h2 id="3-生成博客">3. 生成博客</h2><h3 id="3-1-安装">3.1 安装</h3><p>有了<code>npm</code>包管理软件，安装hexo就很方便了，只需要在<code>git bash</code>中输入一行命令：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm install hexo-cli -g           <span class="comment"># 全局安装hexo命令行工具</span></span><br></pre></td></tr></table></figure><p>其中<code>-g</code>参数表示全局安装，没有这个参数就只在当前目录下安装，建议全局安装。</p><p>输入命令以验证hexo是否安装成功：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">hexo -v</span><br></pre></td></tr></table></figure><h3 id="3-2-初始化">3.2 初始化</h3><p>选择一个想要存放本地博客目录的地址（例如我新建了一个<code>D:\Blog</code>文件夹），右键在<code>git bash</code>中运行命令：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">hexo init <span class="string">&quot;博客目录名称&quot;</span>           <span class="comment"># 目录名称不含空格的时候双引号可以省略</span></span><br></pre></td></tr></table></figure><blockquote><p>也可以直接运行<code>hexo init</code>，会直接在当前文件夹创建博客目录的各个子文件夹。</p></blockquote><p>得到如下的反馈信息：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">INFO  Cloning hexo-starter https://github.com/hexojs/hexo-starter.git</span><br><span class="line">INFO  Install dependencies</span><br><span class="line"><span class="comment"># 一些可能的中间信息</span></span><br><span class="line">INFO  Start blogging with Hexo!</span><br></pre></td></tr></table></figure><blockquote><p>若因为github连接问题等报错，则需要删除已经生成的博客目录后，重新运行命令。</p></blockquote><p>然后进入博客目录：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">cd</span> <span class="string">&quot;博客目录名称&quot;</span></span><br></pre></td></tr></table></figure><p>安装博客需要的其他支持：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm install             <span class="comment"># 安装的依赖项在package.json文件的dependencies字段中可以看到</span></span><br></pre></td></tr></table></figure><h3 id="3-3-博客项目目录结构介绍">3.3 博客项目目录结构介绍</h3><p>博客项目目录结构如下：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">.</span><br><span class="line">├── _config.landscape.yml</span><br><span class="line">├── _config.yml</span><br><span class="line">├── node_modules</span><br><span class="line">├── package-lock.json</span><br><span class="line">├── package.json</span><br><span class="line">├── scaffolds</span><br><span class="line">├── source</span><br><span class="line">└── themes</span><br></pre></td></tr></table></figure><p>各部分的含义：</p><ul><li><p><code>config.yml</code>为全局配置文件，网站的很多信息都在这里配置，比如说网站名称，副标题，描述，作者，语言，主题等等。具体可以参考官方文档：<a href="https://hexo.io/zh-cn/docs/configuration.html%E3%80%82">https://hexo.io/zh-cn/docs/configuration.html。</a></p><p>这里简单提一下<code>_config.yml</code>的各个字段的含义：</p><figure class="highlight yml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># Site</span></span><br><span class="line"><span class="attr">title:</span> <span class="string">Hexo</span>        <span class="comment"># 网站标题</span></span><br><span class="line"><span class="attr">subtitle:</span>          <span class="comment"># 网站副标题</span></span><br><span class="line"><span class="attr">description:</span>       <span class="comment"># 网站描述</span></span><br><span class="line"><span class="attr">author:</span> <span class="string">John</span> <span class="string">Doe</span>   <span class="comment"># 作者</span></span><br><span class="line"><span class="attr">language:</span>          <span class="comment"># 语言</span></span><br><span class="line"><span class="attr">timezone:</span>          <span class="comment"># 网站时区, Hexo默认使用您电脑的时区</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># URL</span></span><br><span class="line"><span class="comment">## If your site is put in a subdirectory, set url as &#x27;http://yoursite.com/child&#x27;</span></span><br><span class="line"><span class="comment">## and root as &#x27;/child/&#x27;</span></span><br><span class="line"><span class="attr">url:</span> <span class="string">http://yoursite.com</span>     <span class="comment"># 你的站点Url</span></span><br><span class="line"><span class="attr">root:</span> <span class="string">/</span>                      <span class="comment"># 站点的根目录</span></span><br><span class="line"><span class="attr">permalink:</span> <span class="string">:year/:month/:day/:title/</span>   <span class="comment"># 文章的 永久链接 格式   </span></span><br><span class="line"><span class="attr">permalink_defaults:</span>          <span class="comment"># 永久链接中各部分的默认值</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Directory   </span></span><br><span class="line"><span class="attr">source_dir:</span> <span class="string">source</span>           <span class="comment"># 资源文件夹，这个文件夹用来存放内容</span></span><br><span class="line"><span class="attr">public_dir:</span> <span class="string">public</span>           <span class="comment"># 公共文件夹，这个文件夹用于存放生成的站点文件。</span></span><br><span class="line"><span class="attr">tag_dir:</span> <span class="string">tags</span>                <span class="comment"># 标签文件夹     </span></span><br><span class="line"><span class="attr">archive_dir:</span> <span class="string">archives</span>        <span class="comment"># 归档文件夹</span></span><br><span class="line"><span class="attr">category_dir:</span> <span class="string">categories</span>     <span class="comment"># 分类文件夹</span></span><br><span class="line"><span class="attr">code_dir:</span> <span class="string">downloads/code</span>     <span class="comment"># Include code 文件夹</span></span><br><span class="line"><span class="attr">i18n_dir:</span> <span class="string">:lang</span>              <span class="comment"># 国际化（i18n）文件夹</span></span><br><span class="line"><span class="attr">skip_render:</span>                 <span class="comment"># 跳过指定文件的渲染，您可使用 glob 表达式来匹配路径。    </span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Writing</span></span><br><span class="line"><span class="attr">new_post_name:</span> <span class="string">:title.md</span>     <span class="comment"># 新文章的文件名称</span></span><br><span class="line"><span class="attr">default_layout:</span> <span class="string">post</span>         <span class="comment"># 预设布局</span></span><br><span class="line"><span class="attr">titlecase:</span> <span class="literal">false</span>             <span class="comment"># 把标题转换为 title case</span></span><br><span class="line"><span class="attr">external_link:</span> <span class="literal">true</span>          <span class="comment"># 在新标签中打开链接</span></span><br><span class="line"><span class="attr">filename_case:</span> <span class="number">0</span>             <span class="comment"># 把文件名称转换为 (1) 小写或 (2) 大写</span></span><br><span class="line"><span class="attr">render_drafts:</span> <span class="literal">false</span>         <span class="comment"># 是否显示草稿</span></span><br><span class="line"><span class="attr">post_asset_folder:</span> <span class="literal">false</span>     <span class="comment"># 是否启动 Asset 文件夹</span></span><br><span class="line"><span class="attr">relative_link:</span> <span class="literal">false</span>         <span class="comment"># 把链接改为与根目录的相对位址    </span></span><br><span class="line"><span class="attr">future:</span> <span class="literal">true</span>                 <span class="comment"># 显示未来的文章</span></span><br><span class="line"><span class="attr">highlight:</span>                   <span class="comment"># 内容中代码块的设置    </span></span><br><span class="line">  <span class="attr">enable:</span> <span class="literal">true</span>               <span class="comment"># 开启代码块高亮</span></span><br><span class="line">  <span class="attr">line_number:</span> <span class="literal">true</span>          <span class="comment"># 显示行数</span></span><br><span class="line">  <span class="attr">auto_detect:</span> <span class="literal">false</span>         <span class="comment"># 如果未指定语言，则启用自动检测</span></span><br><span class="line">  <span class="attr">tab_replace:</span>               <span class="comment"># 用 n 个空格替换 tabs；如果值为空，则不会替换 tabs</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Category &amp; Tag</span></span><br><span class="line"><span class="attr">default_category:</span> <span class="string">uncategorized</span></span><br><span class="line"><span class="attr">category_map:</span>                <span class="comment"># 分类别名</span></span><br><span class="line"><span class="attr">tag_map:</span>                     <span class="comment"># 标签别名</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Date / Time format</span></span><br><span class="line"><span class="comment">## Hexo uses Moment.js to parse and display date</span></span><br><span class="line"><span class="comment">## You can customize the date format as defined in</span></span><br><span class="line"><span class="comment">## http://momentjs.com/docs/#/displaying/format/</span></span><br><span class="line"><span class="attr">date_format:</span> <span class="string">YYYY-MM-DD</span>     <span class="comment"># 日期格式</span></span><br><span class="line"><span class="attr">time_format:</span> <span class="string">HH:mm:ss</span>       <span class="comment"># 时间格式    </span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Pagination</span></span><br><span class="line"><span class="comment">## Set per_page to 0 to disable pagination</span></span><br><span class="line"><span class="attr">per_page:</span> <span class="number">10</span>                <span class="comment"># 分页数量</span></span><br><span class="line"><span class="attr">pagination_dir:</span> <span class="string">page</span>        <span class="comment"># 分页目录</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Extensions</span></span><br><span class="line"><span class="comment">## Plugins: https://hexo.io/plugins/</span></span><br><span class="line"><span class="comment">## Themes: https://hexo.io/themes/</span></span><br><span class="line"><span class="attr">theme:</span> <span class="string">landscape</span>            <span class="comment"># 主题名称</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Deployment</span></span><br><span class="line"><span class="comment">## Docs: https://hexo.io/docs/deployment.html</span></span><br><span class="line"><span class="comment">#  部署部分的设置</span></span><br><span class="line"><span class="attr">deploy:</span>     </span><br><span class="line">  <span class="attr">type:</span> <span class="string">&#x27;&#x27;</span>                  <span class="comment"># 类型，常用的git </span></span><br></pre></td></tr></table></figure></li><li><p><code>scaffolds</code>是骨架文件，是生成新页面或者新博客的模版。可以根据需求编辑，当<code>hexo</code>生成新博客的时候，会用这里面的模版进行初始化。</p></li><li><p><code>source</code>这个文件夹下面存放的是网站的<code>markdown</code>源文件，里面有一个<code>_post</code>文件夹，所有的<code>.md</code>博客文件都会存放在这个文件夹下。现在，你应该能看到里面有一个<code>hello-world.md</code>文件。</p></li><li><p><code>themes</code>是网站主题目录，<code>hexo</code>有非常丰富的主题支持，主题目录会存放在这个目录下面。我们后续会以默认主题来演示，更多的主题参见：<a href="https://hexo.io/themes/">https://hexo.io/themes/</a></p></li></ul><h3 id="3-4-生成新文章">3.4 生成新文章</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">hexo new post <span class="string">&quot;test&quot;</span> <span class="comment"># 会在 source/_posts/ 目录下生成文件 ‘test.md’，打开编辑</span></span><br><span class="line">hexo generate        <span class="comment"># 生成静态HTML文件到 /public 文件夹中</span></span><br><span class="line">hexo server          <span class="comment"># 本地运行server服务预览，打开 http://localhost:4000 即可预览你的博客</span></span><br></pre></td></tr></table></figure><p>本地预览效果：</p><img src="https://s1.ax1x.com/2022/08/30/v4pc7T.png" alt="image-20220826160637189" style="zoom: 35%;" /><p>这是<code>hexo</code>的默认主题，更多的主题可以从官网下载。</p><p>更详细的<code>hexo</code>命令可以查看文档：<a href="https://hexo.io/zh-cn/docs/commands">https://hexo.io/zh-cn/docs/commands</a></p><blockquote><p>此时的博客仍在存储在本地，输入<code>http://localhost:4000</code>仅仅是提供了一种在浏览器中访问本地博客的方式，并非域名</p></blockquote><h3 id="3-5-添加建站脚本">3.5 添加建站脚本</h3><p>为了后续Netlify建站方便，我们可以在<code>package.json</code>里面添加一个命令：</p><figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">    <span class="comment">// ......</span></span><br><span class="line">    <span class="attr">&quot;scripts&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">        <span class="attr">&quot;build&quot;</span><span class="punctuation">:</span> <span class="string">&quot;hexo generate&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;clean&quot;</span><span class="punctuation">:</span> <span class="string">&quot;hexo clean&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;deploy&quot;</span><span class="punctuation">:</span> <span class="string">&quot;hexo deploy&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;server&quot;</span><span class="punctuation">:</span> <span class="string">&quot;hexo server&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;Netlify&quot;</span><span class="punctuation">:</span> <span class="string">&quot;npm run clean &amp;&amp; npm run build&quot;</span>  <span class="comment">// 这一行为新加</span></span><br><span class="line">    <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="comment">// ......</span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><h3 id="3-6-博客配置">3.6 博客配置</h3><p>由于我们这个教程的重点不是如何编写自己的博客，而是怎么把博客搭建起来，所以<code>hexo</code>的细节用法以及各种主题的设置我们就不展开细说了，官网有非常详细的文档和教程可供参考。</p><h1>Github项目文件托管</h1><h2 id="1-Github创建仓库">1. Github创建仓库</h2><p>主要设置如下：</p><img src="https://s1.ax1x.com/2022/08/30/v4pRNF.png" alt="image-20220826170029282" style="zoom: 50%;" /><h2 id="2-本地git账号配置">2. 本地git账号配置</h2><p>在<code>git bash</code>中输入如下命令：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">git config --global user.name “name”             <span class="comment">#Github账号名</span></span><br><span class="line">git config --global user.email “XXX@email.com”   <span class="comment">#Github注册邮箱</span></span><br></pre></td></tr></table></figure><p>完成后查询git账号配置：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">git config --global --list</span><br></pre></td></tr></table></figure><h2 id="3-生成SSL密钥">3. 生成SSL密钥</h2><blockquote><p>将本地git与github绑定</p></blockquote><p>在任意文件夹中（不是根目录）右键打开<code>git bash</code>，输入如下命令<code>ssh</code>，出现如下代码则说明在安装git时，已经默认安装过ssh：</p><img src="https://s1.ax1x.com/2022/08/30/v4ph9J.png" alt="image-20220826171421244" style="zoom: 67%;" /><p>接着输入：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ssh-keygen -t rsa -C <span class="string">&quot;XXXX.email.com&quot;</span>            <span class="comment"># github注册邮箱</span></span><br></pre></td></tr></table></figure><p>按四次回车后生成SSH密钥。在本地找到对应SSH文件夹<code>C:\Users\Administrator\.ssh</code></p><img src="https://s1.ax1x.com/2022/08/30/v4p439.png" alt="image-20220826173344514" style="zoom:67%;" /><p>用记事本打开<code>id_rsa.pub</code>文件，全选复制里面的内容后，打开github，找到头像下方的settings，进入<code>SSH and GPG keys</code>，点击<code>New SSH key</code>新建SHH密钥。</p><img src="https://s1.ax1x.com/2022/08/30/v4pIj1.png" alt="image-20220826173952865" style="zoom: 40%;" /><p><code>Title</code>任意起名即可，在<code>Key</code>栏粘贴刚刚复制的内容，然后点击<code>Add SSH key</code></p><p>测试SSH是否绑定成功：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ssh -T git@github.com</span><br></pre></td></tr></table></figure><p>出现如下结果则说明绑定成功：</p><img src="https://s1.ax1x.com/2022/08/30/v4p7B6.png" alt="image-20220826181704035" style="zoom: 80%;" /><h2 id="4-本地仓库推送到github">4. 本地仓库推送到github</h2><p>此时的github新建的仓库为空，形式如下：</p><img src="https://s1.ax1x.com/2022/08/30/v4pqAO.png" alt="image-20220826212217197" style="zoom:38%;" /><p>复制<strong>红框</strong>中的<code>https</code>仓库地址。</p><blockquote><p>注意截图中给出了几个导入到仓库的方法，后面我们进行的是它的方法一</p></blockquote><p>在本地的博客项目的目录中右键打开<code>git bash</code>，输入以下命令：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">git init</span><br><span class="line">git add .</span><br><span class="line">git commit -m <span class="string">&quot;my blog first commit&quot;</span></span><br><span class="line">git remote add origin <span class="string">&quot;复制好的远端github仓库地址&quot;</span></span><br><span class="line">git branch -M main                        <span class="comment">#注意要将git默认的master分支改为github的main分支</span></span><br><span class="line">git push -u origin main</span><br></pre></td></tr></table></figure><p>正常推送后得到github仓库如下：</p><img src="https://s1.ax1x.com/2022/08/30/v4pj9H.png" alt="image-20220826214705905" style="zoom: 67%;" /><blockquote><p>在云端创建<code>README.md</code>后再次push本地仓库可能会报错：</p><img src="https://s1.ax1x.com/2022/08/30/v4pzjI.png" alt="image-20220826215039851" style="zoom:80%;" /><p>原因及解决方法参考<a href="https://blog.csdn.net/qq_24495287/article/details/83627727">这篇文章</a>：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 进行push前先将远程仓库pull到本地仓库</span></span><br><span class="line">git pull origin main</span><br><span class="line">git push origin main</span><br></pre></td></tr></table></figure></blockquote><h1>Netlify建站</h1><p>Netlify是一个国外的免费的提供静态网站部署服务的平台，能够将托管 GitHub，GitLab 等上的静态网站部署上线。至于我们为什么不使用<code>github</code>自带的<code>github page</code>，原因很简单，访问速度慢。此外，Netlify还有很多别的功能支持，可以自行探索。主要优点如下：</p><ul><li>可以托管静态资源</li><li>可以将静态网站部署到 CDN 上,加速国内访问</li><li>Continuous Deployment 持续部署,当你提交改变到 git 仓库,它就会自动运行 build command ,进行自动部署</li><li>可以添加自定义域名</li><li>可以启用免费的 TLS 证书,启用 HTTPS</li><li>最强大的cms,用来管理静态资源</li><li>自带 CI、支持自定义页面重定向、自定义插入代码、打包和压缩 JS 和 CSS、压缩图片、处理图片</li></ul><h2 id="1-建站步骤">1. 建站步骤</h2><p>首先注册并登陆<a href="https://www.Netlify.com/">Netlify</a></p><ul><li>这一步需要能够科学上网，因为这是一个国外的网站</li><li>我们的博客在开启cloundflare的CDN加速之前，也只能通过科学上网的方式访问</li></ul><p>新建站点：</p><img src="https://s1.ax1x.com/2022/08/30/v49CHf.png" alt="image-20220826220242786" style="zoom: 33%;" /><p>连接github：</p><img src="https://s1.ax1x.com/2022/08/30/v49iE8.png" alt="image-20220826220410166" style="zoom: 50%;" /><p>选择刚刚上传的博客项目（仓库）：</p><img src="https://s1.ax1x.com/2022/08/30/v49FUS.png" alt="image-20220826220744929" style="zoom: 67%;" /><img src="https://s1.ax1x.com/2022/08/30/v49ECQ.png" alt="image-20220826220917403" style="zoom: 50%;" /><p>一切默认，除了构建命令改成我们之前设置的<code>npm run Netlify</code>：</p><img src="https://s1.ax1x.com/2022/08/30/v49Zgs.png" alt="image-20220826221413866" style="zoom: 50%;" /><blockquote><p>这里<code>Base Directory</code>为空表示项目目录是仓库目录的根目录。</p></blockquote><p>构建完成后我们就能够看到一个URL，打开网址就是我们的个人博客了</p><img src="https://s1.ax1x.com/2022/08/30/v49evn.png" alt="image-20220826221818587" style="zoom: 40%;" /><p>可以根据提示进行进一步的设置，比如说设置一下二级域名（即<code>Netlify.app</code>之前的域名）。</p><p>在下面的演示中，我设置的<code>Netlify</code>二级域名为<code>blogqmike</code>，也就是说，我的个人博客站点的域名为<code>blogqmike.Netlify.app</code>。</p><img src="https://s1.ax1x.com/2022/08/30/v49uD0.png" alt="image-20220826222029925" style="zoom:50%;" /><p>现在，我们的个人博客已经算是搭建完成了。下面需要解决的就是配置域名和访问慢的问题了。</p><h2 id="2-配置域名">2. 配置域名</h2><h3 id="2-1-域名解析">2.1 域名解析</h3><p>配置域名的前提自然是要购买域名了，从任意域名服务商处购买一个域名。</p><img src="https://s1.ax1x.com/2022/08/30/v49QET.png" alt="image-20220826222711048" style="zoom:67%;" /><p>然后设置域名解析，点击<code>添加记录</code>，设置记录类型为<code>CNAME</code>（DNS知识点参见计算机网络相关教程），记录值为<code>xxxxx.Netlify.app</code>，其中<code>xxxxx</code>为你自己设置的个性二级域名。</p><blockquote><p>DNS 的作用就是把域名翻译成 IP 地址，所以一般在做域名解析的时候，需要添加A（IPV4）或者AAAA（IPV6），把域名指向 IP 地址。但有的时候会需要设置多个域名指向同一个IP地址的情况，这时我们就可以把其他的域名的解析设置成 CNAME 类型，并填写记录值为那个设置了 A 或 AAAA 直接指向IP 地址的域名。这样可以避免服务器 IP变更需要重新设置多个域名解析。直白点说 A 或 AAAA 就是域名直接指向 IP，CNAME 就是域名指向另一个域名。</p></blockquote><img src="https://s1.ax1x.com/2022/08/30/v4915F.png" alt="image-20220826223518334" style="zoom:80%;" /><img src="https://s1.ax1x.com/2022/08/30/v49G8J.png" alt="image-20220827161437001" style="zoom:50%;" /><p>设置完毕之后点击“确定”按钮，需要等待一段时间即可解析完成，因为DNS服务器需要一段时间来进行同步。</p><blockquote><p>域名解析参考<a href="https://blog.csdn.net/fate_sky8521/article/details/116610662">这个文章</a></p></blockquote><h3 id="2-2-Netlify添加域名">2.2 Netlify添加域名</h3><p>我们还需要回到Netlify中配置一下自己的用户域名，这样的话可以在国外获得Netlify本身的CDN支持。</p><p>在Netlify设置用户域名：</p><img src="https://s1.ax1x.com/2022/08/30/v49YvR.png" alt="image-20220826230139118" style="zoom:50%;" /><img src="https://s1.ax1x.com/2022/08/30/v49NK1.png" alt="image-20220827161948493" style="zoom:50%;" /><p>设置一下Netlify本身的对于国外CDN的支持：</p><img src="https://s1.ax1x.com/2022/08/30/v49wVK.png" alt="image-20220826230402971" style="zoom:50%;" /><img src="https://s1.ax1x.com/2022/08/30/v49y2d.png" alt="image-20220826230431469" style="zoom:50%;" /><img src="https://s1.ax1x.com/2022/08/30/v49fVf.png" alt="image-20220826230614049" style="zoom:50%;" /><img src="https://s1.ax1x.com/2022/08/30/v4pDcn.png" alt="image-20220826230704634" style="zoom:50%;" /><p>设置成功后，Netlify的<code>Domain management</code>界面应该如下图所示</p><img src="https://s1.ax1x.com/2022/08/30/v49oGQ.png" alt="image-20220827163335498" style="zoom:50%;" /><p>可点击<code>Netlify DNS</code>进入DNS设置，并启用ipv6</p><blockquote><p>若没有手动将Netlify的四个<code>demain's name servers</code>添加到域名服务商的DNS服务器中，有可能<code>www.qmike.top</code>无法使用，但<code>qmike.top</code>仍可以正常访问，解决方法就是将这四个DNS服务器全部手动添加，添加方式参考<a href="#%E4%BF%AE%E6%94%B9DNS">下文</a>，添加完成后的结果如下图。</p><img src="https://s1.ax1x.com/2022/08/30/v4pB1s.png" alt="image-202208271626184681" style="zoom:50%;" /></blockquote><h3 id="2-3-配置https">2.3 配置https</h3><p><code>https</code>访问需要在Netlify中配置，否则应该只能<code>http</code>访问，其实 Netlify 是会自动为我们设置的。</p><p>先确认一下dns解析:</p><img src="https://s1.ax1x.com/2022/08/31/v4frkT.png" alt="verify-dns_t2hxrd" style="zoom: 33%;" /><p>然后自动安装证书:</p><img src="https://s1.ax1x.com/2022/09/02/vIafTs.png" alt="certify_syydcb" style="zoom: 33%;" /><p>最后看到如下的界面，就说明https配置完成了:</p><img src="https://s1.ax1x.com/2022/09/02/vIaTpV.png" alt="image-20220827164058381" style="zoom:50%;" /><blockquote><p>由于域名服务器的缓存原因（更改的 DNS 不能及时生效），这个时间可能会需要很久，因此可以去<a href="https://www.Netlify.com/docs/ssl/#troubleshooting">文档</a>中提到的 Google 的<a href="https://developers.google.com/speed/public-dns/cache">这个网站</a>去清空缓存，以加速这一过程。</p></blockquote><p>之后，我们就可以通过自己配置的域名访问自己的个人博客，比如说我的博客地址是 <a href="https://blog.qmike.com/">https://qmike.top</a> 。但是，此刻我们的博客访问依然需要科学上网，因为我们还没有国内的CDN的支持，下面，我们来解决这个问题。</p><h1>ClouldFlare加速</h1><p>Netlify 虽然已经提供了 CDN 加速，但在使用过程中发现国内访问还是比较慢，Cloudflare 相对于国内的七牛云、阿里云等云服务商的 CDN 速度会慢一些，但是它有免费版本，而且最重要的是域名不用备案。</p><blockquote><p>CDN 加速往往有两种方式，一种是 CDN 服务商提供一个域名，然后设置你的域名 CNAME 指向这个加速域名；另一种是CND服务商提供几个NS（DNS解析服务器）地址，然后覆盖你的域名的 NS 地址。Cloudflare就是采用的后者</p></blockquote><h2 id="1-加速步骤">1. 加速步骤</h2><h3 id="1-1-Cloudflare添加站点">1.1 Cloudflare添加站点</h3><p>注册<a href="https://www.Cloudflare.com/zh-cn/">Clouldflare</a>并登陆后，添加站点：</p><img src="https://s1.ax1x.com/2022/09/02/vIaxt1.png" alt="image-20220826232254589" style="zoom: 35%;" /><img src="https://s1.ax1x.com/2022/09/02/vIazfx.png" alt="image-20220826232525767" style="zoom: 67%;" /><p>选择免费套餐：</p><img src="https://s1.ax1x.com/2022/09/02/vId91K.png" alt="image-20220826232649191" style="zoom:50%;" /><p>添加 DNS 记录：</p><p>一般情况下 Cloudflare 会检测出来几条 DNS 记录，类型大多数是A，或者AAAA，由于我们是转发，所以应该是 CNAME 类型才对。有必要的话可能得手动配置一下。</p><img src="https://s1.ax1x.com/2022/09/02/vIdPXD.png" alt="image-20220826233333427" style="zoom:50%;" /><p>另外，这里的Cloudflare上的DNS代理状态<strong>应修改为“仅限DNS”</strong>，而非“已代理”状态，以避免出现不必要的问题。</p><blockquote><ul><li>云朵为黄色：开启 CDN，解析DHS，加速并保护站点；</li><li>云朵为灰色：仅使用 Cloudflare 的 DNS 域名解析服务。</li></ul><p>若选择“已代理”，实测可能会在Netlify上出现<code>XXXX.com doesn't appear to be served by Netlify</code>的报错，需按照<a href="https://docs.Netlify.com/domains-https/troubleshooting-tips/#certificates-and-https">troubleshooting guide</a>上面的步骤进行纠错。[<a href="https://answers.Netlify.com/t/support-guide-what-problems-could-occur-when-using-Cloudflare-in-front-of-Netlify/138">Support Guide] What problems could occur when using Cloudflare in front of Netlify?</a>上面的原话：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">We recommend not using both Cloudflare’s CDN (“Accelerate and Protect”, the orange cloud in their UI) and Netlify for the same site at the same time.</span><br><span class="line">...</span><br><span class="line">For these reasons, we recommend disabling Cloudflare’s proxying (also known as “Accelerated and protected” on their service) for your site when it is being served/hosted by Netlify.</span><br><span class="line"></span><br><span class="line">This image shows how to disable Cloudflare’s proxying, but continue using their DNS, which works great with our CDN as long as you disable proxying:</span><br></pre></td></tr></table></figure><img src="https://s1.ax1x.com/2022/09/02/vIdk0H.png" alt="260f3c44d732670efe9bce2d0d2a1eecaba44811" style="zoom:50%;" /></blockquote><h3 id="1-2-更改DNS服务器">1.2 更改DNS服务器</h3><p>这个步骤Cloudflare会提供一个在线的教程，主要步骤是在你的域名服务商那里修改 dns 解析服务器为 Cloudflare 提供的地址，修改完成后点击完成。</p><img src="https://s1.ax1x.com/2022/09/02/vIdZtI.png" alt="image-20220827083828707" style="zoom:38%;" /><p>或者进入<code>DNS</code></p><img src="https://s1.ax1x.com/2022/09/02/vIdn9P.png" alt="image-202208270842258091" style="zoom:40%;" /><p><span id="修改DNS">以阿里云为例，修改DNS服务器的步骤如下:</span></p><ul><li><p>进入域名的配置界面</p><img src="https://s1.ax1x.com/2022/09/02/vIdMjS.png" alt="image-20220827084728413" style="zoom:60%;" /></li><li><p>将域名服务器从阿里云的默认服务器改成Clouldflare提供的服务器</p><img src="https://s1.ax1x.com/2022/09/02/vIdlng.png" alt="image-202208271834117041" style="zoom: 55%;" /><blockquote><p>这里其实是在添加Netlify DNS基础上进行修改</p></blockquote></li><li><p>配置完成后，DNS 方式修改的生效时间可能比较长一些，Clouldflare会有邮件通知，或者重新登录控制台也能看到。</p><img src="https://s1.ax1x.com/2022/09/02/vIdGAs.png" alt="image-20220827085225104" style="zoom: 38%;" /></li></ul><h3 id="1-3-设置强制-https，文件压缩等">1.3 设置强制 https，文件压缩等</h3><p>修改DNS服务器后，在“快速入门指南”中按步骤修改即可。</p><img src="https://s1.ax1x.com/2022/09/02/vIdJNn.png" alt="image-20220827174530997" style="zoom:50%;" /><h2 id="2-更新https配置">2. 更新https配置</h2><p>在Cloudflare配置完成之后，我们可以回到Netlify再次更新一下https访问。</p><p>点击<code>Renew certificate</code>，等待一段时间后会自动更新完成。</p><img src="https://s1.ax1x.com/2022/09/02/vIdN90.png" alt="image-20220827185833998" style="zoom: 50%;" /><h1>测试站点</h1><p>等待一段时间之后，我们可以试着用自己的浏览器去访问自己配置的域名地址，如果在不科学上网的情况下能够正常看到如下的默认页面，则我们的个人博客就配置成功了。</p><img src="https://s1.ax1x.com/2022/09/02/vIdU3V.png" alt="image-20220827191157608" style="zoom: 38%;" /><p>本机能够正常访问之后，我们可以用<a href="https://www.boce.com/">拨测</a>来检测一下域名解析与访问的速度。</p><img src="https://s1.ax1x.com/2022/09/02/vIdacT.png" alt="image-20220827191409653" style="zoom:48%;" /><p>到此为止，我们的个人博客就彻底搭建完成啦。后续我们只需要修改博客的配置文件和博客本身的markdown源文件，然后push到github上，netlify会自动帮我们运行当初配置的建站脚本，然后将生成在public文件夹中的静态网页部署出去。</p><p>关于hexo博客的<a href="https://hexo.io/zh-cn/docs/writing">写作方法</a>与各种好看的<a href="https://hexo.io/themes/">主题的配置</a>可以查看官方的文档，多尝试多摸索，配置自己的个性页面吧。</p><h1>关于后续博客推送和主题美化</h1><blockquote><p>一些注意事项</p></blockquote><h2 id="1-博客推送">1. 博客推送</h2><ul><li><p>每次上传博文前，应先在博客根目录下运行<code>git bash</code>，运行如下指令在本地预览网页。预览无误后，<code>hexo clean</code>清理一下缓存，再推送到github远程仓库中。</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">hexo clean         <span class="comment"># 清理缓存文件，如db(database)和public文件夹等</span></span><br><span class="line">hexo g             <span class="comment"># 生成静态HTML文件</span></span><br><span class="line">hexo s             <span class="comment"># 本地运行server服务预览，打开 http://localhost:4000 即可预览你的博客</span></span><br></pre></td></tr></table></figure></li><li><p>在将本地文件推送至github远程仓库后，博客网站并不能即时更新，需要在Netlify中运行<code>Clear cache and retry deploy</code>进行重新部署，再刷新一下自己的网站。</p><img src="https://s1.ax1x.com/2022/09/02/vIdDHJ.png" alt="image-20220902110442531" style="zoom:50%;" /><blockquote><p>好像可以通过&quot;自动化部署&quot;，实现静态网站根据github远程仓库文件的即时更新，具体参考<a href="https://www.bilibili.com/video/BV1Cb4y1773P/?spm_id_from=333.788&amp;vd_source=8bba695aa4490252230ffd2e2cc0609b">这个视频</a></p></blockquote></li><li><p>注意在<code>.gitignore</code>文件中及时添加和更新不需要push到github中的文件，避免多余的文件导致网站出现错误。目前我的设置如下：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line">.DS_Store</span><br><span class="line">Thumbs.db</span><br><span class="line">db.json</span><br><span class="line">*.log</span><br><span class="line">node_modules/</span><br><span class="line">public/</span><br><span class="line">.deploy*/</span><br><span class="line">_multiconfig.yml</span><br><span class="line">.vscode/</span><br><span class="line">.idea/</span><br><span class="line">/.idea/</span><br><span class="line">.deploy_giy*/</span><br><span class="line">.idea</span><br><span class="line">themes/butterfly/.git</span><br></pre></td></tr></table></figure></li></ul><h2 id="2-主题美化">2. 主题美化</h2><ul><li><p>在本地文件中完成主题配置的修改后，需要先完成子模块的添加才能成功推送到github中。以主题<code>butterfly</code>为例，运行如下指令：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 如果是文件</span></span><br><span class="line">git <span class="built_in">rm</span> --cached themes/butterfly</span><br><span class="line"><span class="comment"># 如果执行以上命令后若提示：【 error: 如下文件其暂存的内容和工作区及 HEAD 中的都不一样：】 ，`-f`强制删除</span></span><br><span class="line">git <span class="built_in">rm</span> -f --cached themes/butterfly</span><br><span class="line"></span><br><span class="line"><span class="comment">#=添加仓库索引=======================================</span></span><br><span class="line"><span class="comment"># 创建子模块并添加butterfly的url地址</span></span><br><span class="line"><span class="comment"># 格式为git submodule add &lt;url&gt; &lt;path&gt;</span></span><br><span class="line">git submodule add https://github.com/jerryc127/hexo-theme-butterfly.git themes/butterfly</span><br><span class="line"><span class="comment"># 或者也可以使用butterfly的ssh地址</span></span><br></pre></td></tr></table></figure><p>之后会在hexo博客根目录下生成<code>.gitmodules</code>文件，里面包含了<code>butterfly</code>子模块的相关信息：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">[submodule &quot;themes/butterfly&quot;]</span><br><span class="line">path = themes/butterfly</span><br><span class="line">url = https://github.com/jerryc127/hexo-theme-butterfly.git</span><br></pre></td></tr></table></figure><blockquote><p>若不添加子模块便直接推送到github远程库，则在<code>git add .</code>这一步就会出现警告，而且在Netlify部署时无法成功。</p><p>关于子模块的其它操作可以参考<a href="https://blog.csdn.net/guotianqing/article/details/82391665">这篇文章</a></p></blockquote></li><li><p><em><strong>关于butterfly主题美化的详细过程，请参考我的<a href="https://main--blogqmike.netlify.app/2022/08/31/butterfly%E4%B8%BB%E9%A2%98%E6%8A%98%E8%85%BE%E7%AC%94%E8%AE%B0/">这篇文章</a></strong></em></p></li></ul><h1>其它注意事项</h1><ul><li><p>若需要在同一个Netlify站点重新绑定新的github远程仓库，并且不修改域名，则仅需在<code>Domain Settings --&gt; Build &amp; deploy --&gt; Repository </code>中修改绑定的github仓库，无需做其它改动。</p></li><li><p>可在Cloudflare添加<code>www</code>开头的域名前缀。</p><img src="https://s1.ax1x.com/2022/09/02/vIdsE9.png" alt="image-20220828162135315" style="zoom:50%;" /></li></ul><p><em><strong>可参考的文章：</strong></em></p><p>博客搭建：</p><ul><li><a href="https://blog.cuijiacai.com/blog-building/">个人博客搭建教程 | 爱扑bug的熊 (cuijiacai.com)</a></li><li><a href="https://www.bilibili.com/video/BV1mU4y1j72n?spm_id_from=333.999.0.0&amp;vd_source=8bba695aa4490252230ffd2e2cc0609b">保姆级Hexo+github搭建个人博客 | 视频搬运崽啊(bilibili.com)</a></li><li><a href="https://www.bilibili.com/video/BV1aV411p7Bc/?spm_id_from=333.788&amp;vd_source=8bba695aa4490252230ffd2e2cc0609b">使用Hexo搭建个人博客手摸手教学(博客搭建+butterfly主题配置全流程，强烈推荐!) | 卷二兔(bilibili.com)</a></li><li><a href="https://www.codenong.com/j5e932edaf265da47b554f34f/">使用 Hexo + GitHub + Netlify + Cloudflare 搭建个人博客 | 码农家园 (codenong.com)</a></li></ul><p>Git使用：</p><ul><li><a href="https://blog.csdn.net/weixin_43951315/article/details/104921428">Git下载、安装及环境配置（超详细）-CSDN</a></li></ul><p>node.js：</p><ul><li><a href="https://blog.csdn.net/web18224617243/article/details/123191441">node.js安装及环境配置超详细教程[Windows系统安装包方式] - CSDN</a></li></ul><p>域名解析：</p><ul><li><a href="https://blog.csdn.net/fate_sky8521/article/details/116610662">阿里云服务器实现域名解析步骤(入门级教程) - CSDN</a></li></ul><p>Cloudflare：</p><ul><li>[<a href="https://answers.Netlify.com/t/support-guide-what-problems-could-occur-when-using-Cloudflare-in-front-of-Netlify/138">Support Guide] What problems could occur when using Cloudflare in front of Netlify?</a></li><li><a href="https://jhrs.com/2019/32455.html">2022国外免费CDN cloudflare使用教程 - 江湖人士 (jhrs.com)</a></li><li><a href="https://zhuanlan.zhihu.com/p/97389072">Cloudflare 入门教程：使用 Cloudflare 免费 CDN 加速 &amp; 保护自己的网站 - 知乎 </a></li></ul>]]></content>
    
    
    <summary type="html">Win10环境下，基于Hexo框架、Github文件托管、Netlify建站、Clouflare加速的个人博客搭建教程</summary>
    
    
    
    <category term="博客" scheme="https://qmike.top/categories/%E5%8D%9A%E5%AE%A2/"/>
    
    
  </entry>
  
</feed>
