<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Asurada&#39;s Zone</title>
  
  <subtitle>风物长宜放眼量</subtitle>
  <link href="https://asurada.zone/atom.xml" rel="self"/>
  
  <link href="https://asurada.zone/"/>
  <updated>2025-01-20T09:26:57.589Z</updated>
  <id>https://asurada.zone/</id>
  
  <author>
    <name>Asurada</name>
    
  </author>
  
  <generator uri="https://hexo.io/">Hexo</generator>
  
  <entry>
    <title>CMD 和 PowerShell 中 where 命令的区别</title>
    <link href="https://asurada.zone/post/Where-Command-Difference-Between-Cmd-And-Powershell/"/>
    <id>https://asurada.zone/post/Where-Command-Difference-Between-Cmd-And-Powershell/</id>
    <published>2025-01-19T08:54:48.000Z</published>
    <updated>2025-01-20T09:26:57.589Z</updated>
    
    <content type="html"><![CDATA[<p>事情的起因是我想解决在 Windows Terminal 中使用 <code>code .</code> 命令打开的不是 VSCode 而是 Cursor 的问题。</p><span id="more"></span><h2 id="where-命令的介绍"><a href="#where-命令的介绍" class="headerlink" title="where 命令的介绍"></a>where 命令的介绍</h2><p>在 Windows 命令提示符（CMD）中，<code>where</code> 命令用于查找与指定名称匹配的可执行文件的位置，它可以帮助你确定某个程序或文件在系统中的具体路径。我的使用场景是用它来查找 <code>code</code> 命令对应的可执行文件的路径。</p><h2 id="现象"><a href="#现象" class="headerlink" title="现象"></a>现象</h2><p>在 CMD 中执行 <code>where code</code> 命令，结果符合预期，结果如下：</p><p><img src="https://pub-40b650f1eea44087adc96bf9abf9c38d.r2.dev/1-CMD%E4%B8%AD%E6%89%A7%E8%A1%8C%E7%BB%93%E6%9E%9C.png" alt="CMD 中执行结果"></p><p>但在我常用的 PowerShell 中执行的结果则是没有任何输出：</p><p><img src="https://pub-40b650f1eea44087adc96bf9abf9c38d.r2.dev/2-PS%E4%B8%AD%E6%89%A7%E8%A1%8C%E7%BB%93%E6%9E%9C.png" alt="PowerShell 中执行结果"></p><h2 id="原因"><a href="#原因" class="headerlink" title="原因"></a>原因</h2><p>这是因为在 PowerShell 中 <code>where</code> 表示的不再是 <code>where.exe</code>，而是 <code>Where-Object</code> cmdlet 的别名。而 <code>Where-Object</code> 的作用是根据属性值从集合中选择对象，和 Linux 中的 <code>grep</code> 命令作用类似，通常是结合管道一起使用的。现在直接执行 <code>where code</code> 命令，因为管道的上游没有任何输入，自然也不会输出任何内容。</p><p><img src="https://pub-40b650f1eea44087adc96bf9abf9c38d.r2.dev/4-where%E5%91%BD%E4%BB%A4%E5%9C%A8PS%E4%B8%AD%E7%9A%84%E7%BB%93%E6%9E%9C.png" alt="where 命令在 PowerShell 中的结果"></p><p>在 PowerShell 中使用 <code>where</code> 命令的正确姿势应该是使用 <code>where.exe</code> ：</p><p><img src="https://pub-40b650f1eea44087adc96bf9abf9c38d.r2.dev/3-%E5%9C%A8PS%E4%B8%AD%E5%BA%94%E8%AF%A5%E4%BD%BF%E7%94%A8whereexe.png" alt="在 PowerShell 中使用 where.exe"></p><p>或者直接在 PowerShell 中使用 <code>Get-Command</code> 命令：</p><p><img src="https://pub-40b650f1eea44087adc96bf9abf9c38d.r2.dev/6-Get-Command%E5%9C%A8PS%E4%B8%AD.png" alt="Get-Command 命令效果"></p><p>但显然 <code>Get-Command</code> 命令的输出显示方式远不如 <code>where</code> 命令直观。</p><h2 id="参考链接"><a href="#参考链接" class="headerlink" title="参考链接"></a>参考链接</h2><p><a href="https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/where">where</a></p><p><a href="https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/where-object?view=powershell-7.4">Where-Object</a></p><p><a href="https://learn.microsoft.com/zh-cn/powershell/module/microsoft.powershell.core/get-command?view=powershell-7.4">Get-Command</a></p><p><a href="https://stackoverflow.com/questions/16775686/why-doesnt-the-where-command-display-any-output-when-running-in-powershell">Why doesn’t the ‘where’ command display any output when running in PowerShell?</a></p>]]></content>
    
    
    <summary type="html">&lt;p&gt;事情的起因是我想解决在 Windows Terminal 中使用 &lt;code&gt;code .&lt;/code&gt; 命令打开的不是 VSCode 而是 Cursor 的问题。&lt;/p&gt;</summary>
    
    
    
    
    <category term="Windows" scheme="https://asurada.zone/tags/Windows/"/>
    
    <category term="PowerShell" scheme="https://asurada.zone/tags/PowerShell/"/>
    
    <category term="CMD" scheme="https://asurada.zone/tags/CMD/"/>
    
  </entry>
  
  <entry>
    <title>什么是全功能 Type-C 及显示器所需带宽如何计算</title>
    <link href="https://asurada.zone/post/What-Is-Full-Featured-Type-C/"/>
    <id>https://asurada.zone/post/What-Is-Full-Featured-Type-C/</id>
    <published>2021-01-24T07:11:42.000Z</published>
    <updated>2021-01-24T07:11:42.000Z</updated>
    
    <content type="html"><![CDATA[<p>本文主要介绍了如何计算特定分辨率和刷新率显示器所需带宽以及对全功能 Type-C 的一些简单科普。</p><span id="more"></span><h2 id="背景"><a href="#背景" class="headerlink" title="背景"></a>背景</h2><p>最近动了换新笔记本和显示器的念头，自己想换一台 4K 显示器，在了解相关知识的时候，经常看到要注意视频输出接口带宽的提醒。其中各种概念多且杂，初接触很容易懵圈，所以我整理汇总了一些网上的资料，以作此文。</p><p>文中如有不对或不妥的地方，欢迎评论留言指出错误，不甚感激。</p><h2 id="4K-60Hz-显示需要多少带宽"><a href="#4K-60Hz-显示需要多少带宽" class="headerlink" title="4K@60Hz 显示需要多少带宽"></a>4K@60Hz 显示需要多少带宽</h2><p>我们这里以一块 4K、8 bit、60 Hz 的屏幕举例，这块显示屏有 3840 * 2160 个像素点，每个像素点又由红绿蓝三个子像素构成 ，每个子像素需要 8 bit 的数据，刷新率为 60 Hz，也就是每秒需要刷新 60 次，那么每秒需要传输的数据量就是 3840 * 2160 * 3 * 8 * 60 &#x3D;  11.94 Gbit，需要的带宽就是 11.94 Gbps。</p><p>上述这些数据只是我们能够在显示屏上看到的内容，实际上在传输相关画面数据的时候，还需要考虑到防止画面撕裂，以及画面对齐等等需求，需要传输比实际显示画面更多的数据，所以实际传输的数据会比上面计算的更多。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/7-%E6%98%BE%E7%A4%BA%E5%99%A8%E5%AE%9E%E9%99%85%E4%BC%A0%E8%BE%93%E6%95%B0%E6%8D%AE.png" alt="显示器实际传输数据"></p><p>下面这张来自 B 站 Up 主<a href="https://space.bilibili.com/14871346#/">硬件茶谈</a>的表格详细列出了市面上常见分辨率及刷新率的组合分别所需要的带宽，其中还有各种显示器接口的相容性：</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/8-%E6%98%BE%E7%A4%BA%E6%8E%A5%E5%8F%A3%E7%9B%B8%E5%AE%B9%E8%A1%A8.png" alt="显示接口相容表"></p><p>显示器带宽具体的计算原理可以查看 Up 主的<a href="https://b23.tv/rbYOKW">视频-【硬件科普】4K144Hz需要传输多少数据，教你如何正确的计算显示器的带宽需求？</a>，原理及计算方法都讲得非常清楚，动画特效也是一流。</p><p>在此也强烈安利下 Up 主，最早是在知乎关注他的，在知乎笔记本话题下相当活跃，后期转型成 B 站 Up 主，视频质量极高，讲解概念深入浅出，动画精致流畅，看他的视频可谓一种享受。我从 Up 主的视频里学到了很多硬件相关基础知识。而且 Up 主现在还只是一名在校大学生，让人不服不行，在此就祝愿 Up 主早日发大财吧。</p><h2 id="什么是全功能-Type-C"><a href="#什么是全功能-Type-C" class="headerlink" title="什么是全功能 Type-C"></a>什么是全功能 Type-C</h2><p>同时具有<strong>数据传输、充电、显示</strong>三项功能的 Type-C 就称之为全功能 Type-C。而之所有会有「全功能」和「非全功能」的区分，是因为 Type-C 只是个<strong>接口形状</strong>。Type-C 接口是能够支持 100W PD 供电、DP 显示输出、USB 数据传输等功能没错，但 <strong>Type-C 接口的功能都是可以被增减的</strong>，所以并不是所有 Type-C 接口都同时具备数据传输、充电、显示三项功能。下图引用自<a href="https://zhuanlan.zhihu.com/p/101434503">【从入门到放弃】关于Type-C&#x2F;雷电3接口的两万字科普（上篇） - 知乎</a> ：</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/2-Type-C%E4%B8%8D%E5%90%8C%E5%8A%9F%E8%83%BD.png" alt="Type-C 不同功能说明"></p><p>每台电脑上面所配备的 Type-C 接口所具备的功能是不尽相同的，厂商基于成本或是其他方面的考虑，配备的 Type-C 可能只支持 USB 数据传输功能 ，不能充电、显示，也可能配备只支持 DP 显示和数据传输的 Type-C 口，不能充电。下图引用自<a href="https://zhuanlan.zhihu.com/p/101434503">【从入门到放弃】关于Type-C&#x2F;雷电3接口的两万字科普（上篇） - 知乎</a> ：</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/1-TypeC%E5%8A%9F%E8%83%BD%E4%B8%8D%E9%BD%90.png" alt="Type-C 现状"></p><h2 id="Type-C-的「数据传输」带宽"><a href="#Type-C-的「数据传输」带宽" class="headerlink" title="Type-C 的「数据传输」带宽"></a>Type-C 的「数据传输」带宽</h2><p>Type-C 接口还有一个重要的参数就是 USB 版本，USB 版本越高，带宽也就越高，理论上带宽越高，传输速度越快。不过 USB 版本的命名经过了几次大的修改，命名规范变来变去，对普通消费者识别起来极不友好。下面两张图分别引用自<a href="https://basic-tutorials.com/usb-type-c-at-a-glance-what-the-port-can-do-what-it-cant-do-and-why-it-has-nothing-to-do-with-usb-3-0/">USB type C at a glance: What the port can do, what it can’t do and why it has nothing to do with USB 3.0</a>及<a href="https://zh.wikipedia.org/wiki/USB">维基百科-USB</a>。其中 USB3.2 Gen 2x2 的 Logo 以维基百科的为准。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/3-USB%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E.png" alt="USB 版本说明"></p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/4-USB%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E%E7%BB%B4%E5%9F%BA%E7%99%BE%E7%A7%91.png" alt="USB 版本及速率(维基百科)"></p><p>通过这两张图，我们能够比较清楚地知道各个 USB 版本对应的传输速率及兼容接口。目前笔记本上 Type-C 接口的主流速率还是 USB3.2 Gen 1 也就是 5Gbps，理论速度约合 500 MB&#x2F;s。</p><p><strong>但需要注意的是，多数情况下，「USB 几点几」这样的称呼，仅仅只是用于描述接口的「数据传输」速度，不代表这个接口其他任何能力，如能否PD充电、能否显示。</strong></p><h2 id="5Gbps-的-Type-C-无法满足-4K-60Hz-输出？"><a href="#5Gbps-的-Type-C-无法满足-4K-60Hz-输出？" class="headerlink" title="5Gbps 的 Type-C 无法满足 4K@60Hz 输出？"></a>5Gbps 的 Type-C 无法满足 4K@60Hz 输出？</h2><p>这个问题也是我在没了解相关知识之前相当困惑的一个地方——当我看到心仪的笔记本只有 USB 3.2 Gen1 接口和 HDMI1.4b 的接口，而两者的带宽都远小于 4K@60Hz 所需的 12.54 Gbps 时，我当时同样以为外接 4K@60Hz 显示器是不可能实现的了。</p><p>这里面的问题就在于我们<strong>混淆了 Type-C 接口的「数据带宽」和「显示带宽」</strong>，我们日常习惯说一个 Type-C 的带宽是 3.1 Gen1 或者 Gen2、5Gbps 或者10Gbps，这时候说的其实都是这个接口的 USB 数据带宽，只能代表这个接口接 U盘&#x2F;移动硬盘之类的存储进行数据传输时所能达到的最大速度。</p><p>Type-C能够整合显示输出功能，主要是借助了DP Alt Mode（替代模式）功能，借助Type-C正反面诸多针脚中的几个定义为显示接口。通俗点说可以理解为单独做了个 DP 显示总线放在 Type-C 口上，所以数据带宽是 5Gbps 还是10Gbps 并<strong>不代表显示带宽也只有这么多</strong>。以目前 Type-C 的规范来看，当我们说一个 Type-C 支持显示输出时，那么这个接口<strong>至少可以支持 DP1.2 标准</strong>，也就是说拥有独立的约 21Gbps 的显示带宽，因为 DP1.2 中有 20% 的编码是用于校验的，所以真正能用来传输视频信号的带宽只有 21.60 * 0.8 &#x3D; 17.28 Gbps，但这也已经<strong>完全可以满足 4K@60Hz 的传输要求了</strong>。下图引用自<a href="https://zhuanlan.zhihu.com/p/98911511">【拯救者科普】笔记本外接显示器需要注意什么？ - 知乎</a>：</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/5-USBC%E7%8B%AC%E7%AB%8B%E6%98%BE%E7%A4%BA%E5%B8%A6%E5%AE%BD.png" alt="Type-C 显示拥有独立的显示带宽"></p><p>我们现在关于 5Gbps 的 Type-C 能否满足 4K@60Hz 画面传输的问题有了明确的答案，只要是<strong>支持显示输出的 Type-C 口，就可以支持输出 4K@60Hz</strong>。</p><h2 id="5Gbps-的-Type-C-的不足之处"><a href="#5Gbps-的-Type-C-的不足之处" class="headerlink" title="5Gbps 的 Type-C 的不足之处"></a>5Gbps 的 Type-C 的不足之处</h2><p>Type-C 显示输出虽然是 DP&#x2F;HDMI 显示，但实际上还是借用了数据传输的一部分引脚。当一个支持 DP 显示输出的 Type-C ，而它的数据带宽是 USB3.1 Gen1 5Gbps 时，那么此时是无法<strong>通过一根线</strong>同时实现理应互不干扰的 4K@60Hz 和 USB3.0 传输的，下图引用自<a href="https://zhuanlan.zhihu.com/p/101434503">【从入门到放弃】关于Type-C&#x2F;雷电3接口的两万字科普（上篇） - 知乎</a> ：</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/6-4K%E6%98%BE%E7%A4%BA%E8%BE%93%E5%87%BA%E7%9A%84%E5%87%A0%E7%A7%8D%E5%9C%BA%E6%99%AF.png" alt="4K 显示输出的几种场景"></p><p>因此在一些显示器的详情界面会注明——当显示器上的 USB 设置为 3.2Gen1 时，只能输出 4K@30Hz 的画面，如果想要输出 4K@60Hz 需要将 USB 设置为 2.0 或关闭。所以如果我们使用的显示器有拓展 USB 口，而我们是使用 Type-C 直连显示器，为了保证使用体验，我们需要手动将显示器上的 USB 设置为 USB2.0，此时显示器上的 USB 更适合用来接键鼠，文件传输之类的还是直连笔记本会比较快。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/9-%E6%98%BE%E7%A4%BA%E5%99%A8%E8%AF%A6%E6%83%85%E7%95%8C%E9%9D%A2%E7%9A%84%E6%8F%90%E7%A4%BA.png" alt="显示器详情界面的提示"></p><h2 id="参考链接"><a href="#参考链接" class="headerlink" title="参考链接"></a>参考链接</h2><p><a href="https://zhuanlan.zhihu.com/p/101434503">【从入门到放弃】关于Type-C&#x2F;雷电3接口的两万字科普（上篇） - 知乎</a></p><p><a href="https://zhuanlan.zhihu.com/p/101486153">【从入门到放弃】关于Type-C&#x2F;雷电3接口的两万字科普（下篇） - 知乎</a></p><p><a href="https://zhuanlan.zhihu.com/p/98911511">【拯救者科普】笔记本外接显示器需要注意什么？ - 知乎</a></p><p><a href="https://basic-tutorials.com/usb-type-c-at-a-glance-what-the-port-can-do-what-it-cant-do-and-why-it-has-nothing-to-do-with-usb-3-0/">USB type C at a glance: What the port can do, what it can’t do and why it has nothing to do with USB 3.0</a></p><p><a href="https://zh.wikipedia.org/wiki/USB">维基百科-USB</a></p><p><a href="https://b23.tv/rbYOKW">视频-【硬件科普】4K144Hz需要传输多少数据，教你如何正确的计算显示器的带宽需求？</a></p><p><a href="https://diy.pconline.com.cn/1374/13748807.html">DP vs HDMI 谁才是游戏玩家最佳选择</a></p>]]></content>
    
    
    <summary type="html">&lt;p&gt;本文主要介绍了如何计算特定分辨率和刷新率显示器所需带宽以及对全功能 Type-C 的一些简单科普。&lt;/p&gt;</summary>
    
    
    
    <category term="硬件" scheme="https://asurada.zone/categories/%E7%A1%AC%E4%BB%B6/"/>
    
    
    <category term="硬件" scheme="https://asurada.zone/tags/%E7%A1%AC%E4%BB%B6/"/>
    
    <category term="显示器" scheme="https://asurada.zone/tags/%E6%98%BE%E7%A4%BA%E5%99%A8/"/>
    
    <category term="USB" scheme="https://asurada.zone/tags/USB/"/>
    
    <category term="Type-C" scheme="https://asurada.zone/tags/Type-C/"/>
    
  </entry>
  
  <entry>
    <title>通过 Microsoft Store 购买 Win10 专业版小记</title>
    <link href="https://asurada.zone/post/Buy-WindowsPro-License/"/>
    <id>https://asurada.zone/post/Buy-WindowsPro-License/</id>
    <published>2020-11-29T05:35:47.000Z</published>
    <updated>2020-11-29T05:35:47.000Z</updated>
    
    <content type="html"><![CDATA[<p>通过 Windows 10 自带的 Microsoft Store 购买非常方便。</p><span id="more"></span><h2 id="背景"><a href="#背景" class="headerlink" title="背景"></a>背景</h2><p>双十一的时候自己组装了一台主机，在安装操作系统的时候直接安装的 Windows 10 专业版。之前自己的笔记本是从 Windows 8.1 升级成 Windows 10，自动就激活并绑定了数字许可证，但自己组装的主机就需要考虑操作系统购买的问题了。</p><p>在不激活的情况下用了一段时间，除了不能换壁纸等个性化操作以及右下角时不时显示一个未激活水印，好像也没有多大的限制。</p><p>之前我从网上简单了解到的以及微软官网上显示的，都是专业版只限企业购买，还需要电话联系销售，我看着好像还挺麻烦的样子。但实际操作下来，发现还是自己信息太闭塞，购买起来其实非常简单，直接通过自带的 Microsoft Store 应用购买即可。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/%E5%AE%98%E7%BD%91%E8%B4%AD%E4%B9%B0%E5%8F%AA%E9%99%90%E4%BC%81%E4%B8%9A.png" alt="官网显示只限企业购买"></p><h2 id="购买流程"><a href="#购买流程" class="headerlink" title="购买流程"></a>购买流程</h2><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/%E6%9C%AA%E6%BF%80%E6%B4%BB.png" alt="未激活界面"></p><p>在 Windows10 设置的「激活」页面直接有转到 Microsoft Store 购买的选项，点击会直接打开自带的 Microsoft Store 并跳转到专业版的详情界面，价格是 1458 元。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/MicrosoftStore%E8%AF%A6%E6%83%85%E7%95%8C%E9%9D%A2.png" alt="MicrosoftStore详情界面"></p><p>点击「购买」，会先通过微软账户密码确认你的身份，我开启了 Windows Hello 摄像头，直接看一眼摄像头就确认了。</p><p>之前买软件的时候已经在 Microsoft Store 中绑定过支付宝的免密支付，所以我的默认支付方式就直接是支付宝。Windows 10 专业版销售商我这里显示的是「杭州网易增盈科技有限公司」，不知道怎么和网易扯上了关系。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/%E8%B4%AD%E4%B9%B0%E7%A1%AE%E8%AE%A4%E7%95%8C%E9%9D%A2.png" alt="购买确认界面"></p><p>最后再点击一次「购买」，支付宝自动完成扣款，加载片刻，Windows 自动激活，显示「Windows 已使用与 Microsoft 账户关联的数字许可证激活」，至此就激活完成了。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/%E5%B7%B2%E6%BF%80%E6%B4%BB.png" alt="已激活"></p><h2 id="更换硬件后如何激活"><a href="#更换硬件后如何激活" class="headerlink" title="更换硬件后如何激活"></a>更换硬件后如何激活</h2><p>根据微软官网的信息，在 Windows 10（1607版本或更高版本）中，必须将 Microsoft 帐户与设备上的Windows 10 数字许可证联系起来。通过将 Microsoft 帐户与数字许可证链接起来，以后在进行重大硬件更改，比如换主板的时候，就使用激活疑难解答程序重新激活 Windows。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/%E9%93%BE%E6%8E%A5%E5%88%B0Microsoft%E8%B4%A6%E6%88%B7.png" alt="将 Windows 10 数字许可证链接到 Microsoft 帐户"></p><h2 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h2><p>整个过程非常简单，购买体验挺好。</p><h2 id="参考链接"><a href="#参考链接" class="headerlink" title="参考链接"></a>参考链接</h2><p><a href="https://support.microsoft.com/zh-cn/windows/%E5%9C%A8%E6%9B%B4%E6%8D%A2%E7%A1%AC%E4%BB%B6%E5%90%8E%E9%87%8D%E6%96%B0%E6%BF%80%E6%B4%BB-windows-10-2c0e962a-f04c-145b-6ead-fb3fc72b6665">在更换硬件后重新激活 Windows 10</a></p>]]></content>
    
    
    <summary type="html">&lt;p&gt;通过 Windows 10 自带的 Microsoft Store 购买非常方便。&lt;/p&gt;</summary>
    
    
    
    <category term="小事" scheme="https://asurada.zone/categories/%E5%B0%8F%E4%BA%8B/"/>
    
    
    <category term="正版" scheme="https://asurada.zone/tags/%E6%AD%A3%E7%89%88/"/>
    
    <category term="Windows" scheme="https://asurada.zone/tags/Windows/"/>
    
  </entry>
  
  <entry>
    <title>CODING Pages 静态网站升级腾讯云新版踩坑小记</title>
    <link href="https://asurada.zone/post/CODING-Pages-Upgrade-To-TencentCloud/"/>
    <id>https://asurada.zone/post/CODING-Pages-Upgrade-To-TencentCloud/</id>
    <published>2020-11-28T14:55:47.000Z</published>
    <updated>2020-11-28T14:55:47.000Z</updated>
    
    <content type="html"><![CDATA[<p>自己的踩坑记录证明域名未备案的同学就不要升级了，新版需要付费，但升级后强制的境外 CDN 加速导致访问速度反而不如旧版快。</p><span id="more"></span><h2 id="升级背景"><a href="#升级背景" class="headerlink" title="升级背景"></a>升级背景</h2><p>之前把博客双部署到了 CODING 静态网站和 GitHub Pages，国内的访问速度快了不少。前几天登录 CODING 后台，突然发现多了一个新版升级提醒。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/1-%E5%90%8E%E5%8F%B0%E5%8D%87%E7%BA%A7%E6%8F%90%E9%86%92.png" alt="升级提醒"></p><p>新版最大的变化就是同腾讯云进行了打通，直接把网站放到了腾讯云的对象存储 COS 上，其他 CDN 加速、SSL 证书管理也是腾讯云的功能。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/%E6%96%B0%E7%89%88%E5%8F%98%E5%8C%96.png" alt="新版的变化及优势"></p><h2 id="新版开始收费了"><a href="#新版开始收费了" class="headerlink" title="新版开始收费了"></a>新版开始收费了</h2><blockquote><p>CODING Pages 依托腾讯云资源提供相关静态托管能力，CODING 平台本身不收取任何费用。该产品使用了腾讯云对象存储 COS、内容分发网络 CDN、SSL 证书产品，其中 COS 和 CDN 采用用量计费模式，SSL 证书免费，所使用到的其他相关腾讯云产品本身亦会有一定的免费额度。</p></blockquote><p>新版因为使用了腾讯云的相关资料，所以要<strong>开始收费</strong>了。对于收费，我是能够接受的，前提是能够提供比免费更好的服务。我的图床就是使用的腾讯云的对象存储，加载速度很快，一个月几毛钱的费用低得基本可以忽略。</p><h2 id="升级流程"><a href="#升级流程" class="headerlink" title="升级流程"></a>升级流程</h2><p>新版升级界面如下：</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/%E5%8D%87%E7%BA%A7%E8%AE%BE%E7%BD%AE%E7%95%8C%E9%9D%A2.png" alt="新版升级设置界面"></p><p>因为新版是基于腾讯云的，所以升级需要先在腾讯云进行实名认证并授予相关权限。我因为之前图床就是用的腾讯云对象存储，所以已经实名过了。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/%E8%85%BE%E8%AE%AF%E4%BA%91%E6%8E%88%E6%9D%83.png" alt="腾讯云服务授权"></p><p>之前 CODING Pages 旧版是部署在腾讯云新加坡节点，现在新版部署节点可选香港、北京、上海、广州四个，但未备案域名只能选香港。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/%E8%8A%82%E7%82%B9%E9%80%89%E6%8B%A9.png" alt="节点选择提醒"></p><p>添加自定义域名前，需要前往腾讯云开启 CDN 功能，这一步就是我觉得<strong>新版最大的坑</strong>。</p><p>下一步去域名托管商更改解析记录，解析记录值都是指向了 <code>cdn.dnsv1.com</code>，这也是为什么需要开启 CDN 功能的原因。</p><p>部署的时候，「网站类型」我最开始选的是「Hexo」，结果部署失败，部署日志也不知道抽啥风，一直显示不出来，原因也不好排查。我尝试将网站类型改为「静态网站」，重新部署就成功了。</p><h2 id="这-CDN-不能要"><a href="#这-CDN-不能要" class="headerlink" title="这 CDN 不能要"></a>这 CDN 不能要</h2><p>新版升级完成后，立马测了一波速，然后被结果给吓到了，从之前的一片绿油油变成了一片惨淡的黄色，访问速度下降了不止一点半点。这就很费解了，同样都是腾讯云，之前部署在新加坡节点，现在搬到香港节点了，速度不升反降是什么情况。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/%E6%96%B0%E7%89%88%E5%BC%80%E5%90%AFCDN%E6%B5%8B%E9%80%9F%E7%BB%93%E6%9E%9C.png" alt="新版开启 CDN 测速结果"></p><p>检查解析 IP，发现域名全都被解析到了德国、爱尔兰、美国，和想象中的香港地址完全不是一回事。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/%E6%96%B0%E7%89%88%E5%BC%80%E5%90%AFCDN%E8%A7%A3%E6%9E%90IP%E7%BB%93%E6%9E%9C.png" alt="新版开启 CDN 域名解析结果"></p><p>这种情况我估摸着肯定是 CDN 的锅，去腾讯云后台一检查，发现已经开启的 CDN 设置的服务区域是「中国境外」。我想当然地以为「中国境外」的含义是指只有从国外访问网站的时候才会通过 CDN 访问，国内则是直接访问香港源站，这样虽然国内享受不到 CDN 加速，国外我设置是解析到 GitHub Pages，也用不上，但想着无非就是个鸡肋而已。</p><p>但一查文档，发现自己还是太单纯了：</p><blockquote><p>「中国境外」:全球用户访问均会调度至中国境外的加速节点进行服务。</p></blockquote><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/%E5%8A%A0%E9%80%9F%E5%8C%BA%E5%9F%9F%E6%96%87%E6%A1%A3%E8%A7%A3%E9%87%8A.png" alt="「中国境外」"></p><p>也就是说，不管是从国内还是国外访问，都会被调度到国外的 CDN 加速节点进行接入，想不经过 CDN 直接访问香港源站都不行。而比较符合我想要的效果的「全球」则需要域名进行备案之后才能开启，未备案域名开启 CDN 的话就<strong>只能选「中国境外」</strong>。</p><p>本来是用来加快访问速度的 CDN，对于使用<strong>未备案域名</strong>的博客来说，已经不仅仅是鸡肋了，反而是拖累。本来直接访问香港就能解决的事情，现在非得绕道德国、爱尔兰、美国才行，这访问速度能快起来才是怪事。</p><h2 id="尝试直连香港源站"><a href="#尝试直连香港源站" class="headerlink" title="尝试直连香港源站"></a>尝试直连香港源站</h2><p>既然这是 CDN 导致的，那我把 CDN 直接给关了，直连香港源站不就行了？</p><h3 id="关闭-CDN"><a href="#关闭-CDN" class="headerlink" title="关闭 CDN"></a>关闭 CDN</h3><p>进入腾讯云后台–&gt;「内容分发网络」–&gt;「域名管理」，关闭 CDN 加速。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/%E8%85%BE%E8%AE%AF%E4%BA%91%E5%90%8E%E5%8F%B0%E5%85%B3%E9%97%ADCDN.png" alt="关闭 CDN"></p><h3 id="更改域名解析记录"><a href="#更改域名解析记录" class="headerlink" title="更改域名解析记录"></a>更改域名解析记录</h3><p>在 DNSPod 里将国内访问解析到 CODING 提供的默认访问地址，此时再检查 DNS 解析结果发现就全部都指向了香港的 IP，达到了自己想要的效果。</p><h2 id="致命的证书问题"><a href="#致命的证书问题" class="headerlink" title="致命的证书问题"></a>致命的证书问题</h2><p>设置成直接访问香港源站后，速度果不其然就上来了，比访问新加坡节点速度还要快上一点。但很快就出现了一个更加严重的问题——证书错误。</p><p>新版申请的 SSL 证书是和 CDN 绑定在一起的，在腾讯云的证书管理里面只能部署到 CDN，而我把 CDN 关闭了，现在直接访问的是香港源站。源站的证书是颁给 <code>*.cdn.my.qcloud</code> 的，和我的域名不一致，这就会导致浏览器直接报警说网站不安全，这是不可接受的。我尝试解决这个问题，但无奈水平有限，最后也没能找到解决的办法。如果有知道如何解决证书问题的同学，麻烦指导我一下，不甚感激。</p><p>现在情况就是如果想要实现自定义域名 HTTPS 访问，就需要打开 CDN，打开 CDN 就意味着牺牲访问速度，这还是在 CDN 和 COS 需要付费的情况下。矛盾无法调和，所以最后我只能又<strong>回退到旧版</strong>了，幸好 CODING 目前还没有关闭旧版的入口，给了我一个反悔的机会。</p><h2 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h2><p>花了差不多一天的时间，最后还是老老实实回到了旧版，相当于一天白折腾了。域名没有进行备案的话，在国内使用不方便的地方真的太多了。CODING 新版静态网站我觉得对于使用已备案域名的同学来说还是不错的，配置简单，CDN 加速、SSL 证书一步到位。但同样的对于这些同学来说可供选择的方案太多了，免费的也有不少，CODING 的新版并没有太大的吸引力。</p><p>而对于未备案域名的同学新版则非常不友好，完全是<strong>负优化</strong>，完全没有升级的必要，谁会花钱找罪受呢。CODING 工程师说旧版后续会下线，到时候如果自定义域名的问题没有得到改善的话，可能就需要考虑迁移平台了。现在旧版还能用就先用着。</p><p>我向 CODING 反馈了自定义域名的问题，希望能同旧版一样使用 Let’s Encrypt 的证书，不要强行同腾讯云的 CDN 加速绑定在一起，后续如果有进一步的反馈结果的话我会同步到博客中。</p><h2 id="参考链接"><a href="#参考链接" class="headerlink" title="参考链接"></a>参考链接</h2><p><a href="https://help.coding.net/docs/pages/operating/migrate.html">官方静态网站服务升级指南</a></p>]]></content>
    
    
    <summary type="html">&lt;p&gt;自己的踩坑记录证明域名未备案的同学就不要升级了，新版需要付费，但升级后强制的境外 CDN 加速导致访问速度反而不如旧版快。&lt;/p&gt;</summary>
    
    
    
    <category term="个人博客" scheme="https://asurada.zone/categories/%E4%B8%AA%E4%BA%BA%E5%8D%9A%E5%AE%A2/"/>
    
    
    <category term="腾讯云" scheme="https://asurada.zone/tags/%E8%85%BE%E8%AE%AF%E4%BA%91/"/>
    
  </entry>
  
  <entry>
    <title>Hexo Next 主题 V7 升级 V8 记录</title>
    <link href="https://asurada.zone/post/Update-Next-From-V7-To-V8/"/>
    <id>https://asurada.zone/post/Update-Next-From-V7-To-V8/</id>
    <published>2020-09-02T15:52:41.000Z</published>
    <updated>2020-09-02T15:52:41.000Z</updated>
    
    <content type="html"><![CDATA[<p>Hexo 和 Next 最近都发布了大版本更新，此文记录了升级过程。</p><span id="more"></span><h2 id="升级-Hexo-版本"><a href="#升级-Hexo-版本" class="headerlink" title="升级 Hexo 版本"></a>升级 Hexo 版本</h2><p>Hexo 核心团队成员 Sukka 写的 <a href="https://blog.skk.moe/post/hexo-5/">Hexo 5.0.0 正式发布</a>详细介绍了 Hexo 5.0 的新特性，以及从 Hexo 4.x 升级到 Hexo 5.x 需要注意的地方。</p><p>Hexo 5.0 版本带来了不小的性能上的提升，升级 5.0 直接修改 <code>hexo-site/package.json</code> 文件：</p><figure class="highlight diff"><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">&quot;dependencies&quot;: &#123;</span><br><span class="line"><span class="deletion">-  &quot;hexo&quot;: &quot;^4.2.1&quot;,</span></span><br><span class="line"><span class="addition">+  &quot;hexo&quot;: &quot;^5.1.1&quot;,</span></span><br></pre></td></tr></table></figure><p>然后再执行 <code>npm upadte</code> 命令即可。</p><p>升级完 Hexo ，<code>_config.yml</code> 并不会更新，而 Hexo 5.0 是有新增和改动一些其中的配置项的，所以需要我们自己去 <a href="https://github.com/hexojs/hexo-starter/blob/master/_config.yml">GitHub</a> 上查看站点配置文件的变动情况，并手动同步这些修改到自己的站点配置文件里。</p><p>主要的变动就是新增了 <code>prismjs</code> 相关配置项以及更新了 <code>updated_option</code> 配置项。</p><h2 id="升级-Next-V8-0-0-版本"><a href="#升级-Next-V8-0-0-版本" class="headerlink" title="升级 Next V8.0.0 版本"></a>升级 Next V8.0.0 版本</h2><p>使用 Hexo 5.0 及以上版本，升级 Next 主题最简单的方法就是通过 <code>npm</code> 安装，进入博客根目录，执行以下命令即可安装最新版本的 Next 主题：</p><figure class="highlight autoit"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm install hexo-theme-<span class="keyword">next</span></span><br></pre></td></tr></table></figure><p>通过 <code>npm</code> 安装的 Next 主题默认文件夹路径为 <code>hexo-site/node_modules/hexo-theme-next</code> 。因为有一些自定义修改可能会需要我们改动主题的源文件，而因为整个 <code>node_modules/</code> 被<code>gitignore</code> 文件所忽略，将会导致我们无法用 Git 记录我们对主题源文件的修改。</p><p>所以我将之前版本的 Next 主题文件夹进行改名，将 <code>hexo-site/theme/next</code> 改成了 <code>hexo-site/theme/next-V7</code>。然后将 <code>hexo-theme-next</code>  文件夹的内容复制到 <code>hexo-site/theme/next</code> 。这样就能将主题文件夹加入 Git 的管理之中了。</p><p>这里切记不要直接将旧版本的 Next 主题文件夹直接删除，因为后面可能有配置以及文件需要进行迁移。</p><p>更名完成后，使用 <code>hexo version</code> 查看版本号，可以看到一个硕大的 <code>Next</code> Logo 以及下方显示 <code>NexT version 8.0.0</code>，说明现在已经成功启用 Next V8 版本。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/%E6%9F%A5%E7%9C%8BNext%E7%89%88%E6%9C%AC%E5%8F%B7.png" alt="查看 Next 版本号"></p><h2 id="迁移配置文件"><a href="#迁移配置文件" class="headerlink" title="迁移配置文件"></a>迁移配置文件</h2><p>在之前使用 Next V7 版本的时候，我是利用 Hexo 的 Data Files 功能将主题配置放置在站点的 <code>source/_data/next.yml</code> 文件中。但这种做法在 V8 版本被官方告知已经过时，并<strong>将在一段时间后停止支持</strong>，现在推荐的做法是<a href="https://theme-next.js.org/docs/getting-started/configuration.html">使用 Alternate Theme Config 存储配置</a>，需要 Hexo 版本在 5.0 及以上。</p><p>这里可以选择一步到位直接将主题配置整合到站点配置文件 <code>_config.yml</code> 中去，也可以选择依然使用独立的主题配置文件，我选择的是第二种。具体流程如下：</p><h3 id="创建并配置-config-next-yml-文件"><a href="#创建并配置-config-next-yml-文件" class="headerlink" title="创建并配置 _config.next.yml 文件"></a>创建并配置 <code>_config.next.yml</code> 文件</h3><p>在博客根目录下新建 <code>_config.next.yml</code> 文件。</p><p>因为 Next V8 有不少配置项发生了变更，所以我索性选择了重新配置。先将 <code>hexo-site/node_modules/hexo-theme-next/_config.yml</code> 中的内容复制到 <code>_config.next.yml</code> 中。然后用 Beyond Compare 软件对新主题配置文件 <code>_config.next.yml</code> 和旧主题配置文件 <code>source/_data/next.yml</code> 两者进行文本比较，根据自己的需求迁移整合相关配置项。</p><p>修改完成后，将旧主题配置文件 <code>source/_data/next.yml</code> 改名，我是改成了 <code>next-old.yml</code>，名字随意，只要能同原来的 <code>next.yml</code> 区别开来即可。</p><p>从 V7 升级到 V8 主要有下面几个变化：</p><ul><li>Hexo 5.0 版本移除了对于 swig 模版的支持，使用 Nunjucks 代替 swig 作为模版引擎，主题配置文件内 <code>custom_file_path</code> 支持文件的后缀也从 <code>.swig</code> 变成了 <code>.njk</code>。所以如果此前根据 swig 的语法写过自定义内容，请在更新前确认它们是与 Nunjucks 兼容的，否则会报错，且生成的页面为空白。例如， Nunjucks 只支持 <code>and</code> 运算符，需要替换掉 swig 中的 <code>&amp;&amp;</code>。</li><li>Next V8 将自带的 Font Awesome 图标库由 4.7.0 版本升级为了 5.13.0 版本。此次升级并不向下兼容，所以需要修改配置文件中与 Font Awesome 相关的内容，否则图标可能无法正常显示。</li><li>NexT V8 已支持一键切换 CDN 服务商，而不需要为每个插件单独设置 CDN 地址。但需要注意，如果是使用最新版的 Next，那么一定要保持 <code>internal: local</code> 的默认设置不变。</li><li>如果此前配置过 Valine，需要注意将主题配置文件中的 <code>appid</code> 和 <code>appkey</code> 改为 <code>appId</code> 和 <code>appKey</code> 。否则会出现 Valine 无法正常加载的现象。</li><li>由于 Velocity.js 缺乏维护，NexT V8 使用 Animate.css 代替之。两者的动画效果几乎完全一致，除了动画名称略有不同。如果在配置文件中设置了旧的名称（例如 slideDownIn），请将其移除或根据此网页选择新的动画效果：<a href="http://theme-next.js.org/animate/">http://theme-next.js.org/animate/</a></li></ul><p>更多详细信息，可以自行查询 Next <a href="https://github.com/next-theme/hexo-theme-next/issues/4">相关官方说明</a>以及<a href="https://theme-next.js.org/docs/">官方文档</a>。</p><h3 id="迁移-Favicon-位置"><a href="#迁移-Favicon-位置" class="headerlink" title="迁移 Favicon 位置"></a>迁移 Favicon 位置</h3><p>之前我博客的 Favicon 图片啥的都是放在 <code>hexo-site/themes/next/source/images</code> 目录下面，正好趁着这次升级的机会，将图片全部移到了 <code>hexo-site/source/images</code> 下（没有这个文件夹就自己新建）。</p><p>不要忘记去 <code>_config.next.yml</code> 检查下 Favicon 相关配置的文件名是否正确，默认的都带有 <code>-next</code>  后缀。</p><h2 id="自定义修改迁移"><a href="#自定义修改迁移" class="headerlink" title="自定义修改迁移"></a>自定义修改迁移</h2><p>这一部分是最麻烦的，因为跨版本升级，很多源文件的位置以及名称都发生了变化，比如每篇文章结尾处的版权声明的样式文件就从 <code>post-copyright.styl</code> 变成了 <code>post-footer.styl</code>。而且模版引擎也从swig 变更成了 Nunjucks，虽然大部分内容是可以互相兼容的，但万一碰到不兼容的，排查起来就比较麻烦了。</p><p>所幸我的自定义修改并不多，而且都是 Nunjucks 兼容的，所以迁移起来相对较快。在进行迁移的时候，利用类似 Beyond Compare 之类的文件比较软件可以有效提高迁移速度，推荐大家尝试。</p><h2 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h2><p>折腾了一天，成功从 Next V7 升级到了 V8，升级所带来肉眼可见的变化并不多，只有一些诸如赞赏按钮样式之类的小变动，其他更多都是内部的一些变动。</p><p>我是喜欢自己折腾，而且及时使用新版，可以帮助发现并反馈问题，可以帮助 Next 主题更好地进行迭代。</p><h2 id="参考链接"><a href="#参考链接" class="headerlink" title="参考链接"></a>参考链接</h2><p><a href="https://github.com/next-theme/hexo-theme-next">hexo-theme-next README.md</a></p><p><a href="https://theme-next.js.org/docs/">Next 官方文档</a></p><p><a href="https://github.com/next-theme/hexo-theme-next/issues/4">Next【必读】更新说明及常见问题 </a></p><p><a href="https://blog.skk.moe/post/hexo-5/">Hexo 5.0.0 正式发布</a></p>]]></content>
    
    
    <summary type="html">&lt;p&gt;Hexo 和 Next 最近都发布了大版本更新，此文记录了升级过程。&lt;/p&gt;</summary>
    
    
    
    <category term="个人博客" scheme="https://asurada.zone/categories/%E4%B8%AA%E4%BA%BA%E5%8D%9A%E5%AE%A2/"/>
    
    
    <category term="Hexo" scheme="https://asurada.zone/tags/Hexo/"/>
    
    <category term="Next" scheme="https://asurada.zone/tags/Next/"/>
    
  </entry>
  
  <entry>
    <title>为什么 robots.txt 不应该再屏蔽 JS 和 CSS 了</title>
    <link href="https://asurada.zone/post/Why-Shouldnot-Block-JS-And-CSS-Files-In-Robotstxt-Anymore/"/>
    <id>https://asurada.zone/post/Why-Shouldnot-Block-JS-And-CSS-Files-In-Robotstxt-Anymore/</id>
    <published>2020-08-31T12:32:51.000Z</published>
    <updated>2020-08-31T12:32:51.000Z</updated>
    
    <content type="html"><![CDATA[<p>根据谷歌官方的建议，robots.txt 已经不需要再屏蔽 JavaScript、CSS 文件了。</p><span id="more"></span><h2 id="屏蔽是过时的做法"><a href="#屏蔽是过时的做法" class="headerlink" title="屏蔽是过时的做法"></a>屏蔽是过时的做法</h2><p>在前期查找相关资料的时候，我注意到不少博客都建议在 <code>robots.txt</code> 中禁止搜索引擎抓取网站的 JavaScript、CSS 文件，但其中大多数文章并没有给出为什么要这样做的具体理由。</p><p>但我觉得现在已经有理由相信这种做法是<strong>过时且不必要</strong> 的。谷歌在其官方的<a href="https://support.google.com/webmasters/answer/7451184">搜索引擎优化 (SEO) 新手指南</a>中的「让 Google 以用户视角查看网页」章节中明确提到：</p><blockquote><p>当 Googlebot 抓取某个网页时，它应<a href="https://webmasters.googleblog.com/2014/05/understanding-web-pages-better.html">以普通用户查看网页的方式来查看它</a>。为了实现最佳的呈现和索引编制效果，请始终允许 Googlebot 访问您网站所用的 JavaScript、CSS 和图片文件。如果您网站的 robots.txt 文件禁止抓取这些资源，则会直接影响到我们的算法呈现您的内容并将其编入索引的效果，进而导致您的网站排名降低。</p></blockquote><p>可以看到，禁止 JavaScript、CSS 文件的抓取不仅不会对 SEO 有任何正向的帮助，反而可能会起到降低网站排名的负面效果。</p><p>至于更具体的理由，谷歌在 <a href="https://webmasters.googleblog.com/2014/05/understanding-web-pages-better.html">Understanding web pages better</a> （也就是上方引用的「以普通用户查看网页的方式来查看它」）中进行了进一步的解释，中心思想可以总结如下：</p><ol><li>时代已经变了，JavaScript、CSS 已经变成现代网页不可或缺的一部分了，它们让我们的网页变得更加丰富、更加美观，如果禁止 JS、CSS 被搜索引擎抓取，结果导致网页不能被更好地渲染，这对搜索者以及网站站长双方来说都是一种损失。</li><li>为了避免这种双输的局面，我们（谷歌）为此做了很多工作，现在我们（谷歌）的抓取系统已经能够<strong>以普通用户查看网页的方式来查看它</strong>，而 JavaScript、CSS 代码是普通用户浏览网页时非常重要的组成的部分，所以不要再屏蔽 JavaScript、CSS 文件了。</li></ol><p>上面这些都是谷歌在 2015 年就开始提倡的做法，所以现在已经 2020 年了，我们完全可以放心地让搜索引擎抓取我们的 JavaScript、CSS 文件，这样做对 SEO 有百利而无一害。</p><h2 id="我的-robots-txt"><a href="#我的-robots-txt" class="headerlink" title="我的 robots.txt"></a>我的 robots.txt</h2><p>在博客根目录下的 <code>public</code> 文件夹内新建 <code>robots.txt</code> 文件，然后 <code>hexo d</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></pre></td><td class="code"><pre><span class="line"># 允许任何搜索引擎抓取任何页面</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://asurada.zone/sitemap.xml</span><br><span class="line">Sitemap: https://asurada.zone/baidusitemap.xml</span><br></pre></td></tr></table></figure><h2 id="参考链接"><a href="#参考链接" class="headerlink" title="参考链接"></a>参考链接</h2><p><a href="https://support.google.com/webmasters/answer/7451184">谷歌官方搜索引擎优化 (SEO) 新手指南</a></p><p><a href="https://webmasters.googleblog.com/2014/05/understanding-web-pages-better.html">Understanding web pages better</a> </p><p><a href="https://yoast.com/dont-block-css-and-js-files/">Don’t block CSS and JS files</a></p>]]></content>
    
    
    <summary type="html">&lt;p&gt;根据谷歌官方的建议，robots.txt 已经不需要再屏蔽 JavaScript、CSS 文件了。&lt;/p&gt;</summary>
    
    
    
    <category term="个人博客" scheme="https://asurada.zone/categories/%E4%B8%AA%E4%BA%BA%E5%8D%9A%E5%AE%A2/"/>
    
    
    <category term="SEO" scheme="https://asurada.zone/tags/SEO/"/>
    
  </entry>
  
  <entry>
    <title>Git 常用命令备忘录</title>
    <link href="https://asurada.zone/post/Git-Cheat-Sheet/"/>
    <id>https://asurada.zone/post/Git-Cheat-Sheet/</id>
    <published>2020-08-30T08:57:45.000Z</published>
    <updated>2020-08-30T08:57:45.000Z</updated>
    
    <content type="html"><![CDATA[<p>一些不太常用的 Git 命令往往隔一段时间不用就忘记了，特写此篇备忘。</p><span id="more"></span><h2 id="配置-User-信息"><a href="#配置-User-信息" class="headerlink" title="配置 User 信息"></a>配置 User 信息</h2><h3 id="添加-User-信息"><a href="#添加-User-信息" class="headerlink" title="添加 User 信息"></a>添加 User 信息</h3><figure class="highlight shell"><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 | --local] user.name &#x27;your_name&#x27;</span><br><span class="line">git config [--global | --local] user.email &#x27;your_email&#x27;</span><br></pre></td></tr></table></figure><ul><li>默认为 local，所以只有需要设置全局时需要带 –global 参数，–local 参数可以直接省略。</li><li>单引号不是必须的，可以省略。一般只在输入的内容之中含有空格的时候需要使用单引号。</li></ul><h3 id="查看-User-信息"><a href="#查看-User-信息" class="headerlink" title="查看 User 信息"></a>查看 User 信息</h3><p>使用以下命令查看所有全局&#x2F;局部配置信息：</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">git config --list [--local | --global | --system]</span><br></pre></td></tr></table></figure><p>或者使用以下命令直接查看具体设置：</p><figure class="highlight shell"><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 | --local] user.name</span><br><span class="line">git config [--global | --local] user.email</span><br></pre></td></tr></table></figure><h3 id="global-与-local-优先级以及配置文件所在位置"><a href="#global-与-local-优先级以及配置文件所在位置" class="headerlink" title="global 与 local 优先级以及配置文件所在位置"></a>global 与 local 优先级以及配置文件所在位置</h3><p>local &gt; global</p><p>local 配置位于当前仓库的 .git 文件夹下的 config 文件中。</p><p>global 配置位于当前用户 home 目录下的 .gitconfig 文件中。</p><h2 id="独自使用-Git-常见使用场景"><a href="#独自使用-Git-常见使用场景" class="headerlink" title="独自使用 Git 常见使用场景"></a>独自使用 Git 常见使用场景</h2><h3 id="git-log-常用参数"><a href="#git-log-常用参数" class="headerlink" title="git log 常用参数"></a>git log 常用参数</h3><ul><li>git log –all 查看所有分支的历史</li><li>git log –graph 图形化查看 log 历史</li><li>git log –oneline 查看单行的简洁历史</li><li>git log -n 查看最近 n 条历史</li></ul><h3 id="删除不需要的分支"><a href="#删除不需要的分支" class="headerlink" title="删除不需要的分支"></a>删除不需要的分支</h3><p>普通删除(如果当前分支没有被合并，不能直接删除)：</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">git branch -d 分支名</span><br></pre></td></tr></table></figure><p>强制删除：</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">git branch -D 分支名</span><br></pre></td></tr></table></figure><h3 id="修改最近一次的-commit-内容"><a href="#修改最近一次的-commit-内容" class="headerlink" title="修改最近一次的 commit 内容"></a>修改最近一次的 commit 内容</h3><p>命令：</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">git commit --amend</span><br></pre></td></tr></table></figure><h3 id="修改最近一次-commit-的作者"><a href="#修改最近一次-commit-的作者" class="headerlink" title="修改最近一次 commit 的作者"></a>修改最近一次 commit 的作者</h3><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">git commit --amend --author=&quot;AuthorName &lt;email@address.com&gt;&quot; --no-edit</span><br></pre></td></tr></table></figure><p>其中 <code>no-edit</code> 的作用是表明此次修改仅修改作者，而不需要对 <code>commit message</code> 进行改动，所以不需要启动编辑器。</p><h3 id="修改老旧-commit-的-message"><a href="#修改老旧-commit-的-message" class="headerlink" title="修改老旧 commit 的 message"></a>修改老旧 commit 的 message</h3><ol><li><p>进入交互式变基策略修改：</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">git rebase -i 想要修改的提交节点的父节点的 HASH 值</span><br></pre></td></tr></table></figure><p>如果想要修改第一次提交，也就是最早的那次提交，没有父节点的提交，使用命令：</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">git rebase -i --root</span><br></pre></td></tr></table></figure></li><li><p>修改策略：</p><p>在 vi 模式下将想要修改的 commit 前面的选项由 pick 变更为 r 或者 reword，这一选项的含义为此 commit 的内容不变，只修改其 commit message。</p></li><li><p>修改 commit message</p></li></ol><p>注意事项：某个 commit 修改后，它本身以及它后面所有 commit 的 hash 值都会发生变化，这是因为message 也是 commit 的属性，是确定 commit 的 hash 值的一个因子。其次，second_commit 有个 parent 的属性，parent 的内容发生了变化，因此，second_commit 的 hash 也变了。</p><p>如果最早的提交也即 root commit 发生了变化，那么会产生一个新的 root commit，即出现了两个祖宗 commit。</p><h3 id="把连续的多个-commit-整理成一个"><a href="#把连续的多个-commit-整理成一个" class="headerlink" title="把连续的多个 commit 整理成一个"></a>把连续的多个 commit 整理成一个</h3><ol><li><p>进入交互式变基策略修改：</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">git rebase -i 想要修改的提交节点的父节点的 HASH 值</span><br></pre></td></tr></table></figure><p>如果想要修改第一次提交，也就是最早的那次提交，没有父节点的提交，使用命令：</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">git rebase -i --root</span><br></pre></td></tr></table></figure></li><li><p>修改策略：</p><p>将准备被合并的 commit 前面的选项由 pick 改为 s 或者 squash，这一选项的含义为继续使用这一 commit，但是将其合并到前面(比它老)的那一个 commit 里面去，想要合并哪几个就将这几个前面的选项都改成 s。</p></li><li><p>修改 commit message</p></li></ol><h3 id="把间隔的多个-commit-整理成一个"><a href="#把间隔的多个-commit-整理成一个" class="headerlink" title="把间隔的多个 commit 整理成一个"></a>把间隔的多个 commit 整理成一个</h3><p>原理和方法同“把连续的多个 commit 整理成一个”是一样的，只是 rebase 策略的不一样：</p><ul><li>将想要整理的 commit 通过剪切，按照自己想要的顺序移动到一起，排在上面的是越老的</li><li>将想要整理的 commit 前面的选项变更为 s</li><li>最后这些 commit 会同上方最近的一个选项为 pick 的 commit 合并</li></ul><p>会用到的 vim 快捷键：</p><figure class="highlight less"><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="selector-tag">dd</span><span class="comment">//剪切一行，也可以用来删除一行</span></span><br><span class="line"><span class="selector-tag">dw</span><span class="comment">//删除一个单词</span></span><br><span class="line"><span class="selector-tag">u</span><span class="comment">//撤销</span></span><br><span class="line"><span class="selector-tag">p</span><span class="comment">//粘贴</span></span><br></pre></td></tr></table></figure><h3 id="比较暂存区和-HEAD-所含文件的差异"><a href="#比较暂存区和-HEAD-所含文件的差异" class="headerlink" title="比较暂存区和 HEAD 所含文件的差异"></a>比较暂存区和 HEAD 所含文件的差异</h3><p>HEAD 所含文件就是最新一个 commit 内的文件内容</p><figure class="highlight ada"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">git diff <span class="comment">--cached</span></span><br></pre></td></tr></table></figure><h3 id="比较工作区和暂存区所含文件的差异"><a href="#比较工作区和暂存区所含文件的差异" class="headerlink" title="比较工作区和暂存区所含文件的差异"></a>比较工作区和暂存区所含文件的差异</h3> <figure class="highlight ebnf"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="attribute">git diff</span></span><br></pre></td></tr></table></figure><p>后面可以接“– 单个或多个文件名”来查看特定文件的差异</p><h3 id="比较工作区和-HEAD-所含文件的差异"><a href="#比较工作区和-HEAD-所含文件的差异" class="headerlink" title="比较工作区和 HEAD 所含文件的差异"></a>比较工作区和 HEAD 所含文件的差异</h3><figure class="highlight ebnf"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="attribute">git diff HEAD</span></span><br></pre></td></tr></table></figure><h3 id="让暂存区恢复成和-HEAD-一样"><a href="#让暂存区恢复成和-HEAD-一样" class="headerlink" title="让暂存区恢复成和 HEAD 一样"></a>让暂存区恢复成和 HEAD 一样</h3><figure class="highlight ebnf"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="attribute">git reset HEAD</span></span><br></pre></td></tr></table></figure><p>git reset 默认的参数为 –mixed</p><h3 id="让工作区的文件恢复为和暂存区一样"><a href="#让工作区的文件恢复为和暂存区一样" class="headerlink" title="让工作区的文件恢复为和暂存区一样"></a>让工作区的文件恢复为和暂存区一样</h3><figure class="highlight ada"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">git checkout <span class="comment">-- 文件名</span></span><br></pre></td></tr></table></figure><p>Git 2.23 版本以后使用 <code>git restore</code>命令来代替<code>git checkout</code>功能</p><h3 id="取消暂存区部分文件的更改"><a href="#取消暂存区部分文件的更改" class="headerlink" title="取消暂存区部分文件的更改"></a>取消暂存区部分文件的更改</h3><p>将暂存区部分文件取消暂存的意思是所做的改动继续保留在工作目录，暂存区部分的内容同 HEAD 保持一致。</p><figure class="highlight pgsql"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">git <span class="keyword">reset</span> HEAD <span class="comment">--文件名</span></span><br></pre></td></tr></table></figure><p>Git 新版本使用：</p><figure class="highlight stata"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">git <span class="keyword">restore</span> --staged &lt;<span class="keyword">file</span>&gt;</span><br></pre></td></tr></table></figure><p>两条命令作用是一样的。</p><h3 id="消除最近的几次提交"><a href="#消除最近的几次提交" class="headerlink" title="消除最近的几次提交"></a>消除最近的几次提交</h3><figure class="highlight pgsql"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">git <span class="keyword">reset</span> <span class="comment">--hard &lt;hash&gt;</span></span><br></pre></td></tr></table></figure><p>将工作区和暂存区的内容都恢复到 hash 值所对应的那个 commit 的状态。</p><h3 id="看不同提交的指定文件的差异"><a href="#看不同提交的指定文件的差异" class="headerlink" title="看不同提交的指定文件的差异"></a>看不同提交的指定文件的差异</h3><figure class="highlight css"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">git diff <span class="selector-attr">[from_commit]</span> <span class="selector-attr">[to_commit]</span></span><br></pre></td></tr></table></figure><h3 id="正确删除文件的方法"><a href="#正确删除文件的方法" class="headerlink" title="正确删除文件的方法"></a>正确删除文件的方法</h3><figure class="highlight xml"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">git rm <span class="tag">&lt;<span class="name">filename</span>&gt;</span></span><br></pre></td></tr></table></figure><h2 id="本地与远程仓库的交互"><a href="#本地与远程仓库的交互" class="headerlink" title="本地与远程仓库的交互"></a>本地与远程仓库的交互</h2><h3 id="让-Fork-的仓库同源仓库保持更新"><a href="#让-Fork-的仓库同源仓库保持更新" class="headerlink" title="让 Fork 的仓库同源仓库保持更新"></a>让 Fork 的仓库同源仓库保持更新</h3><h4 id="添加源仓库"><a href="#添加源仓库" class="headerlink" title="添加源仓库"></a>添加源仓库</h4><figure class="highlight routeros"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">git remote <span class="built_in">add</span> upstream 源仓库链接</span><br></pre></td></tr></table></figure><h4 id="同步更新"><a href="#同步更新" class="headerlink" title="同步更新"></a>同步更新</h4><ol><li>如果在另一个分支上，就切换到 master 分支</li></ol><figure class="highlight crmsh"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">git checkout <span class="literal">master</span></span><br></pre></td></tr></table></figure><ol start="2"><li>从源仓库抓取最新更改后，合并到本地 master 分支</li></ol><figure class="highlight ebnf"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="attribute">git pull upstream</span></span><br></pre></td></tr></table></figure><ol start="3"><li>将本地 master 分支推送到自己 Fork 的远程仓库  origin</li></ol><figure class="highlight maxima"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">git <span class="built_in">push</span> <span class="built_in">origin</span></span><br></pre></td></tr></table></figure><h4 id="进阶版"><a href="#进阶版" class="headerlink" title="进阶版"></a>进阶版</h4><ol><li>将 master 分支的上游仓库设置为源仓库</li></ol><figure class="highlight crmsh"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">git branch --<span class="attr">set-upstream-to=</span>upstream/<span class="keyword">master</span> <span class="title">master</span></span><br></pre></td></tr></table></figure><ol start="2"><li>将 push 命令推送的默认仓库设置为自己 Forked 的仓库 origin</li></ol><figure class="highlight lua"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">git <span class="built_in">config</span> <span class="comment">--local remote.pushDefault origin</span></span><br></pre></td></tr></table></figure><ol start="3"><li>搞定之后，工作流程为更加简单：</li></ol><figure class="highlight shell"><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">git checkout master</span><br><span class="line">git pull//默认从源仓库拉取最新的更新</span><br><span class="line">git push//将拉取的更新推送到 Forked 的仓库</span><br></pre></td></tr></table></figure><h3 id="推送一个新的分支到远程仓库"><a href="#推送一个新的分支到远程仓库" class="headerlink" title="推送一个新的分支到远程仓库"></a>推送一个新的分支到远程仓库</h3><p>-u 是 –set-upstream 的简写，该标记会为之后轻松地推送与拉取配置分支</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">git push -u remote_name new_branch_name</span><br></pre></td></tr></table></figure><h3 id="清理本地无效的远程追踪分支"><a href="#清理本地无效的远程追踪分支" class="headerlink" title="清理本地无效的远程追踪分支"></a>清理本地无效的远程追踪分支</h3><p>利用选项 –prune</p><figure class="highlight css"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">git remote update -<span class="selector-tag">p</span></span><br></pre></td></tr></table></figure><h3 id="远程删除了分支本地也想删除"><a href="#远程删除了分支本地也想删除" class="headerlink" title="远程删除了分支本地也想删除"></a>远程删除了分支本地也想删除</h3><figure class="highlight ebnf"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="attribute">git remote prune origin</span></span><br></pre></td></tr></table></figure><h3 id="删除远程分支"><a href="#删除远程分支" class="headerlink" title="删除远程分支"></a>删除远程分支</h3><figure class="highlight maxima"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">git <span class="built_in">push</span> <span class="built_in">origin</span> --<span class="built_in">delete</span> &lt;remote-branchname&gt;</span><br></pre></td></tr></table></figure><p>或者</p><figure class="highlight elixir"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">git push origin <span class="symbol">:&lt;remote-branchname&gt;</span></span><br></pre></td></tr></table></figure><h3 id="从远程分支中创建并切换到本地分支"><a href="#从远程分支中创建并切换到本地分支" class="headerlink" title="从远程分支中创建并切换到本地分支"></a>从远程分支中创建并切换到本地分支</h3><figure class="highlight xml"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">git checkout -b <span class="tag">&lt;<span class="name">branch-name</span>&gt;</span> <span class="tag">&lt;<span class="name">remote-name</span>&gt;</span>/<span class="tag">&lt;<span class="name">branch-name</span>&gt;</span></span><br></pre></td></tr></table></figure><h2 id="参考链接"><a href="#参考链接" class="headerlink" title="参考链接"></a>参考链接</h2><p><a href="https://github.com/521xueweihan/git-tips">Git的奇技淫巧</a></p>]]></content>
    
    
    <summary type="html">&lt;p&gt;一些不太常用的 Git 命令往往隔一段时间不用就忘记了，特写此篇备忘。&lt;/p&gt;</summary>
    
    
    
    <category term="开发环境" scheme="https://asurada.zone/categories/%E5%BC%80%E5%8F%91%E7%8E%AF%E5%A2%83/"/>
    
    
    <category term="Git" scheme="https://asurada.zone/tags/Git/"/>
    
  </entry>
  
  <entry>
    <title>Hexo 博客主流搜索引擎收录详细指南</title>
    <link href="https://asurada.zone/post/Blog-Search-Engine-Index/"/>
    <id>https://asurada.zone/post/Blog-Search-Engine-Index/</id>
    <published>2020-08-28T13:42:21.000Z</published>
    <updated>2020-08-28T13:42:21.000Z</updated>
    
    <content type="html"><![CDATA[<p>如果希望自己博客的内容被更多人看到，搜索引擎所带来的流量是不容忽视的。本文详细介绍了如何向各大主流搜索引擎主动提交自己的博客，期望达到加快收录速度的目的。</p><span id="more"></span><h2 id="生成站点地图"><a href="#生成站点地图" class="headerlink" title="生成站点地图"></a>生成站点地图</h2><blockquote><p>什么是站点地图？</p><p>站点地图是一种文件，您可以在其中提供与您网站中的网页、视频或其他文件有关的信息，还可以说明这些内容之间的关系。Google 等搜索引擎会读取此文件，以便更加智能地抓取您的网站。站点地图会告诉 Google 您认为网站中的哪些网页和文件比较重要，还会提供与这些文件有关的重要信息：以网页为例，这些信息包括网页上次更新的时间、网页更改的频率，以及网页是否有其他语言版本。</p><p><em><a href="https://support.google.com/webmasters/answer/156184?hl=zh-Hans&ref_topic=4581190">谷歌帮助-了解站点地图</a></em></p></blockquote><p>安装  <a href="https://github.com/hexojs/hexo-generator-sitemap">hexo-generator-sitemap</a> 插件：</p><figure class="highlight shell"><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-sitemap --save</span><br></pre></td></tr></table></figure><p>安装插件以后，执行 <code>hexo  g</code> 命令，即可在 <code>public</code> 文件夹下找到新生成的 <code>sitemap.xml</code> 文件。</p><h2 id="让百度收录站点"><a href="#让百度收录站点" class="headerlink" title="让百度收录站点"></a>让百度收录站点</h2><h3 id="百度验证域名"><a href="#百度验证域名" class="headerlink" title="百度验证域名"></a>百度验证域名</h3><p>刚建站的时候，百度是没有收录我们的网站的，这时在搜索框输入 <code>site:&lt;域名&gt;</code>  ，结果应该是下面这样的，点击「提交网址」来提交我们的站点。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/1-%E7%99%BE%E5%BA%A6%E6%9C%AA%E6%94%B6%E5%BD%95.png" alt="百度未收录"></p><p>点击后会进入「<a href="https://ziyuan.baidu.com/site">百度搜索资源平台</a>」，用自己的百度账号进行登录。登录后「站点管理」–&gt; 「添加站点」–&gt; 「添加网站」。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/7-%E7%99%BE%E5%BA%A6%E6%B7%BB%E5%8A%A0%E7%AB%99%E7%82%B9%E8%B7%AF%E5%BE%84.png" alt="百度添加网站"></p><p>百度添加网站是需要进行实名认证的，这一点需要注意。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/8-%E7%99%BE%E5%BA%A6%E9%9C%80%E8%A6%81%E5%AE%9E%E5%90%8D.png" alt="百度实名"></p><p>填完个人信息后，提交站点网址，选择站点属性，最后一步验证网站。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/9-%E7%99%BE%E5%BA%A6%E8%AE%BE%E7%BD%AE%E7%AB%99%E7%82%B9%E5%B1%9E%E6%80%A7.png" alt="选择站点属性"></p><p>验证方式选择第二种「HTML标签验证」，复制下图 <code>content</code> 里的字符串。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/10-%E7%99%BE%E5%BA%A6%E9%80%89%E6%8B%A9%E9%AA%8C%E8%AF%81%E6%96%B9%E5%BC%8F.png" alt="选择验证方式"></p><blockquote><p>此项配置基于 Hexo 4.2，Next 7.8.0</p></blockquote><p>打开主题配置数据文件 <code>next.yml</code> ，搜索 <code>baidu_site_verification</code>，将上述字符串填至后方。</p><figure class="highlight yaml"><figcaption><span>.\source\_data\next.yml</span></figcaption><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"># 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">baidu_site_verification:</span> <span class="string">hpYpGBuDQF</span></span><br></pre></td></tr></table></figure><p>执行 <code>hexo g -d</code> 重新生成并部署站点，部署完成后，检查网站源码，能看到在<code>&lt;head&gt;</code> 里面已经自动包含了用于验证身份的 meta 标签：</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/11-%E7%99%BE%E5%BA%A6%E9%AA%8C%E8%AF%81meta%E6%A0%87%E7%AD%BE.png" alt="百度验证 meta 标签"></p><p>回到百度站长管理平台点击「完成验证」按钮，完成验证。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/12-%E7%99%BE%E5%BA%A6%E9%AA%8C%E8%AF%81%E6%88%90%E5%8A%9F.png" alt="百度验证成功"></p><p>当我验证完成的时候，百度通知我说 HTTPS 认证失败，当时<strong>我没有进行任何处理</strong>，二个小时后我手动在「搜索展现」–&gt; 「HTTPS 认证」申请认证，几分钟后就直接显示「认证通过」了，所以认证失败了不要慌，可能等待一会就自然好了。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/13-%E7%99%BE%E5%BA%A6Https%E8%AE%A4%E8%AF%81%E6%88%90%E5%8A%9F.png" alt="百度Https认证成功"></p><h3 id="百度提交链接"><a href="#百度提交链接" class="headerlink" title="百度提交链接"></a>百度提交链接</h3><p>百度提交链接有下面三种方式。</p><h4 id="主动提交"><a href="#主动提交" class="headerlink" title="主动提交"></a>主动提交</h4><p>安装  <a href="https://github.com/huiwang/hexo-baidu-url-submit">hexo-baidu-url-submit</a> 插件：</p><figure class="highlight shell"><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>获取百度主动推送<code>准入密钥</code>并复制：</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/14-%E7%99%BE%E5%BA%A6%E4%B8%BB%E5%8A%A8%E6%8E%A8%E9%80%81%E5%87%86%E5%85%A5%E5%AF%86%E9%92%A5.png" alt="百度主动推送准入密钥"></p><p>在站点配置文件 <code>_config.yml</code> 中<strong>新增</strong>以下代码：</p><figure class="highlight diff"><figcaption><span>./_config.yml</span></figcaption><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="addition">+ # 百度主动推送</span></span><br><span class="line"><span class="addition">+ baidu_url_submit:</span></span><br><span class="line"><span class="addition">+ count: 5 # 提交最新的五个链接</span></span><br><span class="line"><span class="addition">+ host: https://asurada.zone # 在百度站长平台中注册的域名</span></span><br><span class="line"><span class="addition">+  token: xxxxx  # 请注意这是您的秘钥， 所以请不要把博客源代码发布在公众仓库里!</span></span><br><span class="line"><span class="addition">+  path: baidu_urls.txt  # 文本文档的地址， 新链接会保存在此文本文档里</span></span><br></pre></td></tr></table></figure><p>然后在站点配置文件 <code>_config.yml</code> 中修改部署策略：</p><figure class="highlight diff"><figcaption><span>./_config.yml</span></figcaption><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">  # Deployment</span><br><span class="line">  ## Docs: https://hexo.io/docs/deployment.html</span><br><span class="line"><span class="deletion">- deploy:</span></span><br><span class="line"><span class="deletion">- type: git</span></span><br><span class="line"><span class="deletion">-   repo: git@github.com:ousugo/ousugo.github.io.git</span></span><br><span class="line"><span class="deletion">-branch: master</span></span><br><span class="line"><span class="addition">+ deploy:</span></span><br><span class="line"><span class="addition">+ - type: git</span></span><br><span class="line"><span class="addition">+   repo: git@github.com:ousugo/ousugo.github.io.git</span></span><br><span class="line"><span class="addition">+branch: master</span></span><br><span class="line"><span class="addition">+ - type: baidu_url_submitter # 百度</span></span><br></pre></td></tr></table></figure><p>此后每次执行 <code>hexo d</code> 部署博客的时候将会自动在 <code>./public</code> 目录下生成 <code>baidu_urls.txt</code> 文件，里面的内容就是自己设置的最新的 n 条文章链接。然后自动推送文件内容到百度，加快链接被百度收录的速度。</p><p>在这里的时候我踩了一个坑，在部署的时候一直提示错误：<code>&#123;&quot;error&quot;:401,&quot;message&quot;:&quot;site sid is empty&quot;&#125;</code> ，后面经过排查发现是在配置主动推送时，<code>host</code> 后面的网址没有加协议头，加上之后就不报错了。</p><figure class="highlight diff"><figcaption><span>./_config.yml</span></figcaption><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">baidu_url_submit:</span><br><span class="line">  count: 5 # 提交最新的五个链接</span><br><span class="line"><span class="deletion">- host: asurada.zone # 在百度站长平台中注册的域名</span></span><br><span class="line"><span class="addition">+ host: https://asurada.zone # 在百度站长平台中注册的域名</span></span><br><span class="line">  token: xxxxx  # 请注意这是您的秘钥， 所以请不要把博客源代码发布在公众仓库里!</span><br><span class="line">  path: baidu_urls.txt  # 文本文档的地址， 新链接会保存在此文本文档里</span><br></pre></td></tr></table></figure><h4 id="自动推送（弃用）"><a href="#自动推送（弃用）" class="headerlink" title="自动推送（弃用）"></a><del>自动推送</del>（弃用）</h4><div class="note info"><p>百度站长平台现在已经取消了「自动推送」的功能入口，所以不建议再开启此功能，详见<a href="https://51.ruyo.net/16280.html">百度 JS代码推送功能已停止使用，删除推送代码吧</a>。</p></div><blockquote><p>此项配置基于 Hexo 4.2，Next 7.8.0</p></blockquote><p>Next 主题中已经内置了一键开启百度自动推送的选项：</p><figure class="highlight yaml"><figcaption><span>.\source\_data\next.yml</span></figcaption><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 class="comment"># Enable baidu push so that the blog will push the url to baidu automatically which is very helpful for SEO</span></span><br><span class="line"><span class="attr">baidu_push:</span> <span class="literal">true</span></span><br></pre></td></tr></table></figure><p>开启后将会自动在页面中添加如下脚本用于百度推送：</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/18-%E7%99%BE%E5%BA%A6JS%E6%8E%A8%E9%80%81%E8%84%9A%E6%9C%AC%E4%BB%A3%E7%A0%81.png" alt="推送脚本代码"></p><p>之后每次访问站点页面都会通过以上脚本将当前页面的 URL 推送到百度。 </p><h4 id="sitemap"><a href="#sitemap" class="headerlink" title="sitemap"></a>sitemap</h4><div class="note info"><p>博客如果是部署在 GitHub Pages 上，baidusitemap 是无法被成功抓取的，因为 GitHub 禁止了百度爬虫，最常见的解决办法是将博客双线部署到 Coding Pages 和 GitHub Pages，因为百度爬虫可以爬取到 Coding 上的内容，从而实现百度收录。实现双线部署可以参考我的这篇 <a href="https://asurada.zone/post/Deploy-Hexoblog-To-Codingnet-And-GitHub/">Hexo 博客 GitHub Pages + CODING 静态网站双部署</a> 博客。</p></div><p>安装 <a href="https://github.com/coneycode/hexo-generator-baidu-sitemap">hexo-generator-baidu-sitemap</a> 插件：</p><figure class="highlight mipsasm"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm <span class="keyword">install </span>hexo-generator-<span class="keyword">baidu-sitemap </span>--save</span><br></pre></td></tr></table></figure><p>插件安装成功后，执行 <code>hexo g -d</code> 部署网站，然后访问 <code>网站自定义域名/baidusitemap.xml</code> 检查百度网站地图是否正常。比如我的是 <code>asurada.zone/baidusitemap.xml</code> 。</p><p>然后来到百度站长平台的 <a href="https://ziyuan.baidu.com/linksubmit/">sitemap 提交页面</a>，提交 sitemap 地址即可，注意需要自己添加 <code>https://</code> 协议头，不然默认是 <code>http://</code>，会导致抓取失败。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/20-%E7%99%BE%E5%BA%A6%E6%8F%90%E4%BA%A4sitemap.png" alt="百度提交 sitemap"></p><p>初次提交要等几分钟，如果成功的话状态会显示为正常，并显示成功提取 URL 的数量。如果以后博客有新的文章或其他页面，可以点击<strong>手动更新文件</strong>，对 sitemap 进行更新。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/21-%E7%99%BE%E5%BA%A6sitemap%E6%8A%93%E5%8F%96%E6%AD%A3%E5%B8%B8.png" alt="百度 sitemap 抓取正常"></p><p>百度的收录速度是比较慢的，一两周都是很正常的。</p><h2 id="让谷歌收录站点"><a href="#让谷歌收录站点" class="headerlink" title="让谷歌收录站点"></a>让谷歌收录站点</h2><h3 id="GSC-验证域名"><a href="#GSC-验证域名" class="headerlink" title="GSC 验证域名"></a>GSC 验证域名</h3><p>登陆 <a href="https://search.google.com/u/1/search-console/welcome">Google Search Console</a> （后面简称 GSC)，可以看到有两种资源类型，因为目前我博客的域名是没有任何前缀的裸域名，所以我选择「网域验证」。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/2-GoogleSearchConsole%E6%AC%A2%E8%BF%8E%E9%A1%B5.png" alt="Google Search Console 欢迎页"></p><p>要进行「网域验证」的话，只有「通过 DNS 记录来验证域名所有权」这一种办法。复制这一步中出现的 TXT 记录值，然后进到域名解析服务商的管理界面，比如我的是 DNSPod。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/4-DNS%E9%AA%8C%E8%AF%81%E5%9F%9F%E5%90%8D%E6%89%80%E6%9C%89%E6%9D%83.png" alt="DNS 验证域名所有权"></p><p>在「记录管理」里面新增一条 <code>TXT</code> 类型的解析记录，主机记录留空或者填 <code>@</code>，记录值就是刚刚复制的那一串记录值，其他保持默认即可。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/32-DNSPod%E6%96%B0%E5%A2%9E%E8%B0%B7%E6%AD%8C%E5%9F%9F%E5%90%8D%E9%AA%8C%E8%AF%81%E8%A7%A3%E6%9E%90%E8%AE%B0%E5%BD%95.png" alt="DNSPod 新增谷歌域名验证解析记录"></p><p>稍等片刻，等待 DNS 解析生效，然后回到 GSC 点击「验证」按钮，即可完成验证。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/3-Google%E7%BD%91%E5%9F%9F%E9%AA%8C%E8%AF%81%E6%88%90%E5%8A%9F.png" alt="GSC 网域验证成功"></p><h3 id="提交站点地图"><a href="#提交站点地图" class="headerlink" title="提交站点地图"></a>提交站点地图</h3><p>验证域名所有权之后，进入 GSC 后台管理界面，输入 sitemap 地址并点击提交即可。谷歌的收录是比较快速的，两天左右就能够在谷歌通过 <code>site:博客网址</code> 的方式检索到收录结果了。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/33-GSC%E6%8F%90%E4%BA%A4%E7%AB%99%E7%82%B9%E5%9C%B0%E5%9B%BE.png" alt="GSC 提交站点地图"></p><h2 id="让-360-搜索收录网站"><a href="#让-360-搜索收录网站" class="headerlink" title="让 360 搜索收录网站"></a>让 360 搜索收录网站</h2><h3 id="注册-360-站长平台"><a href="#注册-360-站长平台" class="headerlink" title="注册 360 站长平台"></a>注册 360 站长平台</h3><p>注册并登录<a href="zhanzhang.so.com/">360 站长平台</a>，添加网站。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/22-360%E7%AB%99%E9%95%BF%E5%B9%B3%E5%8F%B0%E6%B7%BB%E5%8A%A0%E7%BD%91%E7%AB%99.png" alt="360 站长平台添加网站"></p><p>添加网站后需要进行验证，选择「代码验证」，复制 <code>content</code> 后的字符串，后面会用到。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/23-360%E7%BD%91%E7%AB%99%E4%BB%A3%E7%A0%81%E9%AA%8C%E8%AF%81.png" alt="代码验证"></p><h3 id="360-验证域名"><a href="#360-验证域名" class="headerlink" title="360 验证域名"></a>360 验证域名</h3><p>修改站点配置文件 <code>_config.yml</code> ：</p><figure class="highlight diff"><figcaption><span>.\_config.yml</span></figcaption><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"># Define custom file paths.</span><br><span class="line"># Create your custom files in site directory `source/_data` and uncomment needed files below.</span><br><span class="line">custom_file_path:</span><br><span class="line"><span class="deletion">- #head: source/_data/head.swig</span></span><br><span class="line"><span class="addition">+ head: source/_data/head.swig</span></span><br><span class="line">  #header: source/_data/header.swig</span><br></pre></td></tr></table></figure><p>然后在 <code>博客根目录\source\_data</code> 下新建 <code>head.swig</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">&#123;% if theme.so_site_verification %&#125;</span><br><span class="line">  &lt;meta name=&quot;360-site-verification&quot; content=&quot;&#123;&#123; theme.so_site_verification &#125;&#125;&quot;/&gt;</span><br><span class="line">&#123;% endif %&#125;</span><br></pre></td></tr></table></figure><p>上面代码是利用了 Next 主题的 <a href="https://theme-next.js.org/docs/advanced-settings.html#Injects">Inject 功能</a>，以上代码的含义为如果在 <code>_config.yml</code> 中存在 <code>so_site_verification</code>  这一设置项，则会将 <code>&lt;meta name=&quot;360-site-verification&quot; content=&quot;so_site_verification 设置项的 value&quot;/&gt;</code>插入到网站首页 HTML 代码的 <code>&lt;head&gt;&lt;/head&gt;</code> 标签中。</p><p>再次修改站点配置文件 <code>_config.yml</code>，在 <code>SEO Settings</code>区域新增以下内容 ：</p><figure class="highlight avrasm"><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="meta"># 360 Webmaster tools verification.</span></span><br><span class="line"><span class="meta"># See: zhanzhang.so.com/sitetool</span></span><br><span class="line"><span class="symbol">so_site_verification:</span> 此处填写之前复制的验证字符串</span><br></pre></td></tr></table></figure><p>修改完成后，执行 <code>hexo g -d</code> 命令重新生成并部署网站，部署生效后，回到 360 站长平台，「点击验证」即可。如果网站已经开启了 HTTPS 访问，不要忘记「设置 https」。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/24-360%E7%AB%99%E9%95%BF%E5%B9%B3%E5%8F%B0%E9%AA%8C%E8%AF%81%E6%88%90%E5%8A%9F.png" alt="360 站长平台验证成功"></p><h3 id="提交-sitemap"><a href="#提交-sitemap" class="headerlink" title="提交 sitemap"></a>提交 sitemap</h3><p>360 站长平台体验很一般，连 HTTPS 都没上，然后在进行 sitemap 提交的时候，第一天页面就一直报「连接超时」，完全无法提交。第二天终于不报错了，可以正常提交了，页面也显示成功提交，但添加完以后 sitemap 列表却一直是空的，让人很困惑，不知道这到底是添加成功了但还没爬取呢还是压根就没添加上。终于第三天一切顺利，成功添加并显示了。</p><p>我一开始提交的是<strong>只有裸域名</strong>的 sitemap 地址，但是几天后发现无法抓取到任何链接，于是我尝试在域名前加上 <code>www</code>，没想到还真有效果，很快就把全部链接都给抓取到了。具体的原因目前我也没有弄清楚。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/6-360%E6%8F%90%E4%BA%A4sitemap.png" alt="360 站长平台提交sitemap"></p><h2 id="让搜狗收录网站"><a href="#让搜狗收录网站" class="headerlink" title="让搜狗收录网站"></a>让搜狗收录网站</h2><h3 id="注册搜狗站长平台"><a href="#注册搜狗站长平台" class="headerlink" title="注册搜狗站长平台"></a>注册搜狗站长平台</h3><p>注册并登录<a href="http://zhanzhang.sogou.com/">搜狗站长平台</a>，我在这里很想吐槽，这都 2020 年了，360 和搜狗的站长平台居然<strong>都还没上 HTTPS</strong>，我一度怀疑自己是不是进了伪造网站。这样给我的感觉就是完全没有用心在做搜索。</p><p>搜狗的添加网站也和别家不一样，很奇葩地单独设置在「用户中心」里，体验上很割裂。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/27-%E6%90%9C%E7%8B%97%E7%AB%99%E9%95%BF%E5%B9%B3%E5%8F%B0%E6%B7%BB%E5%8A%A0%E7%BD%91%E7%AB%99.png" alt="搜狗站长平台添加网站"></p><h3 id="搜狗验证域名"><a href="#搜狗验证域名" class="headerlink" title="搜狗验证域名"></a>搜狗验证域名</h3><p>填加网站后同样需要验证，这次我们图省事，直接选择「文件验证」，点击「下载验证文件」，将 <code>sogousiteverification.txt</code> 下载到 <code>博客根目录\public</code> 文件夹里面，然后直接执行 <code>hexo d</code> 命令部署网站，部署生效后，回到搜狗站长平台「完成验证」。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/28-%E6%90%9C%E7%8B%97%E5%9F%9F%E5%90%8D%E6%96%87%E4%BB%B6%E9%AA%8C%E8%AF%81.png" alt="搜狗域名文件验证"></p><h3 id="提交链接"><a href="#提交链接" class="headerlink" title="提交链接"></a>提交链接</h3><p>搜狗站长平台居然不支持 sitemap 提交，说是采取邀请制，这波操作反正我是看不懂。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/30-%E6%90%9C%E7%8B%97%E4%B8%8D%E6%94%AF%E6%8C%81sitemap.png" alt="搜狗不支持 sitemap"></p><p>那只能退而求其次，手动提交链接了，得亏是我现在文章还比较少。不过倒可以等文章更多一些，试着申请一下开通 sitemap 提交权限。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/31-%E6%90%9C%E7%8B%97%E6%8F%90%E4%BA%A4%E9%93%BE%E6%8E%A5.png" alt="搜狗提交链接"></p><h2 id="让-Bing-搜索收录网站"><a href="#让-Bing-搜索收录网站" class="headerlink" title="让 Bing 搜索收录网站"></a>让 Bing 搜索收录网站</h2><p>Bing 我之前并没有申请过收录，但是在使用 <code>site:asurada.zone</code> 检查收录情况时，居然惊喜地发现已经收录了我的博客，虽然仅仅只有一条链接。</p><h3 id="直接从-Google-Search-Console-导入网站"><a href="#直接从-Google-Search-Console-导入网站" class="headerlink" title="直接从 Google Search Console 导入网站"></a>直接从 Google Search Console 导入网站</h3><p>打开<a href="https://www.bing.com/webmaster">Bing Webmaster</a>，使用绑定了 Google Search Console（后面简称 GSC） 的谷歌账号登录，这样后面就可以很方便地直接从 GSC 直接导入网站，而不需要再单独验证网站。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/25-BingWebmasterGSC%E7%9B%B4%E6%8E%A5%E5%AF%BC%E5%85%A5.png" alt=" GSC 直接导入"></p><h3 id="提交网站地图"><a href="#提交网站地图" class="headerlink" title="提交网站地图"></a>提交网站地图</h3><p>按理说应该可以直接从 GSC 获取网站地图，但我的并没有获取到，不管了，手动提交也很简单。Bing 处理 sitemap 的时间大概在一天左右。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/26-Bing%E6%8F%90%E4%BA%A4%E7%BD%91%E7%AB%99%E5%9C%B0%E5%9B%BE.png" alt="Bing 提交网站地图"></p><h2 id="让-Yandex-搜索收录网站"><a href="#让-Yandex-搜索收录网站" class="headerlink" title="让 Yandex 搜索收录网站"></a>让 Yandex 搜索收录网站</h2><h3 id="注册-Yandex-Webmaster"><a href="#注册-Yandex-Webmaster" class="headerlink" title="注册 Yandex Webmaster"></a>注册 Yandex Webmaster</h3><p>注册并登录<a href="webmaster.yandex.com">Yandex Webmaster</a>，这里<strong>有一个坑需要注意</strong>，Yandex 目前是可以直连的，但是在注册账号的时候，你会发现在最后一步输入验证码的时候，不管你怎么填总会提示验证码错误。而且 Yandex 的验证码是很奇葩的两张图片，让我弄不清楚是该输其中一张图片的内容还是怎么着，折腾了半天。最后在网上查到的解决方法是<strong>不要直连，而是通过科学上网</strong>进行注册，这时再输验证码就不会报错了，无语，验证码是两张图片的内容都要输入。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/35-YandexWebmaster.png" alt="Yandex Webmaster"></p><h3 id="Yandex-验证域名"><a href="#Yandex-验证域名" class="headerlink" title="Yandex 验证域名"></a>Yandex 验证域名</h3><blockquote><p>此项配置基于 Hexo 5.0.2，Next 7.8.0</p></blockquote><p>进入 Webmaster 后台管理界面添加域名，这里<strong>需要注意的是</strong>和在其他站长平台添加网址不一样，Yandex 在添加网址时就需要写清楚<strong>带不带 <code>www</code><strong>，是使用 <code>http</code> 还是 <code>https</code>，</strong>默认是使用 <code>http</code> 的</strong>。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/7-Yandex%E6%B7%BB%E5%8A%A0%E5%9F%9F%E5%90%8D%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A1%B9.png" alt="Yandex 添加网址注意事项"></p><p>选择域名验证方式，因为 Next 主题直接内置 Yandex 的验证，所以我们选择「Meta tag」验证，复制 <code>content</code> 后双引号内的字符串。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/34-Yandex%E6%B7%BB%E5%8A%A0%E7%BD%91%E7%AB%99.png" alt="Yandex 添加网站"></p><p>打开 Next 主题配置文件 <code>next.yml</code>，搜索关键字 ”Yandex”，找到<code>yandex_site_verification</code>，填入刚刚复制的字符串。</p><figure class="highlight diff"><figcaption><span>博客根目录\source\_data\next.yml</span></figcaption><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"># Yandex Webmaster tools verification.</span><br><span class="line"># See: https://webmaster.yandex.ru</span><br><span class="line"><span class="deletion">- yandex_site_verification:</span></span><br><span class="line"><span class="addition">+ yandex_site_verification: 4aca0e5ccd3fbc2f</span></span><br></pre></td></tr></table></figure><p>修改完成后，执行 <code>hexo g -d</code> 命令重新生成并部署网站，部署生效后，回到 Yandex Webmaster，点击 “Check” 即可。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/36-Yandex%E5%AE%8C%E6%88%90%E9%AA%8C%E8%AF%81.png" alt="Yandex 完成验证"></p><h3 id="提交-sitemap-1"><a href="#提交-sitemap-1" class="headerlink" title="提交 sitemap"></a>提交 sitemap</h3><p>验证完成后，在左侧菜单「Indexing」–&gt; 「Sitemap files」中提交 sitemap ，然后等待两天时间即可完成 sitemap 的收录和牵引。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/9-YandexSitemap%E6%94%B6%E5%BD%95%E6%88%90%E5%8A%9F.png" alt="Yandex Sitemap 收录成功"></p><p>之后就可以在左侧菜单「Indexing」–&gt; 「Searchable pages」中查看网站的哪些页面已经被 Yandex 搜索引擎所收录。</p><h2 id="让头条搜索收录网站"><a href="#让头条搜索收录网站" class="headerlink" title="让头条搜索收录网站"></a>让头条搜索收录网站</h2><h3 id="注册头条站长平台"><a href="#注册头条站长平台" class="headerlink" title="注册头条站长平台"></a>注册头条站长平台</h3><p>注册并登录<a href="zhanzhang.toutiao.com">头条搜索站长平台</a>，添加网站。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/1-%E5%A4%B4%E6%9D%A1%E7%AB%99%E9%95%BF%E5%B9%B3%E5%8F%B0.png" alt="头条站长平台"></p><h3 id="头条验证网站"><a href="#头条验证网站" class="headerlink" title="头条验证网站"></a>头条验证网站</h3><p>头条现在的验证方式非常单一，只能通过「文件校验」的方式来验证。直接下载验证文件并将其移动到博客根目录下的 <code>public</code> 文件夹里面。然后执行 <code>hexo d</code> 命令部署网站，部署生效后，回到站长平台完成验证。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/2-%E5%A4%B4%E6%9D%A1%E7%BD%91%E7%AB%99%E9%AA%8C%E8%AF%81.png" alt="头条网站文件验证"></p><h3 id="提交-sitemap-2"><a href="#提交-sitemap-2" class="headerlink" title="提交 sitemap"></a>提交 sitemap</h3><p>验证完毕后，提交 sitemap。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/3-%E5%A4%B4%E6%9D%A1%E6%8F%90%E4%BA%A4sitemap.png" alt="头条提交 sitemap"></p><p>提交完成后，即可在页面下方查看 sitemap 的更新情况：</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/8-%E5%A4%B4%E6%9D%A1sitemap%E6%94%B6%E5%BD%95%E6%83%85%E5%86%B5.png" alt="头条 sitemap 收录情况"></p><h2 id="让神马搜索收录网站"><a href="#让神马搜索收录网站" class="headerlink" title="让神马搜索收录网站"></a>让神马搜索收录网站</h2><h3 id="注册神马站长平台"><a href="#注册神马站长平台" class="headerlink" title="注册神马站长平台"></a>注册神马站长平台</h3><p>注册并登录<a href="zhanzhang.sm.cn">神马搜索站长平台</a>，添加网站。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/4-%E7%A5%9E%E9%A9%AC%E7%AB%99%E9%95%BF%E5%B9%B3%E5%8F%B0.png" alt="神马站长平台"></p><h3 id="验证网站"><a href="#验证网站" class="headerlink" title="验证网站"></a>验证网站</h3><p>直接下载验证文件 <code>shenma-site-verification.txt</code> 并将其移动到博客根目录下的 <code>public</code> 文件夹里面。然后执行 <code>hexo d</code> 命令部署网站，部署生效后，回到站长平台完成验证。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/5-%E7%A5%9E%E9%A9%AC%E7%BD%91%E7%AB%99%E6%96%87%E4%BB%B6%E9%AA%8C%E8%AF%81.png" alt="神马网站文件验证"></p><h3 id="放弃神马收录"><a href="#放弃神马收录" class="headerlink" title="放弃神马收录"></a>放弃神马收录</h3><p>神马在验证网站时，不管是文件验证还是代码验证，我多次尝试都以失败告终，使用体验极差，遂弃之。</p><h2 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h2><p>各大搜索引擎的收录步骤都是大同小异的，没啥太大的难度，一步步来就可以了。</p><p>整体体验下来，感觉搜狗、神马压根就没想把自己的搜索给做起来了，体验一塌糊涂。360 体验稍好一点，不过作为国内搜索的老二，站长平台连个 HTTPS 都不上，属实说不过去。相较于国内参差不齐的体验，国外主流搜索引擎的站长平台的各种体验都要好上不少，人家强是有道理的。</p><p>最后想说的，也是对自己的勉励，那就是「<strong>内容才是第一要素</strong>」。SEO 技巧是为内容服务的，收录只是第一步，收录以后还需要持续更新博客，写有价值、有内容的文章，这样才能吸引他人点击和浏览，乃至分享引用，这样可以增加网站曝光以及提高搜索引擎权重，从而得到更好的搜索引擎排名，让更多的人看到，实现正向循环。</p><h2 id="参考链接"><a href="#参考链接" class="headerlink" title="参考链接"></a>参考链接</h2><p><a href="https://tding.top/archives/4ea54752.html">Hexo-NexT 博客提交搜索引擎收录</a></p><p><a href="https://www.itrhx.com/2019/09/17/A48-submit-search-engine-inclusion/">Hexo 博客提交百度、谷歌搜索引擎收录</a></p>]]></content>
    
    
    <summary type="html">&lt;p&gt;如果希望自己博客的内容被更多人看到，搜索引擎所带来的流量是不容忽视的。本文详细介绍了如何向各大主流搜索引擎主动提交自己的博客，期望达到加快收录速度的目的。&lt;/p&gt;</summary>
    
    
    
    <category term="个人博客" scheme="https://asurada.zone/categories/%E4%B8%AA%E4%BA%BA%E5%8D%9A%E5%AE%A2/"/>
    
    
    <category term="Hexo" scheme="https://asurada.zone/tags/Hexo/"/>
    
    <category term="SEO" scheme="https://asurada.zone/tags/SEO/"/>
    
  </entry>
  
  <entry>
    <title>Hexo 博客 GitHub Pages + CODING 静态网站双部署</title>
    <link href="https://asurada.zone/post/Deploy-Hexoblog-To-Codingnet-And-GitHub/"/>
    <id>https://asurada.zone/post/Deploy-Hexoblog-To-Codingnet-And-GitHub/</id>
    <published>2020-08-12T14:36:48.000Z</published>
    <updated>2020-08-12T14:36:48.000Z</updated>
    
    <content type="html"><![CDATA[<h2 id="为什么想要双部署"><a href="#为什么想要双部署" class="headerlink" title="为什么想要双部署"></a>为什么想要双部署</h2><p>中文博客的受众肯定是以国内为主，但部署在 Github Pages 上，服务器在国外，国内访问的速度太不稳定，如果一个页面需要将近十秒才能完全打开的话，用户体验差，页面被提前关闭的概率也会呈指数级上升。所以改善国内访问体验迫在眉睫。</p><p>之前也想过直接使用 CDN 直接加速 GitHub Pages 的方式，但国内的 CDN 全部要求域名进行备案，嫌麻烦就放弃了。最后选择通过将博客同时部署到 GitHub 和 CODING 的方式来提升国内访问体验。</p><p>CODING 在 19 年年底进行了一次比较大的改版，双部署的整个流程也有了不小的变化，而网络上很多教程大部分都还是基于旧版流程的。本文详细记载了将博客同时部署到 GitHub Pages 和 CODING 静态网站服务的全流程。</p><span id="more"></span><h2 id="CODING-配置"><a href="#CODING-配置" class="headerlink" title="CODING 配置"></a>CODING 配置</h2><h3 id="注册-CODING-账号"><a href="#注册-CODING-账号" class="headerlink" title="注册 CODING 账号"></a>注册 CODING 账号</h3><p>2019 年 12 月 28 日以后，CODING 统一了入口，不再区分个人版与否，具体的升级详情可以查看<a href="https://coding.net/products/upgrade">官方通知</a>。升级后的 CODING 会增加「团队&#x2F;组织」的管理概念，注册的时候必须先创建一个团队，这个和平常的注册稍有些不同，需要注意一下。<a href="https://coding.net/">点击跳转 CODING 官网</a>。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/Coding%E6%B3%A8%E5%86%8C%E7%95%8C%E9%9D%A2.png" alt="CODING 注册界面"></p><h3 id="创建-CODING-项目"><a href="#创建-CODING-项目" class="headerlink" title="创建 CODING 项目"></a>创建 CODING 项目</h3><p>注册成功以后，进入「项目」–&gt; 「创建项目」。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/CODING%E5%88%9B%E5%BB%BA%E9%A1%B9%E7%9B%AE.png" alt="CODING 创建项目"></p><p>选择「代码托管项目」，只需填写项目名称，其他都保持空白和默认即可。注意<strong>不要勾选</strong>「公开源代码」。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/%E5%88%9B%E5%BB%BA%E4%BB%A3%E7%A0%81%E6%89%98%E7%AE%A1%E9%A1%B9%E7%9B%AE.png" alt="创建代码托管项目"></p><h3 id="CODING-配置-SSH-公钥"><a href="#CODING-配置-SSH-公钥" class="headerlink" title="CODING 配置 SSH 公钥"></a>CODING 配置 SSH 公钥</h3><p>SSH 密钥设置的路径为 「右上角个人头像」–&gt;「个人账户设置」–&gt; 「SSH 公钥」–&gt; 「新增公钥」。</p><div class="note info"><p>SSH 公钥默认存放在 <code>C:\Users\用户名\.ssh</code> 目录下的 <code>id_rsa.pub</code> 文件里，用记事本打开并复制其内容即可。</p></div><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/Coding%E6%96%B0%E5%A2%9ESSH%E5%AF%86%E9%92%A5.png" alt="CODING 新增SSH密钥"></p><p>新增密钥是敏感操作，所以在新增密钥的时候，CODING 会要求验证密码才能添加，需要注意的是这里要求验证的是<strong>服务密码</strong>，而不是登录密码。如果没有事先设置服务密码的话，需要先在「个人设置」–&gt; 「服务密码」进行设置。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/CODING%E6%9C%8D%E5%8A%A1%E5%AF%86%E7%A0%81.png" alt="CODING 设置服务密码"></p><p>添加公钥后，打开 <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">ssh -T git@e.coding.net</span><br></pre></td></tr></table></figure><p>因为是第一次进行连接，所以需要输入 <code>yes</code> 来确认进行连接。配置成功，会出现如下图所示的提示：<br><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/CodingSSH%E9%AA%8C%E8%AF%81%E6%88%90%E5%8A%9F.png" alt="CODING SSH 验证成功提示"></p><h2 id="部署-CODING「静态网站」"><a href="#部署-CODING「静态网站」" class="headerlink" title="部署 CODING「静态网站」"></a>部署 CODING「静态网站」</h2><h3 id="配置站点配置文件-config-yml"><a href="#配置站点配置文件-config-yml" class="headerlink" title="配置站点配置文件 _config.yml"></a>配置站点配置文件 _config.yml</h3><p>进入到 CODING 上刚才新建的项目里面，选择「代码仓库」，可以看到此时代码仓库还是空的，选择「SSH」链接方式并复制链接。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/CODING%E9%A1%B9%E7%9B%AESSH%E9%93%BE%E6%8E%A5.png" alt="CODING 项目 SSH 链接"></p><p>打开博客根目录下的站点配置文件 <code> _config.yml</code> ，修改其中的 <code>deploy</code> 区域，将刚复制的 SSH 链接新增进去：</p><figure class="highlight diff"><figcaption><span>./_config.yml</span></figcaption><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">deploy:</span><br><span class="line">  - type: git</span><br><span class="line">    repo: git@github.com:ousugo/ousugo.github.io.git</span><br><span class="line">    branch: master</span><br><span class="line"><span class="addition">+ - type: git</span></span><br><span class="line"><span class="addition">+   repo: git@e.coding.net:asuradazone/asurada/asurada.git</span></span><br><span class="line"><span class="addition">+   branch: master    </span></span><br></pre></td></tr></table></figure><h3 id="部署代码到-CODING"><a href="#部署代码到-CODING" class="headerlink" title="部署代码到 CODING"></a>部署代码到 CODING</h3><p><code> _config.yml</code> 文件修改完成后，执行 <code>hexo d</code> 命令进行部署，此时 Hexo 就会根据设置同时将博客部署到 GitHub 和 CODING 上面。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/%E6%88%90%E5%8A%9F%E9%83%A8%E7%BD%B2%E5%88%B0CODING.png" alt="成功部署到 CODING"></p><p>此时再进入 CODING 上的项目，能看到刚才还是空的仓库现在已经有源代码了，说明部署是成功的。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/CODING%E9%A1%B9%E7%9B%AE%E6%BA%90%E7%A0%81.png" alt="CODING 项目源码"></p><h3 id="项目启用「持续部署」功能"><a href="#项目启用「持续部署」功能" class="headerlink" title="项目启用「持续部署」功能"></a>项目启用「持续部署」功能</h3><p>CODING 改版后，开启 Pages 服务的方法有了较大的变化，连名字都改了，现在已经不叫「Pages 服务」，而是改叫「静态网站」了。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/Pages%E6%94%B9%E5%90%8D.png" alt="Pages 服务改名"></p><p>「静态网站」是「持续部署」下面的一个子功能，而「持续部署」功能默认是没有开启的，需要我们自行启用。启用路径为项目左下角「项目设置」–&gt;「项目与成员」–&gt;「功能开关」–&gt;「持续部署」。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/%E5%90%AF%E7%94%A8%E6%8C%81%E7%BB%AD%E9%83%A8%E7%BD%B2%E5%8A%9F%E8%83%BD.png" alt="启用持续部署功能"></p><p>「持续部署」功能开启后，就可以在它下面找到「静态网站」了。为了后续方便操作，还可以点击「静态网站」字样右边的按钮将其固定到项目选项顶部。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/%E9%9D%99%E6%80%81%E7%BD%91%E7%AB%99%E5%85%A5%E5%8F%A3.png" alt="静态网站入口"></p><h3 id="实名认证"><a href="#实名认证" class="headerlink" title="实名认证"></a>实名认证</h3><p>CODING 现在要求是必须先进行实名认证以后才能使用「静态网站」的服务，实名认证的入口在「右上角头像」–&gt;「团队管理」–&gt;「团队设置」–&gt;「高级设置」里面，藏得有点深。</p><p>如果<strong>没有绑定手机号</strong>的话，需要先绑定手机号才能进行实名认证，反正现在基本想要使用国内的服务，实名认证基本是跑不掉的。输入姓名和身份证号码即可完成认证。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/%E5%AE%9E%E5%90%8D%E8%AE%A4%E8%AF%81.png" alt="实名认证"></p><h3 id="发布静态网站"><a href="#发布静态网站" class="headerlink" title="发布静态网站"></a>发布静态网站</h3><p>实名认证完成后，点击「立即发布静态网站」，填写「网站名称」，「触发机制」默认为「自动触发」，此后每次同步代码到 <code>master</code> 分支时，网站即会自动部署。所有设置保持默认即可，然后点击「保存」。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/%E9%9D%99%E6%80%81%E7%BD%91%E7%AB%99%E8%AE%BE%E7%BD%AE.png" alt="静态网站设置"></p><p>设置保存后，刷新页面，会看到 CODING 已经自动生成了网站的访问链接，不过现在网站还没有正式部署，还需要我们点击「立即部署」来部署网站。部署完成后就可以点击链接查看网站部署效果了，应该同部署到 GitHub Pages 是同样的效果。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/%E9%83%A8%E7%BD%B2%E9%9D%99%E6%80%81%E7%BD%91%E7%AB%99.png" alt="部署静态网站"></p><h2 id="绑定自定义域名"><a href="#绑定自定义域名" class="headerlink" title="绑定自定义域名"></a>绑定自定义域名</h2><p>我的自定义域名是在 <a href="https://www.namesilo.com/">NmaeSilo</a> 买的，主要优点有：</p><ol><li>支持支付宝付款</li><li>赠送 WHOIS 域名隐私保护</li><li>第一年价格相对实惠</li></ol><p>如果有同学也考虑在 <a href="https://www.namesilo.com/">NmaeSilo</a> 购买域名，欢迎使用我的优惠码 <code>Asurada </code>，可以优惠一美元。</p><h3 id="修改域名解析服务到-DNSPod"><a href="#修改域名解析服务到-DNSPod" class="headerlink" title="修改域名解析服务到 DNSPod"></a>修改域名解析服务到 DNSPod</h3><p>之前博客只部署在 GitHub Pages 上时，因为不需要考虑国内外解析分流，所以我直接使用的是 NameSilo 默认的域名解析服务。现在博客分别部署在 GitHub 和 CODING 上了，我希望将国外的流量解析到 GitHub，国内的流量则解析到 CODING，但 NameSilo 默认的域名解析服务并不能实现国内外流量的区分，所以需要更换域名解析服务商。</p><p>我日常使用腾讯云比较多，所以选择了腾讯旗下的 <a href="dnspod.cn">DNSPod</a>，账号和腾讯云是通用的，直接微信扫码即可登录。登录到 <a href="console.dnspod.cn">DNSPod 控制台</a>，在「DNS 解析」–&gt;「我的域名」里添加想要解析的域名。因为还没有修改域名注册商那边的设置，所以现在显示的状态还是「DNS 错误」。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/DNSPod%E6%B7%BB%E5%8A%A0%E5%9F%9F%E5%90%8D.png" alt="DNSPod 添加域名"></p><p>登录到 <a href="https://www.namesilo.com/account_home.php">NameSilo 后台</a>，在「Account Options」中选择「<a href="https://www.namesilo.com/account_domains.php">domain manager</a>」，选中想要进行修改的域名，点击上方「Change Nameservers」图标。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/NameSilo%E4%BF%AE%E6%94%B9%E5%9F%9F%E5%90%8D%E8%A7%A3%E6%9E%90%E6%9C%8D%E5%8A%A1.png" alt="NameSilo 修改域名解析服务"></p><p>将默认的 DNS 服务器地址修改为下面的 DNSPod 提供的 DNS 服务器地址，然后提交修改。 </p><figure class="highlight dos"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">f1g1ns1.dnspod.<span class="built_in">net</span></span><br></pre></td></tr></table></figure><figure class="highlight dos"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">f1g1ns2.dnspod.<span class="built_in">net</span></span><br></pre></td></tr></table></figure><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/%E4%BF%AE%E6%94%B9%E5%9F%9F%E5%90%8D%E6%9C%8D%E5%8A%A1%E5%95%86%E4%B8%BADNSPod.png" alt="修改域名服务商为 DNSPod"></p><p>DNS 域名解析服务的修改后需要等待全球递归 DNS 服务器的刷新，所以需要耐心等待一会儿，大概十分钟左右。修改生效后再手动刷新 DNSPod 的状态，<strong>注意不是刷新页面</strong>，而是点击「DNS 错误」旁边的感叹号获取新状态，此时应该状态会变为「正常」。状态正常后，点击域名，进入「记录管理」。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/DNSPod%E7%8A%B6%E6%80%81%E6%AD%A3%E5%B8%B8.png" alt="DNSPod 显示状态正常"></p><h3 id="DNSPod-解析记录设置"><a href="#DNSPod-解析记录设置" class="headerlink" title="DNSPod 解析记录设置"></a>DNSPod 解析记录设置</h3><p>先简单介绍一下 <code>A 记录</code> 和 <code>CNAME 记录</code> 的作用：</p><blockquote><p>如果需要将域名指向一个 IP 地址，就需要添加A记录；</p><p>如果需要将域名指向另一个域名，再由另一个域名提供 IP 地址，就需要添加 CNAME 记录。</p></blockquote><p>我们一共添加五条解析记录，其中三条境外，两条境内，具体记录如下：</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/DNSPod%E8%A7%A3%E6%9E%90%E8%AE%B0%E5%BD%95.png" alt="DNSPod解析记录"></p><p>第一条记录类型为 <code>A</code>，主机记录为 <code>@</code>，解析线路选择<code>默认</code>，记录值为 CODING 静态网站的 IP 地址，可以使用 <code>ping</code> 命令查询得到。比如 CODING 替我自动生成的网站访问地址为 <code>http://quj3xn.coding-pages.com/</code>，打开 <code>cmd</code>，输入 <code>ping quj3xn.coding-pages.com</code>，就可以得到 CODING 静态网站的 IP 地址，我的是<code>124.156.205.241</code>， <code>TTL</code> 的话，免费版最小只能填 600。这条解析记录的意思是将从境内访问 <code>asurada.zone</code> 的流量解析到 <code>124.156.205.241</code>。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/%E8%8E%B7%E5%8F%96IP%E5%9C%B0%E5%9D%80.png" alt="获取 IP 地址"></p><p>第二条记录类型为 <code>CNAME</code>，主机记录为 <code>www</code>，解析线路选择<code>默认</code>，记录值为 CODING 自动生成的访问地址，比如我的是 <code>quj3xn.coding-pages.com</code>。这条解析记录的意思是将从境内访问 <code>www.asurada.zone</code> 的流量解析到 <code>quj3xn.coding-pages.com</code>。</p><p>接下来的三条境外解析记录就很好理解了，第三和第五条记录是分别将从境外访问 <code>asurada.zone</code> 的流量解析到 <code>185.199.108.153</code> 和 <code>185.199.109.153</code>，这两个 IP 都是 GitHub Pages 的服务器 IP 地址。第四条记录则是将从境外访问 <code>ww.asurada.zone</code> 的流量解析到 <code>ousugo.github.io</code>。</p><div class="note info"><p>在这一步的时候，为了方便下面开启 CODING 静态网站绑定自定义域名和开启全局 HTTPS，可以先将<strong>境外的三条解析先暂停</strong>，等完成 CODING 自定义域名的绑定并开启 HTTPS 以后再恢复解析。</p></div><h3 id="DNSPod「搜索引擎优化」"><a href="#DNSPod「搜索引擎优化」" class="headerlink" title="DNSPod「搜索引擎优化」"></a>DNSPod「搜索引擎优化」</h3><p>在「域名设置」–&gt; 「功能设置」里有一个「搜索引擎优化」功能，默认是关闭的，说是和各大搜索引擎有深度合作，开启后可以优化站点收录，具体原理咱也不知道。但这是一个免费功能，所以不开白不开。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/DNSPod%E6%90%9C%E7%B4%A2%E5%BC%95%E6%93%8E%E4%BC%98%E5%8C%96.png" alt="DNSPod 搜索引擎优化"></p><p>根据官方文档，主流的搜索引擎都在优化范围之内，看上去还是很不错的：</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/DNSPod%E6%90%9C%E7%B4%A2%E5%BC%95%E6%93%8E%E4%BC%98%E5%8C%96%E5%90%8D%E5%8D%95.png" alt="DNSPod 搜索引擎优化名单"></p><h3 id="CODING-绑定自定义域名并开启-HTTPS"><a href="#CODING-绑定自定义域名并开启-HTTPS" class="headerlink" title="CODING 绑定自定义域名并开启 HTTPS"></a>CODING 绑定自定义域名并开启 HTTPS</h3><p>进入 CODING 项目的静态网站设置页面，向下滚动找到「自定义域名」的设置项，绑定自定义域名。如果在绑定域名时出现证书申请错误：</p><blockquote><p>申请错误原因是：在验证域名所有权时会定位到 GitHub Pages 的主机上导致 SSL 证书申请失败</p><p>正确的做法是：先去域名 DNS 把 GitHub 的解析暂停掉，然后再重新申请 SSL 证书，大约十秒左右就能申请成功，然后开启强制 HTTPS 访问</p><p>— <a href="https://www.itrhx.com/2019/09/16/A47-hexo-deployed-to-github-and-coding/#5-%E7%BB%91%E5%AE%9A%E5%9F%9F%E5%90%8D%E5%B9%B6%E5%BC%80%E5%90%AF-HPPTS">绑定域名并开启 HPPTS</a></p></blockquote><p>建议同时绑定有 <code>www </code> 前缀和没有 <code>www</code>  前缀的域名，并根据自己的需求将其中一个设为首选域名，另一个<strong>勾选「跳转至首选」选项</strong>，这样可以避免一些第三方服务数据统计不到一起。</p><p>如果两个域名的证书都没有问题的话，点击「强制 HTTPS」按钮即可启用强制 HTTPS 访问。设置完成后，不要忘记去 DNSPod 将之前暂停的 GitHub 解析重新开启。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/CODING%E7%BB%91%E5%AE%9A%E8%87%AA%E5%AE%9A%E4%B9%89%E5%9F%9F%E5%90%8D.png" alt="CODING 绑定自定义域名"></p><h2 id="成果检验"><a href="#成果检验" class="headerlink" title="成果检验"></a>成果检验</h2><p>至此，我们完成了博客在 GitHub Pages 和 CODING 静态网站服务上的双线部署。</p><p>首先进行 DNS 的查询，可以看见结果正如我们所期望的，从国内访问的时候走的是 CODING 的静态网站服务，而从境外访问的时候走的则是 GitHub Pages。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/DNS%E8%A7%A3%E6%9E%90%E7%BB%93%E6%9E%9C.png" alt="DNS 解析结果"></p><p>最后自然是喜闻乐见的速度对比，这里使用的是<a href="https://tool.chinaz.com/speedtest.aspx">站长之家的国内网站测速工具</a>。这里我们测试的域名分别是 CODING 和 GitHub <strong>自动生成的网站域名</strong>，多次测试下来，结果稍稍有些出乎我的意料，CODING 并没有如我想象的那样取得全面的、压倒性的速度优势，在部分地区反倒是 GitHub Pages 的访问速度更快。不过在多次测试中，CODING 的<strong>平均响应时间</strong>都比 GitHub 要快上三百到五百毫秒不等。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/%E9%80%9F%E5%BA%A6%E5%AF%B9%E6%AF%94.png" alt="速度对比"></p><p>但如果是直接测试自定义域名 <code>asurada.zone</code> 的<strong>国内访问速度</strong>的话，分别设置域名<strong>仅解析</strong>到 CODING 和 GitHub，这时候可以看到解析到 CODING 时的<strong>国内访问速度</strong>明显比解析到 GitHub 时要快上不少。</p><p>我猜测出现这种情况可能是 DNSPod 解析的功劳——当直接使用 <code>quj3xn.coding-pages.com</code> 域名进行测速时，DNS 解析的速度比较慢，进而拖累了整体的访问速度，而当使用自定义域名 <code>asurada.zone</code> 进行测速时，此时由 DNSPod 负责进行域名解析，解析速度比较快，进而加快了整体的访问速度。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/%E7%BD%91%E7%AB%99%E8%AE%BF%E9%97%AE%E9%80%9F%E5%BA%A6%E8%A7%A3%E6%9E%90%E5%88%B0CODING.png" alt="解析到 CODING 时的网站访问速度"></p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/%E7%BD%91%E7%AB%99%E8%AE%BF%E9%97%AE%E9%80%9F%E5%BA%A6%E8%A7%A3%E6%9E%90%E5%88%B0GITHUB.png" alt="解析到 GitHub 时的网站访问速度"></p><p>我们更在意的自然是使用自定义域名访问时的速度，可以看到双线部署对于自定义域名的国内访问速度的提升效果是非常明显的，这次折腾也算是圆满成功，完结撒花✿✿ヽ(ﾟ▽ﾟ)ノ✿。</p><h2 id="参考链接"><a href="#参考链接" class="headerlink" title="参考链接"></a>参考链接</h2><p><a href="https://help.coding.net/docs/devops/cd/static-website.html">CODING 静态网站服务官方文档</a></p><p><a href="https://tding.top/archives/e09249d2.html">Hexo 博客部署到 Coding</a></p><p><a href="https://www.itrhx.com/2019/09/16/A47-hexo-deployed-to-github-and-coding/">Hexo 双线部署到 Coding Pages 和 GitHub Pages 并实现全站 HTTPS</a></p>]]></content>
    
    
    <summary type="html">&lt;h2 id=&quot;为什么想要双部署&quot;&gt;&lt;a href=&quot;#为什么想要双部署&quot; class=&quot;headerlink&quot; title=&quot;为什么想要双部署&quot;&gt;&lt;/a&gt;为什么想要双部署&lt;/h2&gt;&lt;p&gt;中文博客的受众肯定是以国内为主，但部署在 Github Pages 上，服务器在国外，国内访问的速度太不稳定，如果一个页面需要将近十秒才能完全打开的话，用户体验差，页面被提前关闭的概率也会呈指数级上升。所以改善国内访问体验迫在眉睫。&lt;/p&gt;
&lt;p&gt;之前也想过直接使用 CDN 直接加速 GitHub Pages 的方式，但国内的 CDN 全部要求域名进行备案，嫌麻烦就放弃了。最后选择通过将博客同时部署到 GitHub 和 CODING 的方式来提升国内访问体验。&lt;/p&gt;
&lt;p&gt;CODING 在 19 年年底进行了一次比较大的改版，双部署的整个流程也有了不小的变化，而网络上很多教程大部分都还是基于旧版流程的。本文详细记载了将博客同时部署到 GitHub Pages 和 CODING 静态网站服务的全流程。&lt;/p&gt;</summary>
    
    
    
    <category term="个人博客" scheme="https://asurada.zone/categories/%E4%B8%AA%E4%BA%BA%E5%8D%9A%E5%AE%A2/"/>
    
    
    <category term="Hexo" scheme="https://asurada.zone/tags/Hexo/"/>
    
    <category term="GitHub" scheme="https://asurada.zone/tags/GitHub/"/>
    
    <category term="DNS" scheme="https://asurada.zone/tags/DNS/"/>
    
  </entry>
  
  <entry>
    <title>招行香港赴港开户全方位指南</title>
    <link href="https://asurada.zone/post/Creat-CMBCHK-Account/"/>
    <id>https://asurada.zone/post/Creat-CMBCHK-Account/</id>
    <published>2020-08-06T13:44:26.000Z</published>
    <updated>2020-08-06T13:44:26.000Z</updated>
    
    <content type="html"><![CDATA[<h2 id="声明"><a href="#声明" class="headerlink" title="声明"></a>声明</h2><p>文章内容信息的时效性只能保证到我自己办理结束的 19 年 12 月份，最新的要求以及相关消息还是以招商银行官网、官方客服、官方公众号的通知为准。</p><p>本文只是分享一点个人的经验，希望能够帮到有需要办理招行香港银行卡的朋友。</p><span id="more"></span><h2 id="为什么选择招行香港银行卡"><a href="#为什么选择招行香港银行卡" class="headerlink" title="为什么选择招行香港银行卡"></a>为什么选择招行香港银行卡</h2><p>亲赴香港开户的话，有很多银行可供我们选择，我本人之所以选择招行香港主要有以下几个原因，列出来仅供参考，大家可以根据自己的需求选择最适合自己的银行办理开户。</p><h3 id="支持银证转账券商较多"><a href="#支持银证转账券商较多" class="headerlink" title="支持银证转账券商较多"></a>支持银证转账券商较多</h3><p>逛券商官网的时候，发现支持银证转账的银行里面出现次数最多的就是民生香港和招行香港，而银证转账对于资金的快速调度还是很重要的，同时也是我个人比较看重的一点。民生香港和招行香港都同时支持富途、华盛通、有鱼三家券商的银证转账，招行香港仅比支持券商数量最多的民生香港少支持了一家我并不用的玖富。</p><h4 id="银证转账券商支持情况一览"><a href="#银证转账券商支持情况一览" class="headerlink" title="银证转账券商支持情况一览"></a>银证转账券商支持情况一览</h4><table><thead><tr><th align="center">银行\券商</th><th align="center">富途</th><th align="center">华盛通</th><th align="center">有鱼</th><th align="center">尊嘉</th><th align="center">玖富</th><th align="center">友信</th></tr></thead><tbody><tr><td align="center">招行香港</td><td align="center">✓</td><td align="center">✓</td><td align="center">✓</td><td align="center">✗</td><td align="center">✗</td><td align="center">✗</td></tr><tr><td align="center">民生</td><td align="center">✓</td><td align="center">✓</td><td align="center">✓</td><td align="center">✗</td><td align="center">✓</td><td align="center">✗</td></tr><tr><td align="center">招商永隆</td><td align="center">✗</td><td align="center">✓</td><td align="center">✗</td><td align="center">✗</td><td align="center">✗</td><td align="center">✗</td></tr><tr><td align="center">建设银行</td><td align="center">✗</td><td align="center">✗</td><td align="center">✓</td><td align="center">✗</td><td align="center">✗</td><td align="center">✗</td></tr></tbody></table><p>而民生香港在内地开户根据不同地域是有不同资金门槛的，最低也需要五万人民币，就算亲临香港开户同样也是需要<a href="http://hk.cmbc.com.cn/personal/account/mustknow/index.htm">五十万港币的资产证明</a>，而招行香港<strong>亲临香港办理无任何资金门槛</strong>。</p><h3 id="招行香港内地有资金门槛"><a href="#招行香港内地有资金门槛" class="headerlink" title="招行香港内地有资金门槛"></a>招行香港内地有资金门槛</h3><p>招行香港一卡通内地见证开户设有<strong>五百万</strong>人民币的资金门槛，在此就不做讨论了，只讨论亲临香港办理的情况。</p><h3 id="招行香港优点"><a href="#招行香港优点" class="headerlink" title="招行香港优点"></a>招行香港优点</h3><ol><li>支持银证转账的券商较多，仅比最多的民生香港少一家玖富</li><li>亲临香港办理无需任何资产证明</li><li>账户管理费相对较低，只需日均资产<strong>达五千港币</strong>即仅需<strong>十港币&#x2F;月</strong>。与之相比，民生香港要日均资产达一万港币才只收十港币每月，永隆则是日均资产达不到一万港币收取每月一百港币，一万港币以上免收管理费</li><li>开户无需提前预约，对应的则是现场取号后可能需要排队一到两个小时</li><li>万一赴港才发现资料有问题，后续新资料可以通过邮寄方式提交，无须多次亲赴香港</li></ol><h3 id="招行香港缺点"><a href="#招行香港缺点" class="headerlink" title="招行香港缺点"></a>招行香港缺点</h3><ol><li>账户不能即开即用，可能需要一到两个工作日时间审批，实体卡需要另行寄送</li><li>手机 App 功能不全，银证转账等操作需要使用电脑版或者网页版网银，没有直接在手机上操作方便</li><li>网点只在工作日上班，上班族需要请假才能办理</li></ol><p>综上我个人最后选择了办理招行香港银行卡。</p><h2 id="赴港前准备"><a href="#赴港前准备" class="headerlink" title="赴港前准备"></a>赴港前准备</h2><p>去一次香港对住得远的朋友来说并不是一件轻松的事情，路途所需花费的时间和金钱都不算少，肯定希望一切顺利。而想要一切顺利，前期充分的准备工作是必不可少的。</p><h3 id="准备所需文件"><a href="#准备所需文件" class="headerlink" title="准备所需文件"></a>准备所需文件</h3><p>所需文件的最新情况以官网 <a href="https://hk.cmbchina.com/Personal/Detail.aspx?guid=decdd697-c873-41d5-96ba-e17bee846690">香港一卡通开户指引及业务咨询</a> 为准。可以自行拨打招行客服电话 95555，转接人工客服直接咨询<strong>办理香港一卡通</strong>相关文件要求，再次提醒文章内提到的<strong>信息有效期只保证到 2019 年 12 月份</strong>。</p><ol><li>身份证明文件——港澳通行证以及身份证</li></ol><p>需要注意的就是港澳通行证以及身份证的<strong>剩余有效期都需在六个月以上</strong>，需要多提醒一句的是证件的有效期，港澳通行证上有证件以及签注两个有效期，只需要证件有人像那一面的<strong>证件有效期</strong>剩余在六个月以上即可。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/%E8%BA%AB%E4%BB%BD%E8%AF%81%E6%98%8E%E8%A6%81%E6%B1%82.png" alt="身份证明要求"></p><ol start="2"><li>地址证明</li></ol><p>这个地址证明是不少人不清楚的地方，其实官网上面对住址证明的要求写得很清楚，我们啥事都是尽量以官网为准。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/%E5%9C%B0%E5%9D%80%E8%AF%81%E6%98%8E%E8%A6%81%E6%B1%82.png" alt="地址证明要求"></p><p>需要注意的是上方表格里面有提到居住证，但<strong>深圳的居住证是不行的</strong>。</p><p>一般都是用的信用卡账单，而且<strong>自己打印的是不可以的</strong>，必须要是去银行网点打印或者银行直接寄送的纸质账单，我用的是招行直接寄送的纸质账单，纸质账单一般直接打信用卡人工客服要求寄送即可。</p><p>信用卡账单上面的地址是可以自己任意更改的，但需要注意的是你所填写的这个地址就是将来<strong>实体卡片寄送的地址</strong>，所以<strong>务必填写能够确保自己收到卡片的地址</strong>；再一个就是对地址的<strong>精确性是有要求的</strong>，是要求<strong>精确到门牌号</strong>，比如某某小区XX栋XX单元XXX号，如果不够详细，柜员是可能要求你重新提供合格的地址证明的。但其实住址的真实性银行是不做核查的，你只填到能够确保收到银行卡的地址也是可以的，比如XX小区XX号，在柜员询问的时候肯定回答这就是你目前的地址即可。</p><p>但请注意，<strong>公司类地址是不行的</strong>，这个是官网上明确规定不行的，必须要是住宅类地址。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/%E4%BD%8F%E5%AE%85%E7%B1%BB%E5%9C%B0%E5%9D%80%E7%9B%B8%E5%85%B3%E8%A7%84%E5%AE%9A.png" alt="住宅类地址相关规定"></p><p>如果你有更加硬核的居住证明，比如房本之类的，自然也是可以的。我去办的那天，有对夫妇就没有带地址证明，然后直接了掏出一个红澄澄的房本。</p><ol start="3"><li>内地招行储蓄卡</li></ol><p>这个如果没有的话，自己带身份证到内地招行任意网点开一张就好，没什么要求，普通的储蓄卡就行，而且里面是<strong>不要求有钱的</strong>。现在内地银行开卡都是自助机器就搞定了，很快的。</p><ol start="4"><li>Ukey(U 盾)</li></ol><p>内地招行默认给你开通的网银是<strong>大众版网银</strong>，而 Ukey 是<strong>专业版网银</strong>才有，也就是说你办理储蓄卡默认是不会给你 Ukey 的，Ukey 需要另外申请。</p><p>带身份证、招行储蓄卡去网点就可办理，不需要预约，去之前注意打电话或者在招行 App 里查看一下网点的工作时间，有些网点是周六不上班，周日才上班。申请的时候，柜员会问你申请的目的，直接说开通香港一卡通需要用就可以。费用的话是 20 元人民币。</p><p>这个拿到以后，回去在招商银行官网上下载「专业版网银」，然后按提示激活 Ukey 即可。</p><p>Ukey 长这个样子：</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/%E6%8B%9B%E8%A1%8CUkey.jpg" alt="Ukey"></p><ol start="5"><li>所需文件一览：</li></ol><ul><li><input disabled="" type="checkbox"> 身份证(剩余有效期六个月以上)</li><li><input disabled="" type="checkbox"> 港澳通行证(证件剩余有效期六个月以上)</li><li><input disabled="" type="checkbox"> 住址证明(纸质信用卡账单)</li><li><input disabled="" type="checkbox"> 内地招行储蓄卡</li><li><input disabled="" type="checkbox"> Ukey</li></ul><h3 id="事先填单"><a href="#事先填单" class="headerlink" title="事先填单"></a>事先填单</h3><p>你到了招行香港网点，开户也是需要在<strong>内地的</strong>「招商银行」App 内在线填写开户资料的，而这个资料的<strong>有效期是 30 天</strong>，也就是说你完全可以事先在内地就把开户申请填完，然后只需在填写完成以后的三十天内前往招行香港网点办理就行了，这样你一到招行香港网点就可以立即取号，办理招行香港银行卡全程耗费时间最多的就是在等叫号的时候，能早一个号就大概能节约半小时，所以<strong>强烈建议事先填好开户申请单</strong>。</p><p>填单路径为「招商银行」 App 首页 -&gt; 点击「全部」 -&gt; 选择「办卡开户」 -&gt; 点击「香港一卡通」</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/%E6%8B%9B%E5%95%86app%E5%A1%AB%E5%8D%95%E6%93%8D%E4%BD%9C%E6%8C%87%E5%BC%95.jpg" alt="在线填单"></p><p>需要填写的内容还挺多的，如实填写即可。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/%E6%8B%9B%E5%95%86app%E5%BC%80%E6%88%B7%E5%A1%AB%E5%8D%95%E9%A1%B5%E9%9D%A2.jpg" alt="招商app开户填单页面"></p><p>填写时有一个港澳通行证证件号码，这一个号码是港澳通行证有人像那一面右上角那一个九位的以字母开头(新版都是以 C 开头的)的号码。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/%E6%B8%AF%E6%BE%B3%E9%80%9A%E8%A1%8C%E8%AF%81%E6%A0%B7%E6%9C%AC.jpg" alt="港澳通行证号码"></p><p>在填工作单位信息的时候，一定不要乱填，原因见下一段。</p><p>另外还需要<strong>提前下载好天眼查或者企查查的 App</strong>，因为开户时大堂经理以及柜员会要求你出示你填写的工作单位所对应的天眼查或者企查查的查询页面，主要是为了核对你所填写的公司地址和实际查询页面上的是否一致。</p><p>出现下图所示页面即代表申请成功，这个页面<strong>最好截下屏</strong>，后面可能取号的时候需要出示给招行香港大堂经理看，不截问题也不大。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/%E6%8B%9B%E5%95%86app%E5%BC%80%E6%88%B7%E5%A1%AB%E5%8D%95%E7%BB%93%E6%9D%9F%E9%A1%B5%E9%9D%A2.jpg" alt="填单成功"></p><h3 id="了解网点相关信息及其他准备"><a href="#了解网点相关信息及其他准备" class="headerlink" title="了解网点相关信息及其他准备"></a>了解网点相关信息及其他准备</h3><ol><li>招行香港网点地址及营业时间</li></ol><p>网点地址：招行香港<strong>有且仅有</strong>「香港中环康乐广场八号交易广场三期28楼」这一个网点。至于怎么过去，我是直接坐高铁到香港西九龙，然后转地铁去的，具体怎么走会在后面的章节里面详细说。</p><p>营业时间：工作日 9：00-17：00，周六日及香港假期不营业。注意香港假期和内地假期并不一致，去之前一定要确保网点处于营业时间。最新消息可以微信关注招行香港官方公众号「招商银行香港分行HongKong」，<strong>一切消息以官方为准</strong>，如果有假期的话，官方也会提前在这个公众号推送消息的。</p><p>招行香港开户是<strong>不需要提前预约</strong> 的，你可以在任意营业时间去开户。不过因为不需要预约，所以是需要现场取号排队的，这就意味着你需要在现场等你前面的人办完业务，这个等待的时间可长可短，我当时是上午十一点半取号，下午一点二十才轮到我，排我前面大概四五个人，所以早点去总没错的。</p><ol start="2"><li>开通手机漫游功能及准备当地上网卡</li></ol><p>去之前通过对应内地手机运营商客服热线或是 App 开通国际漫游功能，确保抵达香港后手机能够及时接听电话及短信，以备不时之需。移动的话，打和接电话都是 0.99 元&#x2F;分钟，短信发内地 0.69 元&#x2F;条，收短信免费。</p><p><del>在香港上网的话，我是办理的微信的 WeSim 卡(非广告，人家也不可能给我广告费)，9.9 元有 500M 4G 流量，一般来说不看视频，刷刷微信、查查资料，办银行卡一天差不多够用了，不够用直接再在公众号上买一个流量包就行，非常方便。另外这个卡我实测是可以直接科学上网的，WeSim 自己的宣传页面讲得还比较含蓄，只说可以正常使用谷歌地图。相关使用指南以及更多购买信息直接微信关注「WeSim 小助手」公众号即可。当然其他淘宝上卖的当地上网卡也是可以的，淘宝上很多还可以直接打电话，我这里只是讲一下自己使用的而已。</del></p><p>WeSim 已于<a href="https://mp.weixin.qq.com/s/j4Rl1MchZs4M2HLuUC1vbg">2020年6月8日停止服务</a>。</p><ol start="3"><li>充电宝及充电线</li></ol><p>这个就不需要多解释了，带个容量大一点的，以备不时之需总没错的。</p><ol start="4"><li>高德地图</li></ol><p>高德地图在香港也是可以用的，人生地不熟，一个好用的地图是必须的，建议事先在内地就离线好香港地图，节约流量。可以提前在高德地图上搜索「招商银行(香港分行)」即可找到具体地点，然后收藏备用。这里再次提醒<strong>招商银行(香港分行)<strong>在香港</strong>有且仅有</strong>一个分行，地址是「香港中环康乐广场八号交易广场三期28楼」。另外<strong>「招商银行(香港分行)」和「招商永隆银行」不是一家银行</strong>，虽然两者名字里面都有一个「招商」，后者是招商银行 2008 年收购香港本地的「永隆银行」后于 2018 年改名的，请注意区分，不要导航导错了。</p><h2 id="赴港注意事项"><a href="#赴港注意事项" class="headerlink" title="赴港注意事项"></a>赴港注意事项</h2><p>如果是第一次去香港的朋友，可能有以下几个需要注意的地方。</p><h3 id="一地两检"><a href="#一地两检" class="headerlink" title="一地两检"></a>一地两检</h3><p>入境香港时，是西九龙下车后，内地先检一遍，然后香港那边再检一遍。内地检完过了闸机，有一个自助打印「入境小票」的机器，可以打印一张备用，我打印了但并没有用到。</p><p>如果是首次入境香港的话，香港那边的检查是不能走自助通道，必须走人工通道的，这点需要注意一下。</p><h3 id="八达通"><a href="#八达通" class="headerlink" title="八达通"></a>八达通</h3><p>在西九龙出来的「九龙」地铁站的客服中心购买即可，只收港币现金，成人卡 150 港币，包括五十的押金和一百港币余额，这张卡基本在香港啥都能做，公交、地铁、零售店、麦当劳都可以用。八达通余额和押金是可以退的，我没退，想着下次可能还会去香港，如果想退的话，可以咨询地铁工作人员。</p><p>还有一个 65 港币的地铁 1 日票，可以连续 24 小时无限次搭乘地铁，不建议购买，因为如果只是办卡的话，可能地铁就一个来回，二十港币都花不到，完全是亏本的。</p><h3 id="香港现在安不安全"><a href="#香港现在安不安全" class="headerlink" title="香港现在安不安全"></a>香港现在安不安全</h3><p>招行香港只在工作日营业，我是周二去的，全程除了零星在地下通道或者过街天桥看到一些涂鸦、海报以外，一切都很平静，没有感觉到不安全的地方。大家都是自己走自己的，自己干自己的事情，给我的感觉还是非常安全的，而且走在大街上谁也不认识谁，没有太多需要担心的。</p><h2 id="开户当天"><a href="#开户当天" class="headerlink" title="开户当天"></a>开户当天</h2><h3 id="怎么走？"><a href="#怎么走？" class="headerlink" title="怎么走？"></a>怎么走？</h3><p>先直接坐高铁到香港西九龙站，从西九龙站入境香港。高德地图在香港也是能用的，跟着地图导航走还是非常方便的。目的地设为「招商银行(香港分行)」，然后跟着导航步行至「九龙」地铁站，最难走的应该也就这段路了，因为弯弯绕绕的确实比较多。</p><p>如果地铁是坐到<strong>「香港」站 E2 出口</strong>出的话，那直接出了国际金融中心商场(IFC MALL)后，右边那栋楼就是。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/%E9%AB%98%E5%BE%B7%E5%9C%B0%E5%9B%BE%E8%A5%BF%E4%B9%9D%E9%BE%99-%E6%8B%9B%E8%A1%8C%E9%A6%99%E6%B8%AF.png" alt="西九龙-招行香港"></p><p>如果和我一样是从「中环」地铁站 A 出口出的话，从 A 出口到地面，上电梯后沿天桥直走，到分叉位转左，经过交易广场第一及第二期后便到达交易广场三期，这边的提示牌很多，注意多抬头看看提示牌一般都不会走错的。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/%E4%B8%AD%E7%8E%AFA%E5%87%BA%E5%8F%A3.jpg" alt="中环站"></p><h3 id="开户流程"><a href="#开户流程" class="headerlink" title="开户流程"></a>开户流程</h3><h4 id="电梯"><a href="#电梯" class="headerlink" title="电梯"></a>电梯</h4><p>我之前没用过这种电梯，还闹了个笑话——进了电梯以后发现里面怎么没有楼层按钮。原来是先需要在电梯外面的触摸面板上选择要去的楼层，然后上面会提示你到哪一部电梯(英文字母表示序号)，然后找到序号对应电梯等门开就行，会直接把你送到你所选的楼层的。招行香港分行在 28 楼。</p><h4 id="取号"><a href="#取号" class="headerlink" title="取号"></a>取号</h4><p>电梯到 28 楼开门就是招行香港，上前咨询大堂经理，我还没开口大堂经理就知道我是内地过来开户的。确认我把上文提到的五样东西都带齐了，就先让我看了一个类似”风险告知单”的东西，然后让我在招商银行手机 App 上在线填写开户申请表，如果你照我说的已经事先填好了开户申请，这时直接出示一下工作单位的天眼查或者企查查页面给大堂经理看一眼就可以取号了。取号后，大堂经理会告诉你，排在你前面的人数以及大概需要等待的时间。</p><p>需要等待的时间如果比较长，大堂经理会建议下去逛逛或者吃个饭啥的。下楼出门左转就是国际金融中心商场(IFC MALL)，去里面逛逛或者吃个中饭都是很不错的。</p><h4 id="办理开户"><a href="#办理开户" class="headerlink" title="办理开户"></a>办理开户</h4><p>我是上午十一点半取的号，大堂经理建议我是一点钟再过来，我担心过号，吃了个饭就又回来了。实际叫到我号是下午一点二十，等了快两个小时。</p><p>把身份证、港澳通行证、地址证明(只看第一页)、内地储蓄卡以及 Ukey 交给柜台工作人员，办理流程基本如下：</p><ul><li>会让你再次出示天眼查或者企查查关于你工作单位的查询页面，主要是核对工作单位地址你自己填写的和 App 查询页面的是否一致</li><li>确认住宅地址是否准确有效</li><li>设置取款密码、查询密码。查询密码是打客服电话的时候需要输入的</li><li>确认开户用途，亲临香港开户的话，<strong>照实说开户目的是投资港股是没有问题的</strong>，投资港股的话会问你是哪家券商，照实说即可</li><li>其他大致就和内地银行开户差不多，会让你签几次字</li></ul><p>整个柜台办理的过程很快，只花了十分钟就搞定了。</p><h4 id="到手文件以及相关事项说明"><a href="#到手文件以及相关事项说明" class="headerlink" title="到手文件以及相关事项说明"></a>到手文件以及相关事项说明</h4><p>柜台办理结束后，会给到你三份文件：「”香港一卡通”账户开户申请回单」、「”香港一卡通”使用提示」、「招商银行香港分行”香港一卡通”业务费率表」，三份文件都是繁体中文的。</p><ul><li>「”香港一卡通”账户开户申请回单」</li></ul><p>这是三份文件中<strong>最重要</strong>的一份，上面会有你的卡号、网上银行授权码(作用后面会提到)等相关信息，请<strong>务必保存好</strong>。这个授权码的<strong>有效期是三十天</strong>，所以务必<strong>及时关联绑定 Ukey</strong>。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/%E9%A6%99%E6%B8%AF%E4%B8%80%E5%8D%A1%E9%80%9A%E8%B4%A6%E6%88%B7%E5%BC%80%E6%88%B7%E7%94%B3%E8%AF%B7%E5%9B%9E%E5%8D%95.jpg" alt="&quot;香港一卡通&quot;账户开户申请回单"></p><ul><li>「”香港一卡通”使用提示」</li></ul><p>上面有关于怎么汇款、怎么绑定 Ukey、怎么激活卡片的说明，这些在官方公众号上也都能查到。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/%E9%A6%99%E6%B8%AF%E4%B8%80%E5%8D%A1%E9%80%9A%E4%BD%BF%E7%94%A8%E6%8F%90%E7%A4%BA.jpg" alt="&quot;香港一卡通&quot;使用提示"></p><ul><li>「招商银行香港分行”香港一卡通”业务费率表」</li></ul><p>对各种业务收费的详细说明，柜员开户时也会和你强调上面写的「账户基本费」，也就是我们常说的账户管理费。这个费用是开户满三个月后才开始收取的，从第四个月开始，如果往前算三个月卡上日均资产<strong>低于五千港币</strong>，会收取每月<strong>一百港币</strong>的账户管理费，而<strong>高于五千港币</strong>则只收取<strong>十港币</strong>，所以尽量保证卡上<strong>日均资产在五千港币以上</strong>。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/%E9%A6%99%E6%B8%AF%E4%B8%80%E5%8D%A1%E9%80%9A%E4%B8%9A%E5%8A%A1%E8%B4%B9%E7%8E%87%E8%A1%A8.jpg" alt="招商银行香港分行&quot;香港一卡通&quot;业务费率表"></p><ul><li>审批通过即可使用，无需实体卡到手</li></ul><p>柜员特意强调了，只要收到审批通过的短信，这个账号就能够进行使用了，也就是说只要你收到了账号审批通过的短信，你进行网上汇款、转账、银证绑定都是可以的，当然在此之前你需要先绑定 Ukey 才能够使用网上银行对账户进行操作。实体卡只是方便你以后进行线下刷卡消费、ATM 存取款。</p><ul><li>卡片绑定 Ukey 以及激活实体卡</li></ul><p>柜员也嘱咐了收到短信以及卡片后，需要及时进行这两步操作，这些操作的指引在「”香港一卡通”使用提示」上都有，按照指引操作即可。</p><p>拿到这三份文件整个开户就结束了，可以回去等消息了。</p><h4 id="审批时间"><a href="#审批时间" class="headerlink" title="审批时间"></a>审批时间</h4><h5 id="理论时间"><a href="#理论时间" class="headerlink" title="理论时间"></a>理论时间</h5><p>柜员在办理开户的时候和我说的是需要<strong>一到二个工作日</strong>的时间进行审批，然后<strong>一个星期内</strong>寄出实体卡片。审批通过会有<strong>短信通知</strong>。</p><h5 id="实际时间"><a href="#实际时间" class="headerlink" title="实际时间"></a>实际时间</h5><p>我是当天下午一点半办理完开户，然后当<strong>天下午三点一刻</strong>就收到了卡片审核通过的短信。这个速度比我想象的要快多了，距我在柜台办完开户还不到两个小时。但我<strong>并不能确保这是正常速度</strong>，按照柜员的说法，最慢的话需要两个工作日。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/%E5%AE%A1%E6%89%B9%E9%80%9A%E8%BF%87%E7%9F%AD%E4%BF%A1%E6%88%AA%E5%9B%BE.jpg" alt="审批通过短信"></p><h2 id="后续工作"><a href="#后续工作" class="headerlink" title="后续工作"></a>后续工作</h2><p>审批通过以后我们还有一些后续工作要做。</p><h3 id="Ukey-绑定及验证手机号码"><a href="#Ukey-绑定及验证手机号码" class="headerlink" title="Ukey 绑定及验证手机号码"></a>Ukey 绑定及验证手机号码</h3><p>按照「”香港一卡通”使用提示」去<a href="https://hk.cmbchina.com/">招行香港官网</a>下载「个人银行下载版」并安装，以后绝大部分操作都需要通过这个专业版网银进行操作，因为招行香港的<strong>手机 App 功能比较残缺</strong>。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/%E6%8B%9B%E5%95%86%E5%AE%98%E7%BD%91%E4%B8%8B%E8%BD%BD%E7%BD%91%E9%93%B6%E8%B7%AF%E5%BE%84%E6%8C%87%E5%BC%95%E5%9B%BE.png" alt="下载个人银行下载版"></p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/%E6%8B%9B%E8%A1%8C%E9%A6%99%E6%B8%AF%E4%B8%93%E4%B8%9A%E7%89%88%E7%BD%91%E9%93%B6%E7%99%BB%E5%BD%95%E7%95%8C%E9%9D%A2%E6%88%AA%E5%9B%BE.png" alt="安装专业版网银"></p><p>招行香港 UKey 绑定激活时，如果 UKey 你之前已经在<strong>内地招商银行的专业版网银</strong>上激活过了，要先输 UKey 密码(内地网银专业版密码)，然后才会弹出窗口让你输 16 位授权码，这个授权码就是前面提到的「”香港一卡通”账户开户申请回单」上写的 16 位授权码，这个授权码的<strong>有效期是三十天</strong>，所以务必<strong>及时关联绑定 Ukey</strong>。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/Ukey%E6%8E%88%E6%9D%83%E7%A0%81%E8%BE%93%E5%85%A5%E7%95%8C%E9%9D%A2%E6%88%AA%E5%9B%BE.png" alt="输入 16 位授权码"></p><p>绑定完 Ukey 以后，在专业版上记得验证手机号码，这个我忘了我是在专业版上验证的还是在手机 App 上验证的了，还是很简单的，就不详述了。</p><p>绑定完 Ukey 以及验证完手机号码，这个账户就已经能够正常使用了，可以转账、银证转账。</p><h3 id="收到实体卡及其激活"><a href="#收到实体卡及其激活" class="headerlink" title="收到实体卡及其激活"></a>收到实体卡及其激活</h3><h4 id="实体卡"><a href="#实体卡" class="headerlink" title="实体卡"></a>实体卡</h4><p>我是在开户结束以后的<strong>第五天</strong>收到实体卡片的，我的卡片是从珠海发出的， EMS 配送。快递里面就是一个信封，信封里面装有实体卡片。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/%E6%8B%9B%E8%A1%8C%E5%AE%9E%E4%BD%93%E5%8D%A1%E4%BF%A1%E5%B0%81%E7%85%A7%E7%89%87.jpg" alt="信封"></p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/%E6%8B%9B%E8%A1%8C%E9%A6%99%E6%B8%AF%E5%AE%9E%E4%BD%93%E5%8D%A1%E7%85%A7%E7%89%87.jpg" alt="卡片"></p><p>收到卡片后，<strong>需在 60 天内激活</strong>，否则卡片会作废，所以建议是<strong>收到卡当天就激活</strong>，以免忘记。要注意的是，实体卡有卡号那一面的左下角有一个内地银行卡没有的<strong>「卡片序号」</strong>，新卡的话都是「1」，这个在后面激活卡片时需要用到。</p><h4 id="实体卡激活"><a href="#实体卡激活" class="headerlink" title="实体卡激活"></a>实体卡激活</h4><p>激活有两种方式，一种是语音激活，这个在上面那张图有详细的操作指引，我选择的是网银激活。打开香港分行的专业版网银，登录以后，在「一卡通」-&gt;「其他功能」里面有「卡片激活」，按照提示激活即可，非常简单。</p><p>下图中的「凭证号」就是上文提到的「卡片序号」，激活页面下方也会有详细提示。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/%E6%8B%9B%E8%A1%8C%E4%B8%93%E4%B8%9A%E7%89%88%E7%BD%91%E9%93%B6%E5%AE%9E%E4%BD%93%E5%8D%A1%E6%BF%80%E6%B4%BB%E7%95%8C%E9%9D%A2%E6%88%AA%E5%9B%BE.png" alt="实体卡激活"></p><h3 id="功能很少的招行香港-App"><a href="#功能很少的招行香港-App" class="headerlink" title="功能很少的招行香港 App"></a>功能很少的招行香港 App</h3><p>招行香港有自己独立的手机 App——「香港一卡通」，登录的时候直接<strong>用内地的招行一卡通的账号和密码登录</strong>，两者是相通的。可惜功能没相通啊，和内地功能完善的手机 App 比起来，「香港一卡通」App 完全就是个渣渣。全部功能见下图，就可怜巴巴地这么点。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/%E9%A6%99%E6%B8%AF%E4%B8%80%E5%8D%A1%E9%80%9Aapp%E5%85%A8%E9%83%A8%E5%8A%9F%E8%83%BD%E6%88%AA%E5%9B%BE.jpg" alt="「香港一卡通」"></p><p>稍微复杂的一点操作比如银证转账都需要在电脑上用「专业版网银」配合 Ukey 才能使用，如今大家都是一个 App 走天下，招行香港这一点必须要强烈吐槽，建议多向内地招行学习。</p><h2 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h2><ol><li><p>在内地准备好需要的五样东西：身份证、港澳通行证、内地招行储蓄卡、地址证明、Ukey</p></li><li><p>在内地提前填写开户申请(非必选，到了香港再填也行)</p></li><li><p>亲临香港柜台开户</p></li><li><p>收到审批通过短信后的<strong>三十天内</strong>关联绑定 Ukey、验证手机号码</p></li><li><p>收到实体卡后的<strong>六十天内</strong>激活实体卡片</p></li></ol><p>真正办完以后回顾整个流程其实还算是比较简单的，门槛同样也是比较低，可能最大的门槛就是抽时间亲赴香港了吧。</p><p>前期的准备工作以及对很多信息的不了解也挡住了很多人，我花费时间最多的也是在前期各种资料的搜集上，这期间网上很多前辈写的文章对我也有不小的帮助，所以我也写了这篇文章分享出来，希望能够帮助到更多有办理招行香港银行卡需要的朋友。</p><h2 id="了解最新情况"><a href="#了解最新情况" class="headerlink" title="了解最新情况"></a>了解最新情况</h2><ul><li><p>微信关注招行香港官方公众号「招商银行香港分行HongKong」，在里面开卡前、开卡后以及香港网点地址等常见问题都有解答，各种操作也都有相关指引。工作日上午九点到下午五点还有客服在线，直接在公众号内发送消息即可咨询。再强调一遍，<strong>所有信息以官方为准</strong>，官方的才是最准确有效的</p></li><li><p>联系招商银行客服电话 95555</p></li></ul><h2 id="联系我"><a href="#联系我" class="headerlink" title="联系我"></a>联系我</h2><p>如果您看完文章还有不明白的地方，或者发现我文章有错误的地方需要更正，抑或是有更多想问我的细节，都欢迎您</p><ul><li>直接添加我的私人微信「AsuradaOvi」(烦请备注：招行香港开户)同我联系</li><li>直接在公众号「阿斯拉达」后台给我发消息同我联系</li></ul><p>我看到后都会在空闲时间尽快给您答复或无偿向您提供力所能及的帮助。也欢迎您反馈关于办理流程、要求上最新的变动给我，我会及时更新到文章里面。</p><h2 id="参考链接"><a href="#参考链接" class="headerlink" title="参考链接"></a>参考链接</h2><p><a href="https://hk.cmbchina.com/Personal/Detail.aspx?guid=decdd697-c873-41d5-96ba-e17bee846690">香港一卡通开户指引及业务咨询</a></p><p><a href="https://hk.cmbchina.com/">招行香港官网</a></p><p><a href="https://zhuanlan.zhihu.com/p/36570603">开通招行香港一卡通的详细list</a></p><p><a href="http://hk.cmbc.com.cn/personal/account/mustknow/index.htm">民生香港五十万港币资产要求</a></p>]]></content>
    
    
    <summary type="html">&lt;h2 id=&quot;声明&quot;&gt;&lt;a href=&quot;#声明&quot; class=&quot;headerlink&quot; title=&quot;声明&quot;&gt;&lt;/a&gt;声明&lt;/h2&gt;&lt;p&gt;文章内容信息的时效性只能保证到我自己办理结束的 19 年 12 月份，最新的要求以及相关消息还是以招商银行官网、官方客服、官方公众号的通知为准。&lt;/p&gt;
&lt;p&gt;本文只是分享一点个人的经验，希望能够帮到有需要办理招行香港银行卡的朋友。&lt;/p&gt;</summary>
    
    
    
    <category term="投资理财" scheme="https://asurada.zone/categories/%E6%8A%95%E8%B5%84%E7%90%86%E8%B4%A2/"/>
    
    
    <category term="港卡" scheme="https://asurada.zone/tags/%E6%B8%AF%E5%8D%A1/"/>
    
  </entry>
  
  <entry>
    <title>雷蛇炼狱蝰蛇2013 更换中键微动</title>
    <link href="https://asurada.zone/post/RepairTheDeathadder2013/"/>
    <id>https://asurada.zone/post/RepairTheDeathadder2013/</id>
    <published>2020-08-04T13:04:42.000Z</published>
    <updated>2020-08-04T13:04:42.000Z</updated>
    
    <content type="html"><![CDATA[<p>第一次自己动手修鼠标，挺好玩的。</p><span id="more"></span><h2 id="前情提要"><a href="#前情提要" class="headerlink" title="前情提要"></a>前情提要</h2><p>这款炼狱蝰蛇 2013 是自己四年前买的，之前一直用得好好的，但最近滚轮的按键功能突然失效了，表现为能够正常按压，但无法正常触发按键功能。在日常浏览网页时，我习惯用中键来关闭标签页以及在新窗口打开链接，现在中键突然失灵了，对我的日常使用造成了很大的不便。</p><p>之前有在网上看过不少帖子都是自己修鼠标，感觉也不是很难，所以这次我也尝试一下来自己修鼠标。</p><h2 id="所需工具"><a href="#所需工具" class="headerlink" title="所需工具"></a>所需工具</h2><p>1.电烙铁<br>2.镊子<br>3.十字螺丝刀<br>4.新中键微动<br>5.焊锡丝<br>6.小刀</p><h2 id="拆解鼠标"><a href="#拆解鼠标" class="headerlink" title="拆解鼠标"></a>拆解鼠标</h2><p>通过搜索在什么值得买上面找到了这篇<a href="https://post.smzdm.com/p/568792/">维修教程</a>，虽然文中问题是鼠标出现了双击的现象，和我的问题并不相同，但同样都是通过更换微动来解决问题，而且各个步骤都比较详细，给我提供了很大的帮助。</p><p>首先用刀片分别将鼠标背面左右上角的两个脚垫撬下来，两个脚垫是通过胶粘上去的，撬下来以后保存好，后面还原的时候还可以再粘回去。去掉两个脚垫后就可以看到里面的两颗螺丝了。这两颗螺丝可以直接拧下。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/%E5%8E%BB%E9%99%A4%E8%84%9A%E5%9E%AB.jpg" alt="去除脚垫"></p><p>需要注意的是第三颗螺丝的位置，是隐藏在贴纸的下方，位置如下图所示，直接用螺丝刀捅破贴纸即可看到。这颗螺丝拧出一定距离即可，不必全部拧出。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/%E9%9A%90%E8%97%8F%E7%9A%84%E7%AC%AC%E4%B8%89%E9%A2%97%E8%9E%BA%E4%B8%9D.jpg" alt="隐藏的第三颗螺丝"></p><p>三颗螺丝处理完毕后，从下图所示处往下掰，即可打开鼠标上盖，打开时小心不要用力过猛，因为上盖上有一根灯光线和主板相连，不小心的话可能会扯断。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/%E6%8E%B0%E5%BC%80%E5%A4%96%E5%A3%B3.jpg" alt="掰开外壳"></p><p>断开上盖与主板的连线后，即可移走上盖，看到鼠标主板。接下来如下图所示依次卸下主板上的三颗固定螺丝、左侧按键微动上的两颗螺丝以及滚轮旁边的小黑色螺丝后，最后再断开两根排线，即可取下主板。注意保管好螺丝，特别那颗较小的黑色螺丝。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/%E6%8B%86%E5%8D%B8%E4%B8%BB%E6%9D%BF.png" alt="拆卸主板"></p><h2 id="更换微动"><a href="#更换微动" class="headerlink" title="更换微动"></a>更换微动</h2><p>观察主板可以看到滚轮横杆右侧的下方有一颗正方形微动，判断应该就是这个地方的微动损坏导致中键失灵。于是在万能的淘宝上花八毛钱+七块钱运费买了一个新的微动。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/%E6%96%B0%E8%80%81%E5%BE%AE%E5%8A%A8.jpg" alt="新老微动"></p><p>因为没有吸锡器，可以直接用电烙铁加热主板背面的焊点，然后边加热边拔也是可以把微动给卸下来的。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/%E5%8D%B8%E4%B8%8B%E5%BE%AE%E5%8A%A8.jpg" alt="卸下微动"></p><p>微动只是一个开关，不区分方向，将新微动针脚插入到主板对应孔位上，然后用电烙铁和焊锡对准针脚化开焊锡即可完成更换。如果卸旧微动的时候焊孔内还残留有焊锡也不用担心，直接加热焊孔，将焊锡加热到流动状，这时新微动针脚可以轻松穿过焊孔。</p><h2 id="重装鼠标"><a href="#重装鼠标" class="headerlink" title="重装鼠标"></a>重装鼠标</h2><p>按照刚刚的拆解步骤一步一步还原即可，排线全都有防呆设计，也不需要担心会接反。<br><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/%E9%87%8D%E8%A3%85%E9%BC%A0%E6%A0%87.jpg" alt="重装鼠标"></p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/%E6%BB%A1%E8%A1%80%E5%A4%8D%E6%B4%BB.jpg" alt="满血复活"></p><p>最后自然是连接电脑进行测试，功能一切正常，又可以愉快地使用中键了。</p><h2 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h2><p>在有帖子可以参考的情况下，整个更换过程还是比较简单的，最大的困难可能是大部分同学没有电烙铁，专门为此添置一个可能显得有些本末倒置，毕竟电烙铁也不便宜。</p><p>自己动手，丰衣足食。人生第一次自己动手更换鼠标，成就感还是不小的。看到鼠标在自己手里满血复活，开心。</p><h2 id="参考链接"><a href="#参考链接" class="headerlink" title="参考链接"></a>参考链接</h2><p><a href="https://post.smzdm.com/p/568792/">“拿什么拯救你，我的双击蛇”— 手把手教你更换Razer炼狱蝰蛇鼠标微动</a></p>]]></content>
    
    
    <summary type="html">&lt;p&gt;第一次自己动手修鼠标，挺好玩的。&lt;/p&gt;</summary>
    
    
    
    <category term="小事" scheme="https://asurada.zone/categories/%E5%B0%8F%E4%BA%8B/"/>
    
    
    <category term="DIY" scheme="https://asurada.zone/tags/DIY/"/>
    
    <category term="外设" scheme="https://asurada.zone/tags/%E5%A4%96%E8%AE%BE/"/>
    
  </entry>
  
  <entry>
    <title>利用 Pqi 实现 Python 快速换源</title>
    <link href="https://asurada.zone/post/change-python-pypisource/"/>
    <id>https://asurada.zone/post/change-python-pypisource/</id>
    <published>2020-06-06T07:26:52.000Z</published>
    <updated>2020-06-06T07:26:52.000Z</updated>
    
    <content type="html"><![CDATA[<p>pip 默认的软件源是国外的，下载起来速度很慢，我们可以将软件源换成国内的镜像源，大幅提高下载速度。本文介绍利用 <code>pqi</code> 这一小工具来实现简单快速地更换 pip 软件源。</p><span id="more"></span><p><code>pqi</code> 是国内开发者 <a href="https://github.com/yhangf">yhf</a> 开发的 <a href="https://github.com/yhangf/PyQuickInstall">PyQuickInstall</a> 工具的简称，这款工具可以非常方便地帮助我们切换 pip 软件源，如果觉得好用的话，大家可以动动鼠标，在 Github 上面 Star 一下。</p><p>临时使用清华大学开源软件镜像源安装 pqi ：</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">pip install pqi -i https://pypi.tuna.tsinghua.edu.cn/simple</span><br></pre></td></tr></table></figure><p>安装完成后，直接在命令行即可使用 pqi ：</p><figure class="highlight shell"><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">//列举所有支持的PyPi源</span><br><span class="line">pqi ls</span><br><span class="line">//改变 PyPi源</span><br><span class="line">pqi use &lt;name&gt;</span><br><span class="line">//显示当前PyPi源</span><br><span class="line">pqi show</span><br><span class="line">//移除pip源</span><br><span class="line">pqi remove &lt;name&gt;</span><br><span class="line">//添加新的pip源</span><br><span class="line">pqi add &lt;name&gt; &lt;url&gt;</span><br><span class="line">//升级到最新版 pqi</span><br><span class="line">pip install --upgrade pqi</span><br></pre></td></tr></table></figure><p>如果决定使用上面提到过的清华大学镜像源，使用如下命令即可：</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">pqi use tuna</span><br></pre></td></tr></table></figure><p>然后就可以享受飞一般的 pip下载速度了。</p>]]></content>
    
    
    <summary type="html">&lt;p&gt;pip 默认的软件源是国外的，下载起来速度很慢，我们可以将软件源换成国内的镜像源，大幅提高下载速度。本文介绍利用 &lt;code&gt;pqi&lt;/code&gt; 这一小工具来实现简单快速地更换 pip 软件源。&lt;/p&gt;</summary>
    
    
    
    <category term="开发环境" scheme="https://asurada.zone/categories/%E5%BC%80%E5%8F%91%E7%8E%AF%E5%A2%83/"/>
    
    
    <category term="Python" scheme="https://asurada.zone/tags/Python/"/>
    
  </entry>
  
  <entry>
    <title>Hexo 博客修改记录</title>
    <link href="https://asurada.zone/post/hexo-blog-settings/"/>
    <id>https://asurada.zone/post/hexo-blog-settings/</id>
    <published>2020-05-08T03:39:12.000Z</published>
    <updated>2020-05-08T03:39:12.000Z</updated>
    
    <content type="html"><![CDATA[<p>记录自己博客所做的修改，供他人参考以及自己备忘。</p><span id="more"></span><h2 id="提交搜索引擎收录"><a href="#提交搜索引擎收录" class="headerlink" title="提交搜索引擎收录"></a>提交搜索引擎收录</h2><p>博客搭建好了，如果希望自己博客的内容被更多人看到，搜索引擎所带来的流量是不容忽视的。为了让搜索引擎更快地收录我们的网站，我们可以主动到搜索引擎的站长平台提交我们的网站。</p><p>因为搜索引擎收录的内容比较多，所以专门单独写了一篇文章，具体内容请跳转 <a href="https://asurada.zone/post/Blog-Search-Engine-Index/">Hexo 博客主流搜索引擎收录详细指南</a>查看。</p><h2 id="站内搜索"><a href="#站内搜索" class="headerlink" title="站内搜索"></a>站内搜索</h2><blockquote><p>此项配置基于 Hexo 5.1.1，Next 8.0.0，hexo-generator-searchdb V1.3.2</p></blockquote><p>该功能由 <a href="https://github.com/theme-next/hexo-generator-searchdb">hexo-generator-searchdb</a> 提供，效果如下图：</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/37-%E7%AB%99%E5%86%85%E6%90%9C%E7%B4%A2%E6%95%88%E6%9E%9C%E5%9B%BE.png" alt="站内搜索"></p><p>在根目录下执行以下命令安装插件：</p><figure class="highlight cmake"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ npm <span class="keyword">install</span> hexo-generator-searchdb</span><br></pre></td></tr></table></figure><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><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">local_search:</span><br><span class="line">  enable: true</span><br><span class="line">  trigger: auto # 每次输入改变都重新搜索</span><br><span class="line">  top_n_per_article: 3 # 每篇文章显示的搜索结果数量</span><br><span class="line">  unescape: false</span><br></pre></td></tr></table></figure><p>在<strong>站点配置</strong>文件中<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><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">search:</span><br><span class="line">  path: search.xml # 后缀可选 .xml 和 .json</span><br><span class="line">  field: post # 指定搜索范围，可选 post | page | all</span><br><span class="line">  content: true # 是否牵引文章的全部内容，false 则只牵引文章标题</span><br><span class="line">  format: html # 指定页面内容形式，可选 html | raw (Markdown) | striptags </span><br></pre></td></tr></table></figure><p>配置完成后，执行 <code>hexo g</code> 命令会在 <code>public</code> 文件夹下自动生成 <code>search.xml</code> 文件。</p><h2 id="文末版权声明修改"><a href="#文末版权声明修改" class="headerlink" title="文末版权声明修改"></a>文末版权声明修改</h2><h3 id="版权声明添加标题"><a href="#版权声明添加标题" class="headerlink" title="版权声明添加标题"></a>版权声明添加标题</h3><blockquote><p>此项配置基于 Hexo 4.2，Next 7.8.0</p></blockquote><p>Next 主题自带的版权声明默认只有作者、链接、版权声明三项，为方便他人转载，我觉得有必要加入文章标题的显示。</p><div class="note info"><p>Next 8.0 以上版本改为在 <code>post-copyright.njk</code> 中修改。</p></div><p>首先修改 <code>.\themes\next\layout\_partials\post\post-copyright.swig</code> 文件，在 <code>&lt;ul&gt; &lt;/ul&gt;</code> 标签内根据自己的需求在相应位置<strong>新增</strong>以下代码：</p><figure class="highlight html"><figcaption><span>.\themes\next\layout\_partials\post\post-copyright.swig</span></figcaption><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="tag">&lt;<span class="name">li</span> <span class="attr">class</span>=<span class="string">&quot;post-copyright-title&quot;</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">strong</span>&gt;</span>&#123;&#123; __(&#x27;post.copyright.title&#x27;) + __(&#x27;symbol.colon&#x27;) &#125;&#125; <span class="tag">&lt;/<span class="name">strong</span>&gt;</span></span><br><span class="line">    &#123;&#123; post.title &#125;&#125;</span><br><span class="line">  <span class="tag">&lt;/<span class="name">li</span>&gt;</span></span><br></pre></td></tr></table></figure><p>由于 <code>post.copyright.title</code> 是我们自己新增的，这一字段 Next 默认是没有对应的中文翻译的，所以我们需要通过修改 <code>.\themes\next\languages\zh-CN.yml</code> 文件来添加翻译，打开文件，搜索 <code>copyright</code> ，在下面新增 <code>title: 本文标题</code> 。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/5-zhCN%E5%A2%9E%E5%8A%A0%E7%BF%BB%E8%AF%91.png" alt="zh-CN.yml 增加对应翻译"></p><p>执行 <code>hexo g</code> 重新生成博客，<code>hexo s</code> 本地调试查看效果：</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/6-%E6%9C%AC%E6%96%87%E6%A0%87%E9%A2%98%E6%95%88%E6%9E%9C%E5%9B%BE.png" alt="本文标题效果图"></p><p>效果正是我想要的，确认无误后 <code>hexo d</code> 部署。</p><h3 id="「本文链接」添加快速复制按钮"><a href="#「本文链接」添加快速复制按钮" class="headerlink" title="「本文链接」添加快速复制按钮"></a>「本文链接」添加快速复制按钮</h3><blockquote><p>此项配置基于 Hexo 4.2，Next 7.8.0，本小节主要参考 <a href="http://yearito.cn/posts/hexo-advanced-settings.html">yearito’s Blog | Hexo搭建个人博客系列：进阶设置篇</a></p></blockquote><div class="note info"><p>Next 8.0 以上版本改为在 <code>post-copyright.njk</code> 中修改。</p><p>Next V8 将自带的 Font Awesome 图标库由 4.7.0 版本升级为了 5.13.0 版本。此次升级并不向下兼容，所以需要修改配置文件中与 Font Awesome 相关的内容，否则图标可能无法正常显示。</p></div><p>修改 <code>.\themes\next\layout\_partials\post\post-copyright.swig</code> 文件，改动如下：</p><figure class="highlight diff"><figcaption><span>.\themes\next\layout\_partials\post\post-copyright.swig</span></figcaption><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></pre></td><td class="code"><pre><span class="line">&#123;%- set ccIcon = &#x27;&lt;i class=&quot;fa fa-fw fa-creative-commons&quot;&gt;&lt;/i&gt;&#x27; %&#125;</span><br><span class="line">&#123;%- set ccText = theme.creative_commons.license | upper %&#125;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="addition">+&lt;!-- JS库 clipboard 用来拷贝内容到粘贴板--&gt;</span></span><br><span class="line"><span class="addition">+&lt;script src=&quot;https://cdn.jsdelivr.net/npm/clipboard@2.0.6/dist/clipboard.min.js&quot;&gt;&lt;/script&gt;</span></span><br><span class="line"></span><br><span class="line"><span class="addition">+&lt;!-- JS库 sweetalert 用来显示提示信息--&gt;</span></span><br><span class="line"><span class="addition">+&lt;script src=&quot;https://cdn.jsdelivr.net/npm/sweetalert@2.1.2/dist/sweetalert.min.js&quot;&gt;&lt;/script&gt;</span></span><br><span class="line"></span><br><span class="line">&lt;div&gt;</span><br><span class="line">&lt;ul class=&quot;post-copyright&quot;&gt;</span><br><span class="line"></span><br><span class="line">  &lt;!-- 本文标题 --&gt;</span><br><span class="line">  &lt;li class=&quot;post-copyright-title&quot;&gt;</span><br><span class="line">    &lt;strong&gt;&#123;&#123; __(&#x27;post.copyright.title&#x27;) + __(&#x27;symbol.colon&#x27;) &#125;&#125; &lt;/strong&gt;</span><br><span class="line">    &#123;&#123; post.title &#125;&#125;</span><br><span class="line">  &lt;/li&gt;</span><br><span class="line"></span><br><span class="line">  &lt;!-- 本文作者 --&gt;</span><br><span class="line">  &lt;li class=&quot;post-copyright-author&quot;&gt;</span><br><span class="line">    &lt;strong&gt;&#123;&#123; __(&#x27;post.copyright.author&#x27;) + __(&#x27;symbol.colon&#x27;) &#125;&#125; &lt;/strong&gt;</span><br><span class="line">    &#123;&#123;- page.author or author &#125;&#125;</span><br><span class="line">  &lt;/li&gt;</span><br><span class="line"></span><br><span class="line">  &lt;!-- 引用链接 --&gt;</span><br><span class="line">  &lt;li class=&quot;post-copyright-link&quot;&gt;</span><br><span class="line">    &lt;strong&gt;&#123;&#123; __(&#x27;post.copyright.link&#x27;) + __(&#x27;symbol.colon&#x27;) &#125;&#125;&lt;/strong&gt;</span><br><span class="line">    &#123;&#123; next_url(page.permalink, page.permalink, &#123;title: page.title&#125;) &#125;&#125;</span><br><span class="line"><span class="addition">+    &lt;span class=&quot;copy-path&quot; title=&quot;点击复制 Markdown 引用链接&quot;</span></span><br><span class="line"><span class="addition">+      &gt;&lt;i</span></span><br><span class="line"><span class="addition">+        style=&quot;cursor: pointer&quot;</span></span><br><span class="line"><span class="addition">+        class=&quot;fa fa-clipboard&quot;</span></span><br><span class="line"><span class="addition">+        data-clipboard-text=&quot;[&#123;&#123; post.author | default(author) &#125;&#125;&#x27;s Blog | &#123;&#123; post.title &#125;&#125;](&#123;&#123; post.permalink &#125;&#125;)&quot;</span></span><br><span class="line"><span class="addition">+        aria-label=&quot;&#123;&#123; __(&#x27;post.copyright.copy_success&#x27;) &#125;&#125;&quot;</span></span><br><span class="line"><span class="addition">+      &gt;&lt;/i</span></span><br><span class="line"><span class="addition">+    &gt;&lt;/span&gt;</span></span><br><span class="line"><span class="addition">+  &lt;/li&gt;</span></span><br><span class="line">    </span><br><span class="line">  &lt;!-- 版权声明 --&gt;</span><br><span class="line">  &lt;li class=&quot;post-copyright-license&quot;&gt;</span><br><span class="line">    &lt;strong&gt;&#123;&#123; __(&#x27;post.copyright.license_title&#x27;) + __(&#x27;symbol.colon&#x27;) &#125;&#125; &lt;/strong&gt;</span><br><span class="line">    &#123;&#123;- __(&#x27;post.copyright.license_content&#x27;, next_url(ccURL, ccIcon + ccText)) &#125;&#125;</span><br><span class="line">  &lt;/li&gt;</span><br><span class="line">&lt;/ul&gt;</span><br><span class="line"></span><br><span class="line"><span class="addition">+ &lt;script&gt;</span></span><br><span class="line"><span class="addition">+   var clipboard = new ClipboardJS(&quot;.fa-clipboard&quot;);</span></span><br><span class="line"><span class="addition">+  clipboard.on(&quot;success&quot;, function(target) &#123;</span></span><br><span class="line"><span class="addition">+    var message = document.createElement(&quot;div&quot;);</span></span><br><span class="line"><span class="addition">+    message.innerHTML =</span></span><br><span class="line"><span class="addition">+      &#x27;&lt;i class=&quot;fa fa-check-circle message-icon&quot;&gt;&lt;/i&gt;&lt;span class=&quot;message-content&quot;&gt;&#x27; +</span></span><br><span class="line"><span class="addition">+      target.trigger.getAttribute(&quot;aria-label&quot;) +</span></span><br><span class="line"><span class="addition">+      &quot;&lt;/span&gt;&quot;;</span></span><br><span class="line"><span class="addition">+    swal(&#123;</span></span><br><span class="line"><span class="addition">+      content: message,</span></span><br><span class="line"><span class="addition">+      className: &quot;copy-success-message&quot;,</span></span><br><span class="line"><span class="addition">+      timer: 1000,</span></span><br><span class="line"><span class="addition">+      button: false</span></span><br><span class="line"><span class="addition">+    &#125;);</span></span><br><span class="line"><span class="addition">+  &#125;);</span></span><br><span class="line"><span class="addition">+ &lt;/script&gt;</span></span><br><span class="line"></span><br><span class="line">&lt;/div&gt;</span><br><span class="line"></span><br></pre></td></tr></table></figure><div class="note info"><p>Next 8.0 以上版本改为在 <code>post-footer.styl</code> 中修改。</p></div><p>在版权样式文件 <code>.themes\next\source\css\_common\components\post\post-copyright.styl</code> 中<strong>新增</strong>如下样式：</p><figure class="highlight css"><figcaption><span>.themes\next\source\css\_common\components\post\post-copyright.styl</span></figcaption><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></pre></td><td class="code"><pre><span class="line"><span class="selector-class">.swal-overlay</span> &#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"><span class="selector-class">.copy-success-message</span> &#123;</span><br><span class="line">  <span class="attribute">box-shadow</span>: <span class="number">0px</span> <span class="number">4px</span> <span class="number">12px</span> <span class="built_in">rgba</span>(<span class="number">0</span>, <span class="number">0</span>, <span class="number">0</span>, <span class="number">0.15</span>);</span><br><span class="line">  <span class="attribute">border-radius</span>: <span class="number">4px</span>;</span><br><span class="line">  <span class="attribute">width</span>: auto;</span><br><span class="line">  <span class="attribute">margin</span>: <span class="number">16</span>x <span class="number">0px</span>;</span><br><span class="line">  <span class="attribute">vertical-align</span>: middle;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="selector-class">.copy-success-message</span> <span class="selector-class">.swal-content</span> &#123;</span><br><span class="line">  <span class="attribute">margin</span>: <span class="number">0px</span> <span class="number">0px</span> <span class="meta">!important</span>;</span><br><span class="line">  <span class="attribute">padding</span>: <span class="number">10px</span> <span class="number">16px</span>;</span><br><span class="line">  <span class="attribute">line-height</span>: <span class="number">1em</span>;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="selector-class">.copy-success-message</span> <span class="selector-class">.message-icon</span> &#123;</span><br><span class="line">  <span class="attribute">color</span>: <span class="number">#52c41a</span>;</span><br><span class="line">  <span class="attribute">margin-right</span>: <span class="number">8px</span>;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="selector-class">.copy-success-message</span> <span class="selector-class">.message-content</span> &#123;</span><br><span class="line">  <span class="attribute">font-size</span>: <span class="number">14px</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>然后补全版权信息文案字段：</p><figure class="highlight diff"><figcaption><span>.\themes\next\languages\zh-CN.yml</span></figcaption><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">post:</span><br><span class="line">  copyright:</span><br><span class="line"><span class="addition">+   copy_success: 复制成功</span></span><br></pre></td></tr></table></figure><p>之后点击「本文链接」后的图标便可以快捷复制 Markdown 格式的引用链接，并将弹出复制成功的提示语。</p><blockquote><p>该功能主要借助 <a href="https://clipboardjs.com/">clipboard</a> 和 <a href="https://sweetalert.js.org/">sweetalert</a> 两个 js 库来实现，并参考 <a href="https://ant.design/components/message/">antDesign | message 组件</a> 重写了弹框样式。</p></blockquote><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/17-%E6%9C%AC%E6%96%87%E9%93%BE%E6%8E%A5%E5%BF%AB%E9%80%9F%E5%A4%8D%E5%88%B6%E6%95%88%E6%9E%9C.png" alt="链接快速复制效果"></p><h2 id="修改文章-URL-地址"><a href="#修改文章-URL-地址" class="headerlink" title="修改文章 URL 地址"></a>修改文章 URL 地址</h2><blockquote><p>此项配置基于 Hexo 4.2，Next 7.8.0</p></blockquote><p>Hexo 默认的文章 URL 地址为 <code>https://yoursite.com/:year/:month/:day/:title/</code>，层级较多，我自己看着碍眼，据说对 SEO 也不利。打开站点配置文件 <code>_config.yml</code> ，找到  <code>permalink</code>，将其改成自己想要的格式，我的很简单，全部的文章都是 <code>post</code>。</p><figure class="highlight yml"><figcaption><span>./_config.yml</span></figcaption><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"># 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; and root as &#x27;/child/&#x27;</span></span><br><span class="line"><span class="attr">url:</span> <span class="string">https://asurada.zone</span></span><br><span class="line"><span class="attr">root:</span> <span class="string">/</span></span><br><span class="line"><span class="string">-permalink:</span> <span class="string">:year/:month/:day/:title/</span></span><br><span class="line"><span class="string">+permalink:</span> <span class="string">post/:title/</span></span><br><span class="line"><span class="attr">permalink_defaults:</span></span><br></pre></td></tr></table></figure><h2 id="生成-RSS-并在侧边栏添加-RSS-按钮"><a href="#生成-RSS-并在侧边栏添加-RSS-按钮" class="headerlink" title="生成 RSS 并在侧边栏添加 RSS 按钮"></a>生成 RSS 并在侧边栏添加 RSS 按钮</h2><blockquote><p>此项配置基于 Hexo 5.0，Next 7.8.0</p></blockquote><h3 id="安装-hexo-generator-feed-插件"><a href="#安装-hexo-generator-feed-插件" class="headerlink" title="安装 hexo-generator-feed 插件"></a>安装 hexo-generator-feed 插件</h3><p>在 Hexo 根目录执行命令，安装 <a href="https://github.com/hexojs/hexo-generator-feed">hexo-generator-feed</a> 插件：</p><figure class="highlight shell"><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-feed --save</span><br></pre></td></tr></table></figure><p>安装结束时后，此时重新 <code>hexo g</code> 便会直接在 <code>Public</code> 文件夹下自动生成  <code>atom.xml</code>文件。默认使用 atom 格式、输出全文、日期倒序排列，如果预设符合自己的要求，可以直接跳过下一步。</p><h3 id="配置站点配置文件"><a href="#配置站点配置文件" class="headerlink" title="配置站点配置文件"></a>配置站点配置文件</h3><p>在站点配置文件 <code>_config.yml</code>添加相关配置：</p><figure class="highlight diff"><figcaption><span>.\_config.yml</span></figcaption><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="addition">+# RSS</span></span><br><span class="line"><span class="addition">+feed:</span></span><br><span class="line"><span class="addition">+ type: atom</span></span><br><span class="line"><span class="addition">+ path: atom.xml</span></span><br><span class="line"><span class="addition">+ limit: false</span></span><br></pre></td></tr></table></figure><p>配置含义：</p><ol><li><code>type</code>：RSS的类型，可选 atom&#x2F;rss2，默认 atom</li><li><code>path</code>：Feed 路径，默认 .&#x2F;atom.xml 或 .&#x2F;rss2.xml</li><li><code>limit</code>: 展示文章的数量，使用 0 或 false 则输出所有文章</li></ol><h3 id="侧边栏添加-RSS-图标"><a href="#侧边栏添加-RSS-图标" class="headerlink" title="侧边栏添加 RSS 图标"></a>侧边栏添加 RSS 图标</h3><p>Next 在<a href="https://github.com/theme-next/hexo-theme-next/releases/tag/v7.6.0">V7.6.0</a>中移除了侧边栏的 RSS 图标，后续又在<a href="https://github.com/theme-next/hexo-theme-next/releases/tag/v7.7.1">V7.7.1</a>中通过「Follow_me」功能将 RSS 图标引入到了文章的结尾区域。但我觉得 RSS 在整个网站的优先级应该足够高，下面是如何将 RSS 图标重新加入侧边栏的方法。</p><p>原理其实很简单，就是利用 Next 主题自带的 Social Links 功能，将 RSS 也变成一个 Social Link。修改主题配置文件 <code>.\source\_data\next.yml</code> 如下：</p><figure class="highlight diff"><figcaption><span>.\source\_data\next.yml</span></figcaption><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">social:</span><br><span class="line">  GitHub: https://github.com/ousugo || github</span><br><span class="line"><span class="addition">+ RSS: https://asurada.zone/atom.xml || rss</span></span><br><span class="line">  #E-Mail: mailto:yourname@gmail.com || envelope</span><br></pre></td></tr></table></figure><p>“Soical Links” 的格式为 <code>Key: permalink || icon</code>，其中 <code>Key</code> 为图标旁边显示的名称，<code>permalink</code> 为目标地址，这里指 RSS Feed 的地址，<code>icon</code> 为将要显示的图标在 <a href="https://fontawesome.com/">Font Awesome</a> 中的名字。</p><p>最终效果如下：</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/19-%E4%BE%A7%E8%BE%B9%E6%A0%8FRSS%E5%9B%BE%E6%A0%87%E6%95%88%E6%9E%9C.png" alt="侧边栏RSS图标效果"></p><h2 id="美化"><a href="#美化" class="headerlink" title="美化"></a>美化</h2><h3 id="文末添加结束标记"><a href="#文末添加结束标记" class="headerlink" title="文末添加结束标记"></a>文末添加结束标记</h3><blockquote><p>此项配置基于 Hexo 4.2，Next 7.8.0</p></blockquote><p>感觉文章结束以后，紧接着就是打赏按钮，显得较为突兀，所以在文末添加结束标记，效果如下：</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/15-%E6%96%87%E6%9C%AB%E7%BB%93%E6%9D%9F%E6%A0%87%E8%AE%B0.png" alt="文末结束标记"></p><p>修改主题配置文件 <code>.\source\_data\next.yml</code>，取消 <code>postBodyEnd</code> 前的注释，启用 <code>post-metabody-end.swig</code> 这一自定义文件：</p><figure class="highlight yaml"><figcaption><span>.\source\_data\next.yml</span></figcaption><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 class="comment"># Define custom file paths.</span></span><br><span class="line"><span class="comment"># Create your custom files in site directory `source/_data` and uncomment needed files below.</span></span><br><span class="line"><span class="attr">custom_file_path:</span></span><br><span class="line">  <span class="comment">#head: source/_data/head.swig</span></span><br><span class="line">  <span class="comment">#header: source/_data/header.swig</span></span><br><span class="line">  <span class="comment">#sidebar: source/_data/sidebar.swig</span></span><br><span class="line">  <span class="comment">#postMeta: source/_data/post-meta.swig</span></span><br><span class="line"><span class="bullet">-</span> <span class="comment">#postBodyEnd: source/_data/post-metabody-end.swig</span></span><br><span class="line"><span class="string">+</span> <span class="attr">postBodyEnd:</span> <span class="string">source/_data/post-metabody-end.swig</span></span><br></pre></td></tr></table></figure><p>我们可以打开 <code>.\themes\next\layout\_macro\post.swig</code> 文件，搜索 <code>next_inject</code>，定位到 <code>next_inject(&#39;postBodyEnd&#39;)</code>：</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/16-post_swig%E6%8F%92%E5%85%A5%E4%BD%8D%E7%BD%AE.png" alt="post.swig 插入位置"></p><p>这一段代码的含义就是当上面的 <code>postBodyEnd</code> 被取消注释时，<code>post-metabody-end.swig</code> 文件就会被插入到这里（望文生义，如理解有误请指出）。</p><p>在 <code>.\source\_data</code> 文件下新建 <code>post-metabody-end.swig</code> 文件，添加如下代码：</p><figure class="highlight html"><figcaption><span>.\source\_data\post-metabody-end.swig</span></figcaption><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="tag">&lt;<span class="name">div</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">div</span> <span class="attr">style</span>=<span class="string">&quot;text-align:center;color:#bfbfbf;font-size:16px;&quot;</span>&gt;</span></span><br><span class="line">      <span class="tag">&lt;<span class="name">span</span>&gt;</span>-------- 本文结束 <span class="tag">&lt;/<span class="name">span</span>&gt;</span></span><br><span class="line">      <span class="tag">&lt;<span class="name">i</span> <span class="attr">class</span>=<span class="string">&quot;fa fa-paw&quot;</span>&gt;</span><span class="tag">&lt;/<span class="name">i</span>&gt;</span><span class="comment">&lt;!-- 这里的图标可以自己去 fontawesome.com 找，然后自定义 --&gt;</span></span><br><span class="line">      <span class="tag">&lt;<span class="name">span</span>&gt;</span> 感谢阅读 --------<span class="tag">&lt;/<span class="name">span</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">div</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">div</span>&gt;</span></span><br></pre></td></tr></table></figure><p><code>hexo s -g</code> 预览效果没问题，就可以 <code>hexo d</code> 部署到博客了。</p><h2 id="参考链接"><a href="#参考链接" class="headerlink" title="参考链接"></a>参考链接</h2><p><a href="http://yearito.cn/posts/hexo-deploy-to-VPS.html">yearito’s Blog | Hexo搭建个人博客系列：部署上线篇</a></p><p><a href="https://tding.top/archives/4ea54752.html">小丁的个人博客 | Hexo-NexT 博客提交搜索引擎收录</a></p><p><a href="http://yearito.cn/posts/hexo-theme-beautify.html">yearito’s Blog | Hexo搭建个人博客系列：主题美化篇</a></p><p><a href="http://yearito.cn/posts/hexo-advanced-settings.html">yearito’s Blog | Hexo搭建个人博客系列：进阶设置篇</a></p>]]></content>
    
    
    <summary type="html">&lt;p&gt;记录自己博客所做的修改，供他人参考以及自己备忘。&lt;/p&gt;</summary>
    
    
    
    <category term="个人博客" scheme="https://asurada.zone/categories/%E4%B8%AA%E4%BA%BA%E5%8D%9A%E5%AE%A2/"/>
    
    
    <category term="Hexo" scheme="https://asurada.zone/tags/Hexo/"/>
    
  </entry>
  
  <entry>
    <title>RT-Thread RECA学习营（一）——正点原子战舰 V3  RT-Thread BSP 移植</title>
    <link href="https://asurada.zone/post/RT-Thread_BSP/"/>
    <id>https://asurada.zone/post/RT-Thread_BSP/</id>
    <published>2020-05-06T03:11:12.000Z</published>
    <updated>2020-05-06T03:11:12.000Z</updated>
    
    <content type="html"><![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>最近在准备六月份的 RT-Thread 的 <a href="https://www.rt-thread.org/page/rac.html">RECA</a>（RT-Thread开发者能力认证），官方组织了一个学习营，第一周的任务是：</p><blockquote><p>基于 rt-thread4.0.2，能根据BSP制作教程及群里分享的视频《2.RTThread移植》，让自己的板子在RT-Thread上运行起来，了解BSP的制作。</p></blockquote><p>本文并没有将 BSP 移植背后的原理全部弄清楚，只是想着先迈出第一步，不求甚解，先把整个流程给跑通。</p><span id="more"></span><p>我手上的开发板是正点原子的战舰 V3，所以我将基于 RT-Thread 官方的 STM32F1 系列 BSP 通用模板构建战舰 V3 的 BSP。</p><h2 id="下载-RT-Thread-源码"><a href="#下载-RT-Thread-源码" class="headerlink" title="下载 RT-Thread 源码"></a>下载 RT-Thread 源码</h2><p>从<a href="https://www.rt-thread.org/page/download.html">官网</a>下载 RT-Thread 源码，我下载的版本是 V4.0.2。源码目录结构如下：</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/1-RTThread%E6%96%87%E4%BB%B6%E7%9B%AE%E5%BD%95.png" alt="RTThread文件目录"></p><table><thead><tr><th>目录名</th><th>描述</th></tr></thead><tbody><tr><td>rt-thread</td><td>RT-Thread 的源文件。</td></tr><tr><td>- bsp</td><td>RT-Thread 官方已经支持的 BSP。</td></tr><tr><td>- components</td><td>RT-Thread 的各个组件目录。</td></tr><tr><td>- documentation</td><td>RT-Thread 相关文档。</td></tr><tr><td>- examples</td><td>RT-Thread 相关例程。</td></tr><tr><td>- include</td><td>RT-Thread 内核的头文件。</td></tr><tr><td>- libcpu</td><td>各类芯片的移植代码，此处包含了 STM32 的移植文件。</td></tr><tr><td>- src</td><td>RT-Thread 内核的源文件。</td></tr><tr><td>- tools</td><td>RT-Thread 命令构建工具的脚本文件。</td></tr></tbody></table><h2 id="复制通用模板"><a href="#复制通用模板" class="headerlink" title="复制通用模板"></a>复制通用模板</h2><p>制作新 BSP 的第一步是复制一份同系列的 BSP 模板作为基础，通过对 BSP 模板的修改来获得新 BSP。战舰 V3 采用的芯片是 STM32F103ZET6，所以我们需要使用 STM32F1 系列的模板。模板位于<code>rt-thread\bsp\stm32\libraries\templates\stm32f10x</code>，BSP 模板文件夹结构如下所示：</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/5-BSP%E6%A8%A1%E6%9D%BF%E7%9B%AE%E5%BD%95.png" alt="BSP模板目录"></p><p>拷贝模板文件夹下的 <code>stm32f10x</code> 文件夹到<code>rt-thread\bsp\stm32</code>下，并将该文件夹的名称改为 <code>stm32f1-my-diy</code>，之后我们就在这个文件夹的基础上进行移植。</p><p>在接下来的 BSP 的制作过程中，将会修改 board 文件夹内的配置文件，将 F1 系列的 BSP 模板变成一个适用于正点原子战舰 V3 开发板的 BSP ，下表总结了 board 文件夹中需要修改的内容：</p><table><thead><tr><th>项目</th><th>需要修改的内容说明</th></tr></thead><tbody><tr><td>CubeMX_Config （文件夹）</td><td>CubeMX 工程</td></tr><tr><td>linker_scripts （文件夹）</td><td>BSP 特定的链接脚本</td></tr><tr><td>board.c&#x2F;h</td><td>系统时钟、GPIO 初始化函数、芯片存储器大小</td></tr><tr><td>Kconfig</td><td>芯片型号、系列、外设资源</td></tr><tr><td>SConscript</td><td>芯片启动文件、目标芯片型号</td></tr></tbody></table><h2 id="安装-CubeMX"><a href="#安装-CubeMX" class="headerlink" title="安装 CubeMX"></a>安装 CubeMX</h2><h3 id="下载-CubeMX"><a href="#下载-CubeMX" class="headerlink" title="下载 CubeMX"></a>下载 CubeMX</h3><p>CubeMX 是基于 eclipse 的一个插件，用来对STM32产品的配置及初始化代码的生成。下载可以去 <a href="https://stmcu.com.cn/">ST 中国站</a> –&gt; 设计资源 –&gt; 固件和软件 –&gt; PC 端软件 –&gt; <a href="https://stmcu.com.cn/Designresource/design_resource_detail?file_name=STM32CubeMX_STM32%E5%88%9D%E5%A7%8B%E5%8C%96%E4%BB%A3%E7%A0%81%E7%94%9F%E6%88%90%E5%99%A8&lang=EN&ver=5.6.1">STM32CubeMX</a></p><p>我下载的版本是 2020.04.21 更新的 V5.6.1。</p><p>在官网上下载要求先登陆账号，所以没有账号的同学需要先自行注册一个账号，中国站可以直接通过微信注册。</p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/10-CubeMX下载路径图.png" alt="CubeMX下载路径图"  /><h3 id="安装-CubeMX-1"><a href="#安装-CubeMX-1" class="headerlink" title="安装 CubeMX"></a>安装 CubeMX</h3><p>前面已经说了 CubeMX 是基于 eclipse 的，所以它的运行需要依赖 Java 运行环境，后续具体的步骤可以参考<a href="https://www.strongerhuang.com/STM32Cube/STM32CubeMX/STM32CubeMX%E7%B3%BB%E5%88%97%E6%95%99%E7%A8%8B02_STM32CubeMX%E5%B7%A5%E5%85%B7%E3%80%81HAL%E5%BA%93%E4%B8%8B%E8%BD%BD%E3%80%81%E5%AE%89%E8%A3%85%E8%AF%B4%E6%98%8E.html">STM32CubeMX系列教程02_STM32CubeMX工具、HAL库下载、安装说明</a>，写得非常详细。</p><h2 id="使用-CubeMX-配置工程"><a href="#使用-CubeMX-配置工程" class="headerlink" title="使用 CubeMX 配置工程"></a>使用 CubeMX 配置工程</h2><p>模板文件内已经有 CubeMX 工程了，位于<code>stm32f1-my-diy\board\CubeMX_Config</code>下，双击打开 <code>CubeMX_Config.ioc </code>工程。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/6-%E5%8F%8C%E5%87%BB%E6%89%93%E5%BC%80CubeMX%E5%B7%A5%E7%A8%8B.png" alt="双击打开CubeMX工程"></p><h3 id="配置芯片"><a href="#配置芯片" class="headerlink" title="配置芯片"></a>配置芯片</h3><p>我使用的是正点原子战舰 V3 的开发板，使用的 CPU 是 STM32F103ZET6，CubeMX 模板工程使用的并不是这个芯片，所以我需要重新配置芯片为「STM32F103ZETx」。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/11-CubeMX%E9%80%89%E6%8B%A9%E8%8A%AF%E7%89%87.png" alt="CubeMX选择芯片"></p><h3 id="启用系统时钟"><a href="#启用系统时钟" class="headerlink" title="启用系统时钟"></a>启用系统时钟</h3><p>紧接着配置系统时钟，启用高速外部时钟(HSE)和低速外部时钟(LSE)：</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/12-CubeMX%E5%90%AF%E7%94%A8%E7%B3%BB%E7%BB%9F%E6%97%B6%E9%92%9F.png" alt="CubeMX启用系统时钟"></p><h3 id="打开串口外设"><a href="#打开串口外设" class="headerlink" title="打开串口外设"></a>打开串口外设</h3><p>Connectivity –&gt; USART1 –&gt; Mode:Asynchronous，将 USART1 配置为异步模式。</p><p>注意这里只需要选择串口外设引脚即可，无需配置其他参数。这里配置串口是为了后续使用 RT-Thread 的 FinSH 组件。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/14-CubeMXUSART1%E5%BC%95%E8%84%9A%E5%9B%BE.png" alt="CubeMX配置USART1"></p><p>配置完成后，我们可以把右边的芯片图放大，然后就能看到芯片右侧的 PA10、PA9 引脚变成了绿色，后面还跟了当前引脚的功能，其中 PA10 引脚是 UASRT1 的接收引脚，PA9 是 UASRT1 的发送引脚。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/13-CubeMX%E9%85%8D%E7%BD%AEUSART1.png" alt="CubeMXUSART1引脚图"></p><h3 id="设置调试方式"><a href="#设置调试方式" class="headerlink" title="设置调试方式"></a>设置调试方式</h3><p>System Core –&gt; SYS –&gt; Debug:Serial Wire，将调试配置 SWD 模式，这种模式一个最大的优点就是占用的 IO 口较少，我们从右侧的芯片图可以看到 SWD 模式只使用了两个 IO 口 PA13 和 PA14。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/15-CubeMX%E9%85%8D%E7%BD%AE%E8%B0%83%E8%AF%95%E6%A8%A1%E5%BC%8F.png" alt="CubeMX配置调试模式"></p><h3 id="时钟配置"><a href="#时钟配置" class="headerlink" title="时钟配置"></a>时钟配置</h3><p>HSE 是高速外部时钟，可接石英&#x2F;陶瓷谐振器，或者接外部时钟源，频率范围为 4MHz~16MHz。战舰 V3 开发板接的是 8M 的晶振。</p><p>LSE 是低速外部时钟，接频率为 32.768kHz 的石英晶体。 这个主要是 RTC 的时钟源。</p><p>根据正点原子《STMF1  开发指南》，这一步进行的时钟配置为：</p><ul><li>启用 HSE 作为 PLL 时钟源</li><li>设置 PLL 9 倍倍频</li><li>选择系统时钟源为 PLL</li><li>设置 APB1 分频系数为 2</li></ul><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/16-CubeMX%E9%85%8D%E7%BD%AE%E6%97%B6%E9%92%9F.png" alt="CubeMX配置时钟"></p><p>最后总结一下配置过后关键时钟频率值：</p><figure class="highlight abnf"><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">SYSCLK(系统时钟)    <span class="operator">=</span><span class="number">72</span>MHz</span><br><span class="line">PLL 主时钟 <span class="operator">=</span><span class="number">72</span>MHz</span><br><span class="line">AHB 总线时钟（HCLK<span class="operator">=</span>SYSCLK/<span class="number">1</span>）   <span class="operator">=</span><span class="number">72</span>MHz</span><br><span class="line">APB1 总线时钟（PCLK1<span class="operator">=</span>HCLK/<span class="number">2</span>）   <span class="operator">=</span><span class="number">36</span>MHz</span><br><span class="line">APB2 总线时钟（PCLK2<span class="operator">=</span>HCLK/<span class="number">1</span>）   <span class="operator">=</span><span class="number">72</span>MHz</span><br></pre></td></tr></table></figure><h3 id="生成-CubeMX-项目"><a href="#生成-CubeMX-项目" class="headerlink" title="生成 CubeMX 项目"></a>生成 CubeMX 项目</h3><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/17-CubeMX%E7%94%9F%E6%88%90%E4%BB%A3%E7%A0%81.png" alt="CubeMX生成代码"></p><p>最后生成的时候，因为我们复制过来的模板工程里面本来就有 CubeMX 项目，选择直接覆盖即可。</p><h3 id="拷贝时钟初始化函数"><a href="#拷贝时钟初始化函数" class="headerlink" title="拷贝时钟初始化函数"></a>拷贝时钟初始化函数</h3><p>在 <code>board/board.c</code> 文件中存放了函数 <code>SystemClock_Config() </code>，该函数负责初始化系统时钟。当使用 CubeMX 工具对系统时钟重新配置的时候，需要更新这个函数。</p><p>该函数由 CubeMX 工具生成，默认存放在<code>board/CubeMX_Config/Src/main.c</code> 文件中。但是该文件并没有被包含到我们的工程中，因此需要将这个函数从 main.c 中拷贝到 <code>board/board.c</code> 文件中。该函数内容如下：</p><figure class="highlight c"><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"><span class="comment">/**</span></span><br><span class="line"><span class="comment">  * @brief System Clock Configuration</span></span><br><span class="line"><span class="comment">  * @retval None</span></span><br><span class="line"><span class="comment">  */</span></span><br><span class="line"><span class="type">void</span> <span class="title function_">SystemClock_Config</span><span class="params">(<span class="type">void</span>)</span></span><br><span class="line">&#123;</span><br><span class="line">  RCC_OscInitTypeDef RCC_OscInitStruct = &#123;<span class="number">0</span>&#125;;</span><br><span class="line">  RCC_ClkInitTypeDef RCC_ClkInitStruct = &#123;<span class="number">0</span>&#125;;</span><br><span class="line"></span><br><span class="line">  <span class="comment">/** Initializes the CPU, AHB and APB busses clocks </span></span><br><span class="line"><span class="comment">  */</span></span><br><span class="line">  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;<span class="comment">//时钟源为 HSE</span></span><br><span class="line">  RCC_OscInitStruct.HSEState = RCC_HSE_ON;<span class="comment">//打开 HSE</span></span><br><span class="line">  RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;<span class="comment">//HSE 预分频</span></span><br><span class="line">  RCC_OscInitStruct.HSIState = RCC_HSI_ON;<span class="comment">//打开 HSI</span></span><br><span class="line">  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;<span class="comment">//打开 PLL</span></span><br><span class="line">  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;<span class="comment">//PLL 时钟源选择 HSE</span></span><br><span class="line">  RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;<span class="comment">//设置 PLL 倍频系数</span></span><br><span class="line">  <span class="keyword">if</span> (HAL_RCC_OscConfig(&amp;RCC_OscInitStruct) != HAL_OK)</span><br><span class="line">  &#123;</span><br><span class="line">    Error_Handler();</span><br><span class="line">  &#125;</span><br><span class="line">  <span class="comment">/** Initializes the CPU, AHB and APB busses clocks </span></span><br><span class="line"><span class="comment">  */</span></span><br><span class="line">  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK</span><br><span class="line">                              |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;</span><br><span class="line">  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;<span class="comment">//设置系统时钟时钟源为 PLL</span></span><br><span class="line">  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;<span class="comment">//AHB 分频系数为1</span></span><br><span class="line">  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;<span class="comment">//APB1 分频系数为2</span></span><br><span class="line">  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;<span class="comment">//APB2 分频系数为1</span></span><br><span class="line"></span><br><span class="line">  <span class="keyword">if</span> (HAL_RCC_ClockConfig(&amp;RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)</span><br><span class="line">  &#123;</span><br><span class="line">    Error_Handler();</span><br><span class="line">  &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h3 id="修改-board-h"><a href="#修改-board-h" class="headerlink" title="修改 board.h"></a>修改 board.h</h3><p>在 board.h 文件中配置了 FLASH 和 RAM 的相关参数，这个文件中需要修改的是 STM32_FLASH_SIZE 和 STM32_SRAM_SIZE 这两个宏控制的参数。</p><p>战舰 V3 所使用的 STM32F103ZET6 芯片的 FLASH 大小为 512K，RAM 的大小为 64K，因此对该文件作出如下的修改：</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/18-%E4%BF%AE%E6%94%B9board%E5%A4%B4%E6%96%87%E4%BB%B6.png" alt="修改board头文件"></p><h2 id="修改-Kconfig-选项"><a href="#修改-Kconfig-选项" class="headerlink" title="修改 Kconfig 选项"></a>修改 Kconfig 选项</h2><p>在本小节中修改 <code>board/Kconfig</code> 文件的内容有如下两点：</p><ul><li>芯片型号和系列</li><li>BSP 上的外设支持选项</li></ul><p>芯片型号和系列的修改如下表所示：</p><table><thead><tr><th>宏定义</th><th>意义</th><th>格式</th></tr></thead><tbody><tr><td>SOC_STM32F103ZE</td><td>芯片型号</td><td>SOC_STM32xxx</td></tr><tr><td>SOC_SERIES_STM32F1</td><td>芯片系列</td><td>SOC_SERIES_STM32xx</td></tr></tbody></table><p>关于 BSP 上的外设支持选项，一个初次提交的 BSP 仅仅需要支持 GPIO 驱动和串口驱动即可，因此在配置选项中只需保留这两个驱动配置项，如下图所示：</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/2-Kconfig%E9%80%89%E9%A1%B9.png" alt="Kconfig选项"></p><h2 id="修改工程构建相关文件"><a href="#修改工程构建相关文件" class="headerlink" title="修改工程构建相关文件"></a>修改工程构建相关文件</h2><p>接下来需要修改用于构建工程相关的文件。</p><h3 id="修改链接脚本"><a href="#修改链接脚本" class="headerlink" title="修改链接脚本"></a>修改链接脚本</h3><p>linker_scripts 链接文件如下图所示：</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/19-%E9%93%BE%E6%8E%A5%E8%84%9A%E6%9C%AC%E7%9B%AE%E5%BD%95.png" alt="链接脚本目录"></p><p>其中 MDK 使用的链接脚本是 link.sct ，其他两个链接脚本的文件分别为 IAR 使用的 link.icf 和 GCC 编译器使用的 link.lds。我使用的是 MDK，所以修改 link.sct 文件。</p><p>战舰 V3 使用的芯片为 STM32F103ZE，FLASH 为 512K，因此修改 LR_IROM1 和 ER_IROM1 的参数为 0x00080000（512 * 1024）。RAM 的大小为 64K， 因此修改 RW_IRAM1 的参数为 0x00010000（64 * 1024）。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/20-%E4%BF%AE%E6%94%B9%E9%93%BE%E6%8E%A5%E8%84%9A%E6%9C%AC.png" alt="修改链接脚本"></p><h3 id="修改-SConscript-构建脚本"><a href="#修改-SConscript-构建脚本" class="headerlink" title="修改 SConscript  构建脚本"></a>修改 SConscript  构建脚本</h3><p>SConscript 脚本决定 MDK&#x2F;IAR 工程的生成以及编译过程中要添加文件。</p><p>在这一步中需要修改芯片型号以及芯片启动文件的地址，战舰 V3 使用的芯片是 STM32F103ZET6，所以使用的启动文件是 <code>startup_stm32f103xe.s</code>，对应的芯片型号是 STM32F103xE。最后修改内容如下图所示：</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/21-%E4%BF%AE%E6%94%B9SConscript%E6%9E%84%E5%BB%BA%E8%84%9A%E6%9C%AC.png" alt="修改SConscript构建脚本"></p><h3 id="修改-MDK-工程模板"><a href="#修改-MDK-工程模板" class="headerlink" title="修改 MDK 工程模板"></a>修改 MDK 工程模板</h3><p>template 文件是生成 MDK&#x2F;IAR 工程的模板文件，通过修改该文件可以设置工程中使用的芯片型号以及下载方式。MDK4&#x2F;MDK5&#x2F;IAR 的工程模板文件，如下图所示：</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/22-%E5%B7%A5%E7%A8%8B%E6%A8%A1%E6%9D%BF%E7%9B%AE%E5%BD%95.png" alt="工程模板目录"></p><p>我使用的 MDK5，所以我修改的模板是 <code>template.uvprojx</code> 文件。</p><ul><li>战舰 V3 所使用的的芯片型号为 <code>STM32F103ZET6</code>，所以修改芯片型号如下：</li></ul><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/23-MDK5%E6%A8%A1%E6%9D%BF%E5%B7%A5%E7%A8%8B%E4%BF%AE%E6%94%B9%E8%8A%AF%E7%89%87%E5%9E%8B%E5%8F%B7.png" alt="MDK5模板工程修改芯片型号"></p><ul><li>修改程序下载方式：</li></ul><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/24-MDK5%E6%A8%A1%E6%9D%BF%E5%B7%A5%E7%A8%8B%E4%BF%AE%E6%94%B9%E9%BB%98%E8%AE%A4%E4%B8%8B%E8%BD%BD%E6%96%B9%E5%BC%8F.png" alt="MDK5模板工程修改默认下载方式"></p><p>修改完成后<strong>记得 <code>Ctrl+S</code>保存</strong>。</p><h2 id="安装-ENV-工具"><a href="#安装-ENV-工具" class="headerlink" title="安装 ENV 工具"></a>安装 ENV 工具</h2><h3 id="Env-工具简介"><a href="#Env-工具简介" class="headerlink" title="Env 工具简介"></a>Env 工具简介</h3><p>Env 是 RT-Thread 推出的开发辅助工具，针对基于 RT-Thread 操作系统的项目工程，提供编译构建环境、图形化系统配置及软件包管理功能。</p><p>其内置的 menuconfig 提供了简单易用的配置剪裁工具，可对内核、组件和软件包进行自由裁剪，使系统以搭积木的方式进行构建。</p><p>Env 工具包含了 RT-Thread 源代码开发编译环境和软件包管理系统。</p><h3 id="下载安装-Env-工具"><a href="#下载安装-Env-工具" class="headerlink" title="下载安装 Env 工具"></a>下载安装 Env 工具</h3><ul><li><p>从 RT-Thread 官网下载 <a href="https://www.rt-thread.org/page/download.html">Env 工具</a>，将其<strong>解压到任一纯英文路径下</strong>即可使用，在 Env 目录下有一张 <code>Add_Env_To_Right-click_Menu.png</code>(添加 Env 至右键菜单.png) 的图片，按照图片指引一步步操作，就可以在任意文件夹下通过右键菜单来启动 Env 控制台，效果如下：<img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/26-menuconfig%E7%95%8C%E9%9D%A2.png" alt="任意路径右键打开Env"></p></li><li><p>在电脑上装好 git，软件包管理功能需要 git 的支持。git 的下载地址为<a href="https://git-scm.com/downloads%EF%BC%8C%E6%A0%B9%E6%8D%AE%E5%90%91%E5%AF%BC%E6%AD%A3%E7%A1%AE%E5%AE%89%E8%A3%85">https://git-scm.com/downloads，根据向导正确安装</a> git，并将 git 添加到系统环境变量。</p></li><li><p>注意在工作环境中，所有的路径都不可以有中文字符或者空格。</p></li></ul><h2 id="重新生成-MDK-工程"><a href="#重新生成-MDK-工程" class="headerlink" title="重新生成 MDK 工程"></a>重新生成 MDK 工程</h2><h3 id="重新生成-rtconfig-h-文件"><a href="#重新生成-rtconfig-h-文件" class="headerlink" title="重新生成 rtconfig.h 文件"></a>重新生成 rtconfig.h 文件</h3><p>在 env 界面输入命令 <code>menuconfig</code> 对工程进行配置。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/25-%E4%BB%BB%E6%84%8F%E8%B7%AF%E5%BE%84%E5%8F%B3%E9%94%AE%E6%89%93%E5%BC%80Env.png" alt="menuconfig界面"></p><h4 id="menuconfig-快捷键介绍"><a href="#menuconfig-快捷键介绍" class="headerlink" title="menuconfig 快捷键介绍"></a>menuconfig 快捷键介绍</h4><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/27-menuconfig%E5%BF%AB%E6%8D%B7%E9%94%AE%E4%BB%8B%E7%BB%8D.png" alt="menuconfig快捷键介绍"></p><h4 id="修改配置"><a href="#修改配置" class="headerlink" title="修改配置"></a>修改配置</h4><p>menuconfig 有多种类型的配置项，修改方法也有所不同，常见类型如下：</p><ul><li>开&#x2F;关 型：使用空格键来选中或者关闭</li><li>数值、字符串型：按下回车键后会出现对话框，在对话框中对配置项进行修改</li></ul><p>我们目前的目的仅仅是移植 BSP，所以先不进行复杂的配置，只使能 GPIO 和 UART：</p><ul><li>Hardware Drivers Config –&gt; On-chip Peripheral Drivers –&gt; 使能「Enable GPIO」和「Enable UART」</li><li>「Enable UART」 –&gt; 「Enable UART1 RX DMA」</li></ul><h4 id="保存配置"><a href="#保存配置" class="headerlink" title="保存配置"></a>保存配置</h4><p>选择好配置项之后按 ESC 键退出，选择保存修改即可自动更新 rtconfig.h 文件。此时再次使用 scons 命令就会根据新的 rtconfig.h 文件重新编译工程了。</p><h3 id="重新生成-MDK5-工程"><a href="#重新生成-MDK5-工程" class="headerlink" title="重新生成 MDK5 工程"></a>重新生成 MDK5 工程</h3><p>使用 env 工具输入命令 <code>scons --target=mdk5</code> 重新生成工程，如下图所示：</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/28-%E9%87%8D%E6%96%B0%E7%94%9F%E6%88%90MDK5%E5%B7%A5%E7%A8%8B.png" alt="重新生成MDK5工程"></p><p>重新生成工程成功：</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/29-%E9%87%8D%E6%96%B0%E7%94%9F%E6%88%90MDK5%E5%B7%A5%E7%A8%8B%E6%88%90%E5%8A%9F.png" alt="重新生成MDK5工程成功"></p><p> 生成新的 MDK5 工程以后，我们可以看到 <code>project.uvprojx</code> 的修改日期已经变成刚刚进行生成操作时的日期了。</p><h3 id="验证-MDK5-工程"><a href="#验证-MDK5-工程" class="headerlink" title="验证 MDK5 工程"></a>验证 MDK5 工程</h3><p>双击打开 <code>project.uvprojx</code>，检查后发现在我们没有进行设置的情况下，此工程芯片型号、默认下载设置都和我们之前对模板工程的修改保持一致，说明我们之前的修改是生效了的。</p><p>我们通过左边的项目框架里可以看到，相比模板工程的空空如也，新工程已经是五脏俱全了。打开 <code>Applications --&gt; main.c</code>，内容很简单，在 main 主函数内只有一个让 LED0 闪烁的程序，直接编译，没有任何错误和警告。为了方便调试和及时查看运行结果，设置程序下载结束后自动重启并运行：</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/30-MDK5%E4%BF%AE%E6%94%B9%E4%B8%8B%E8%BD%BD%E5%90%8E%E9%87%8D%E5%90%AF.png" alt="MDK5修改下载后重启"></p><p>连上战舰 V3 开发板，直接烧录程序，会发现 LED 并没有亮起来，检查代码后会发现，程序默认定义的 LED0 是引脚 PB.1，通过而查看战舰开发板的原理图，发现战舰开发板的 LED0 连接的是 PB.5 引脚，将引脚进行更改后编译，再烧入程序，LED0 正常闪烁。</p><p><img src="https://blogimage-1256221427.cos.ap-guangzhou.myqcloud.com/31-%E9%AA%8C%E8%AF%81MDK5%E5%B7%A5%E7%A8%8B.png" alt="验证MDK5工程"></p><h2 id="后记"><a href="#后记" class="headerlink" title="后记"></a>后记</h2><p>至此，我们的 BSP 移植就算成功了。但回顾整个移植过程，发现自己不明白的地方还太多了，特别是如何由模板工程直接构建出一个能够直接运行的工程，在没有了解其中原理之前，这个过程对我这个菜鸟而言无异于「魔法」；我开始移植的基础是 RT-Thread 内置的 STM32F1 系列通用模板，这个模板我是拿过来就用的，但这个模板是如何一步步构建起来的，我也完全没有弄清楚；CubeMX 图形化的操作方式固然对新手非常友好，但无疑也让我对底层代码的理解隔了一层「黑盒」。</p><p>第一步已经迈出去了，希望通过后面的学习能够解答我上面诸多疑惑，学习不就正是这样一个发现问题，解决问题的过程。</p><h2 id="参考链接"><a href="#参考链接" class="headerlink" title="参考链接"></a>参考链接</h2><p><a href="https://github.com/RT-Thread/rt-thread/blob/master/bsp/stm32/docs/STM32%E7%B3%BB%E5%88%97BSP%E5%88%B6%E4%BD%9C%E6%95%99%E7%A8%8B.md">RT-Thread 官方 STM32 系列 BSP 制作教程</a></p>]]></content>
    
    
    <summary type="html">&lt;h2 id=&quot;前言&quot;&gt;&lt;a href=&quot;#前言&quot; class=&quot;headerlink&quot; title=&quot;前言&quot;&gt;&lt;/a&gt;前言&lt;/h2&gt;&lt;p&gt;最近在准备六月份的 RT-Thread 的 &lt;a href=&quot;https://www.rt-thread.org/page/rac.html&quot;&gt;RECA&lt;/a&gt;（RT-Thread开发者能力认证），官方组织了一个学习营，第一周的任务是：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;基于 rt-thread4.0.2，能根据BSP制作教程及群里分享的视频《2.RTThread移植》，让自己的板子在RT-Thread上运行起来，了解BSP的制作。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;本文并没有将 BSP 移植背后的原理全部弄清楚，只是想着先迈出第一步，不求甚解，先把整个流程给跑通。&lt;/p&gt;</summary>
    
    
    
    <category term="嵌入式" scheme="https://asurada.zone/categories/%E5%B5%8C%E5%85%A5%E5%BC%8F/"/>
    
    
    <category term="RT-Thread" scheme="https://asurada.zone/tags/RT-Thread/"/>
    
    <category term="STM32" scheme="https://asurada.zone/tags/STM32/"/>
    
  </entry>
  
</feed>
