<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <author>
    <name>Mete0r</name>
  </author>
  <generator uri="https://hexo.io/">Hexo</generator>
  <id>https://www.xscnet.cn/</id>
  <link href="https://www.xscnet.cn/" rel="alternate"/>
  <link href="https://www.xscnet.cn/atom.xml" rel="self"/>
  <rights>All rights reserved 2026, Mete0r</rights>
  <subtitle>今人不见古时月，今月曾经照古人</subtitle>
  <title>-Mete0r's Blog | 壹人小站-</title>
  <updated>2026-04-03T16:05:00.000Z</updated>
  <entry>
    <author>
      <name>Mete0r</name>
    </author>
    <category term="教学" scheme="https://www.xscnet.cn/categories/%E6%95%99%E5%AD%A6/"/>
    <category term="博客" scheme="https://www.xscnet.cn/tags/%E5%8D%9A%E5%AE%A2/"/>
    <category term="教学" scheme="https://www.xscnet.cn/tags/%E6%95%99%E5%AD%A6/"/>
    <category term="服务器" scheme="https://www.xscnet.cn/tags/%E6%9C%8D%E5%8A%A1%E5%99%A8/"/>
    <content>
      <![CDATA[<h2 id="视频教程"><a href="#视频教程" class="headerlink" title="视频教程"></a>视频教程</h2><div class="tag-plugin video-player" style="aspect-ratio:1.7777777777777777;max-width:100%;">    <iframe src="https://player.bilibili.com/player.html?bvid=BV1xkSSBrEtT&autoplay=0" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true">    </iframe>    </div>    <h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p><strong>声明：此教程为新手保姆级教程，可能会有对您无用的废话，请移步至右上角菜单自行跳转需要的部分</strong>  </p><p>写这篇教程的目的也是总结我的踩坑日记，帮助更多的新手朋友能接触到博客的圈子<br><strong>全篇使用到的工具已上传至<a href="https://pan.baidu.com/s/1hGAky9VhVjUGHRQpxP_pUmA?pwd=3z8c">百度网盘 | 提取码: 3z8c</a> <a href="https://pan.quark.cn/s/ac6b0a3429c2">夸克网盘</a> <a href="https://wwbjo.lanzouv.com/b0syl81ud">蓝奏云 | 密码:3ald</a></strong>  </p><blockquote><p>①* 本文默认本地开发环境为<code>Windows10/11 x64</code><br>②* 本文视频教程使用系统为<code>Windows10 x64</code><br>③* 本文默认服务器部署环境为<code>Ubuntu22.04 LTS</code><br>④* 大部分下载失败都是网络问题，需自行寻找解决方案  </p></blockquote><h2 id="Hexo框架-①"><a href="#Hexo框架-①" class="headerlink" title="Hexo框架 *①"></a>Hexo框架 *①</h2><h3 id="01-安装核心工具NodeJS和Git"><a href="#01-安装核心工具NodeJS和Git" class="headerlink" title="01.安装核心工具NodeJS和Git"></a>01.安装核心工具NodeJS和Git</h3><h4 id="操作步骤"><a href="#操作步骤" class="headerlink" title="操作步骤"></a>操作步骤</h4><h5 id="1-1-安装-Node-js"><a href="#1-1-安装-Node-js" class="headerlink" title="1.1 .安装 Node.js"></a>1.1 .安装 Node.js</h5><ul><li>官网：<a href="https://nodejs.org/zh-cn/download">Download | Node.js</a>  </li><li>版本建议: Hexo 要求 NodeJS 版本<strong>不低于</strong> <code>10.13</code>，建议使用 12.0 及以上版本的 LTS 版  </li><li>安装注意: 安装程序时，请确保勾选 <code>Add to PATH</code> 选项，这会让系统能随时在命令行中找到NodeJS</li></ul><h5 id="1-2-安装-Git"><a href="#1-2-安装-Git" class="headerlink" title="1.2 .安装 Git"></a>1.2 .安装 Git</h5><ul><li>官网：<a href="https://git-scm.com/install/windows">Downloads | Git</a>  </li><li>下载注意: 请根据您的CPU架构选择版本，大部分人选择<code>Git for Windows/x64 Setup</code> 即可</li></ul><h5 id="1-3-检查安装状态"><a href="#1-3-检查安装状态" class="headerlink" title="1.3. 检查安装状态"></a>1.3. 检查安装状态</h5><p>随意位置打开CMD，依次运行命令：  </p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">node -v</span><br><span class="line">npm -v</span><br><span class="line">git -v</span><br></pre></td></tr></table></figure><p>若看到返回版本信息，证明安装成功<br>如下图：<br><img src="https://img.xscnet.cn//i/2026/04/03/69cfc5d39a6d2.png" alt="版本检查">   </p><h3 id="02-安装Hexo博客框架"><a href="#02-安装Hexo博客框架" class="headerlink" title="02.安装Hexo博客框架"></a>02.安装Hexo博客框架</h3><h4 id="2-1-安装Hexo"><a href="#2-1-安装Hexo" class="headerlink" title="2.1. 安装Hexo"></a>2.1. 安装Hexo</h4><p>运行如下命令：  </p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm install hexo-cli -g</span><br></pre></td></tr></table></figure><p><img src="https://img.xscnet.cn//i/2026/04/03/69cfc67f97002.webp" alt="hexo install hexo-cli"></p><h4 id="2-2-创建博客本地开发环境文件夹"><a href="#2-2-创建博客本地开发环境文件夹" class="headerlink" title="2.2. 创建博客本地开发环境文件夹"></a>2.2. 创建博客本地开发环境文件夹</h4><p><strong>注意：这个文件夹内的文件不要放在公开类型的仓库中，若您配置了需要Token的项目，会有Token泄露风险</strong>  </p><p>在你需要的位置创建一个文件夹<code>(名称不要有中文)</code>例如.&#x2F;HexoBlog<br>在地址栏双击运行<code>cmd</code><br>运行如下命令：  </p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">hexo init</span><br></pre></td></tr></table></figure><blockquote><p>提示：若出现‘command not found’，就在前面加上npx，如：npx hexo init<br>此步是从Github下载资源 *④</p></blockquote><p>完成则如下图所示：<br><img src="https://img.xscnet.cn//i/2026/04/03/69cfc817049dd.webp" alt="hexo init">  </p><p>继续输入：  </p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm install</span><br></pre></td></tr></table></figure><p><img src="https://img.xscnet.cn//i/2026/04/03/69cfc9031ea66.png" alt="npm install"><br>这个时候你的博客就已经下载完成了，只不过刚开始还是默认主题，并且尚且没有配置任何个性化的项目<br>你可以用<code>hexo server</code>命令启动博客，访问<code>http://localhost:4000</code>即可看到博客(Ctrl+C结束程序)<br><img src="https://img.xscnet.cn//i/2026/04/03/69cfc95aef98a.webp" alt="hexo server">  </p><h4 id="2-3-下载你喜欢的博客主题"><a href="#2-3-下载你喜欢的博客主题" class="headerlink" title="2.3. 下载你喜欢的博客主题"></a>2.3. 下载你喜欢的博客主题</h4><blockquote><p>这里以我自己用的<a href="https://github.com/xaoxuu/hexo-theme-stellar">Hexo - Stellar主题</a>为例  </p></blockquote><h3 id="03-安装主题并修改配置文件"><a href="#03-安装主题并修改配置文件" class="headerlink" title="03. 安装主题并修改配置文件"></a>03. 安装主题并修改配置文件</h3><h4 id="3-1-安装主题"><a href="#3-1-安装主题" class="headerlink" title="3.1. 安装主题"></a>3.1. 安装主题</h4><p>在地址栏双击运行<code>cmd</code><br>输入命令：  </p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm i hexo-theme-stellar --save</span><br></pre></td></tr></table></figure><blockquote><p>从 Hexo 7.x 版本开始，通过 npm install 安装的主题会存放在 node_modules 目录下，而不再是 themes 文件夹  </p></blockquote><h4 id="3-2-修改配置文件"><a href="#3-2-修改配置文件" class="headerlink" title="3.2. 修改配置文件"></a>3.2. 修改配置文件</h4><h5 id="3-2-1-下载VSCode-The-open-source-AI-code-edito"><a href="#3-2-1-下载VSCode-The-open-source-AI-code-edito" class="headerlink" title="3.2.1. 下载VSCode | The open source AI code edito"></a>3.2.1. 下载<a href="https://code.visualstudio.com/">VSCode | The open source AI code edito</a></h5><ul><li>官网：<a href="https://code.visualstudio.com/Download">Download | VSCode</a>  </li><li>安装：全部无脑下一步即可，建议选择SSD硬盘安装，以加速启动速度  </li><li>插件推荐：Bracket Pair Color DLW &#x2F; indent-rainbow &#x2F; Markdown Preview Enhanced &#x2F; Dracula Theme Official</li></ul><h5 id="3-2-2-更改VSCode语言为简体中文"><a href="#3-2-2-更改VSCode语言为简体中文" class="headerlink" title="3.2.2. 更改VSCode语言为简体中文"></a>3.2.2. 更改VSCode语言为<code>简体中文</code></h5><ol><li>点击左侧插件库图标  </li><li>搜索<code>Chinese</code>  </li><li>安装<code>Chinese (Simplified) 简体中文</code>  </li><li>重启VSCode<br><img src="https://img.xscnet.cn//i/2026/04/03/69cfcc546853e.webp" alt="VSCode"></li></ol><h5 id="3-2-3-修改Hexo配置文件"><a href="#3-2-3-修改Hexo配置文件" class="headerlink" title="3.2.3. 修改Hexo配置文件"></a>3.2.3. 修改Hexo配置文件</h5><p>使用VSCode打开博客项目文件夹<br>选中<code>_config.yml</code>文件  </p><p>可以直接粘贴替换为以下代码：  </p><details class="tag-plugin colorful folding" color="dark" child="codeblock" open><summary><p>_config.yml</p></summary><div class="body"><figure class="highlight yml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># Hexo Configuration</span></span><br><span class="line"><span class="comment">## Docs: https://hexo.io/docs/configuration.html</span></span><br><span class="line"><span class="comment">## Source: https://github.com/hexojs/hexo/</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Mete0r注释版本，Site部分并未修改原始内容，请自行更改，仅更改了Theme项目为Stellar，博客文章: https://www.xscnet.cn/posts/p3520260403/</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Site</span></span><br><span class="line"><span class="attr">title:</span>  <span class="comment">#你的博客标题</span></span><br><span class="line"><span class="attr">subtitle:</span> <span class="string">&#x27;&#x27;</span> <span class="comment">#你的博客副标题</span></span><br><span class="line"><span class="attr">description:</span> <span class="string">&#x27;&#x27;</span> <span class="comment">#你的博客简介</span></span><br><span class="line"><span class="attr">favicon:</span> <span class="string">&quot;&quot;</span> <span class="comment">#网站ICON</span></span><br><span class="line"><span class="attr">avatar:</span> <span class="string">&quot;&quot;</span> <span class="comment">#你的头像</span></span><br><span class="line"><span class="attr">keywords:</span> <span class="comment">#关键词</span></span><br><span class="line"><span class="attr">author:</span> <span class="string">John</span> <span class="string">Doe</span> <span class="comment">#作者</span></span><br><span class="line"><span class="attr">language:</span> <span class="string">en</span> <span class="comment">#语言，国人可以填写zh-CN</span></span><br><span class="line"><span class="attr">timezone:</span> <span class="string">&#x27;&#x27;</span> <span class="comment">#时区，国人可以填写Asia/Shanghai</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># URL</span></span><br><span class="line"><span class="comment">## Set your site url here. For example, if you use GitHub Page, set url as &#x27;https://username.github.io/project&#x27;</span></span><br><span class="line"><span class="attr">url:</span> <span class="string">http://example.com</span> <span class="comment">#你的站点URL</span></span><br><span class="line"><span class="attr">permalink:</span> <span class="string">:year/:month/:day/:title/</span> <span class="comment">#文章链接格式，Mete0r使用的是: posts/:title/</span></span><br><span class="line"><span class="attr">permalink_defaults:</span> <span class="comment">#从这往下到第100行可以不用更改，如您需要自定义，可以咨询AI  </span></span><br><span class="line"><span class="attr">pretty_urls:</span></span><br><span class="line">  <span class="attr">trailing_index:</span> <span class="literal">true</span> <span class="comment"># Set to false to remove trailing &#x27;index.html&#x27; from permalinks</span></span><br><span class="line">  <span class="attr">trailing_html:</span> <span class="literal">true</span> <span class="comment"># Set to false to remove trailing &#x27;.html&#x27; from permalinks</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Directory</span></span><br><span class="line"><span class="attr">source_dir:</span> <span class="string">source</span></span><br><span class="line"><span class="attr">public_dir:</span> <span class="string">public</span></span><br><span class="line"><span class="attr">tag_dir:</span> <span class="string">tags</span></span><br><span class="line"><span class="attr">archive_dir:</span> <span class="string">archives</span></span><br><span class="line"><span class="attr">category_dir:</span> <span class="string">categories</span></span><br><span class="line"><span class="attr">code_dir:</span> <span class="string">downloads/code</span></span><br><span class="line"><span class="attr">i18n_dir:</span> <span class="string">:lang</span></span><br><span class="line"><span class="attr">skip_render:</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Writing</span></span><br><span class="line"><span class="attr">new_post_name:</span> <span class="string">:title.md</span> <span class="comment"># File name of new posts</span></span><br><span class="line"><span class="attr">default_layout:</span> <span class="string">post</span></span><br><span class="line"><span class="attr">titlecase:</span> <span class="literal">false</span> <span class="comment"># Transform title into titlecase</span></span><br><span class="line"><span class="attr">external_link:</span></span><br><span class="line">  <span class="attr">enable:</span> <span class="literal">true</span> <span class="comment"># Open external links in new tab</span></span><br><span class="line">  <span class="attr">field:</span> <span class="string">site</span> <span class="comment"># Apply to the whole site</span></span><br><span class="line">  <span class="attr">exclude:</span> <span class="string">&#x27;&#x27;</span></span><br><span class="line"><span class="attr">filename_case:</span> <span class="number">0</span></span><br><span class="line"><span class="attr">render_drafts:</span> <span class="literal">false</span></span><br><span class="line"><span class="attr">post_asset_folder:</span> <span class="literal">false</span></span><br><span class="line"><span class="attr">relative_link:</span> <span class="literal">false</span></span><br><span class="line"><span class="attr">future:</span> <span class="literal">true</span></span><br><span class="line"><span class="attr">syntax_highlighter:</span> <span class="string">highlight.js</span></span><br><span class="line"><span class="attr">highlight:</span></span><br><span class="line">  <span class="attr">line_number:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">auto_detect:</span> <span class="literal">false</span></span><br><span class="line">  <span class="attr">tab_replace:</span> <span class="string">&#x27;&#x27;</span></span><br><span class="line">  <span class="attr">wrap:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">hljs:</span> <span class="literal">false</span></span><br><span class="line"><span class="attr">prismjs:</span></span><br><span class="line">  <span class="attr">preprocess:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">line_number:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">tab_replace:</span> <span class="string">&#x27;&#x27;</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Home page setting</span></span><br><span class="line"><span class="comment"># path: Root path for your blogs index page. (default = &#x27;&#x27;)</span></span><br><span class="line"><span class="comment"># per_page: Posts displayed per page. (0 = disable pagination)</span></span><br><span class="line"><span class="comment"># order_by: Posts order. (Order by date descending by default)</span></span><br><span class="line"><span class="attr">index_generator:</span></span><br><span class="line">  <span class="attr">path:</span> <span class="string">&#x27;&#x27;</span></span><br><span class="line">  <span class="attr">per_page:</span> <span class="number">10</span></span><br><span class="line">  <span class="attr">order_by:</span> <span class="string">-date</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Category &amp; Tag</span></span><br><span class="line"><span class="attr">default_category:</span> <span class="string">uncategorized</span></span><br><span class="line"><span class="attr">category_map:</span></span><br><span class="line"><span class="attr">tag_map:</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Metadata elements</span></span><br><span class="line"><span class="comment">## https://developer.mozilla.org/en-US/docs/Web/HTML/Element/meta</span></span><br><span class="line"><span class="attr">meta_generator:</span> <span class="literal">true</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Date / Time format</span></span><br><span class="line"><span class="comment">## Hexo uses Moment.js to parse and display date</span></span><br><span class="line"><span class="comment">## You can customize the date format as defined in</span></span><br><span class="line"><span class="comment">## http://momentjs.com/docs/#/displaying/format/</span></span><br><span class="line"><span class="attr">date_format:</span> <span class="string">YYYY-MM-DD</span></span><br><span class="line"><span class="attr">time_format:</span> <span class="string">HH:mm:ss</span></span><br><span class="line"><span class="comment">## updated_option supports &#x27;mtime&#x27;, &#x27;date&#x27;, &#x27;empty&#x27;</span></span><br><span class="line"><span class="attr">updated_option:</span> <span class="string">&#x27;mtime&#x27;</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Pagination</span></span><br><span class="line"><span class="comment">## Set per_page to 0 to disable pagination</span></span><br><span class="line"><span class="attr">per_page:</span> <span class="number">10</span></span><br><span class="line"><span class="attr">pagination_dir:</span> <span class="string">page</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Include / Exclude file(s)</span></span><br><span class="line"><span class="comment">## include:/exclude: options only apply to the &#x27;source/&#x27; folder</span></span><br><span class="line"><span class="attr">include:</span></span><br><span class="line"><span class="attr">exclude:</span></span><br><span class="line"><span class="attr">ignore:</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Extensions</span></span><br><span class="line"><span class="comment">## Plugins: https://hexo.io/plugins/</span></span><br><span class="line"><span class="comment">## Themes: https://hexo.io/themes/</span></span><br><span class="line"><span class="attr">theme:</span> <span class="string">stellar</span> <span class="comment">#从这里开始改动，设置你的主题  </span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Deployment</span></span><br><span class="line"><span class="comment">## Docs: https://hexo.io/docs/one-command-deployment</span></span><br><span class="line"><span class="attr">deploy:</span></span><br><span class="line">  <span class="attr">type:</span> <span class="string">&#x27;&#x27;</span></span><br></pre></td></tr></table></figure></div></details><h5 id="3-2-4-配置主题"><a href="#3-2-4-配置主题" class="headerlink" title="3.2.4. 配置主题"></a>3.2.4. 配置主题</h5><ol><li>在博客项目文件夹中运行以下命令以创建主题的默认配置文件：</li></ol><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">copy .\node_modules\hexo-theme-stellar\_config.yml .\_config.stellar.yml</span><br></pre></td></tr></table></figure><ol start="2"><li>配置主题配置文件<code>.\_config.stellar.yml</code><br><strong>此项目由于自定义程度过高，不予详细介绍，请自行根据注释修改，如有任何问题，欢迎在评论区进行提问</strong></li></ol><details class="tag-plugin colorful folding" color="dark" child="codeblock" open><summary><p>_config.stellar.yml</p></summary><div class="body"><figure class="highlight yml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br><span class="line">128</span><br><span class="line">129</span><br><span class="line">130</span><br><span class="line">131</span><br><span class="line">132</span><br><span class="line">133</span><br><span class="line">134</span><br><span class="line">135</span><br><span class="line">136</span><br><span class="line">137</span><br><span class="line">138</span><br><span class="line">139</span><br><span class="line">140</span><br><span class="line">141</span><br><span class="line">142</span><br><span class="line">143</span><br><span class="line">144</span><br><span class="line">145</span><br><span class="line">146</span><br><span class="line">147</span><br><span class="line">148</span><br><span class="line">149</span><br><span class="line">150</span><br><span class="line">151</span><br><span class="line">152</span><br><span class="line">153</span><br><span class="line">154</span><br><span class="line">155</span><br><span class="line">156</span><br><span class="line">157</span><br><span class="line">158</span><br><span class="line">159</span><br><span class="line">160</span><br><span class="line">161</span><br><span class="line">162</span><br><span class="line">163</span><br><span class="line">164</span><br><span class="line">165</span><br><span class="line">166</span><br><span class="line">167</span><br><span class="line">168</span><br><span class="line">169</span><br><span class="line">170</span><br><span class="line">171</span><br><span class="line">172</span><br><span class="line">173</span><br><span class="line">174</span><br><span class="line">175</span><br><span class="line">176</span><br><span class="line">177</span><br><span class="line">178</span><br><span class="line">179</span><br><span class="line">180</span><br><span class="line">181</span><br><span class="line">182</span><br><span class="line">183</span><br><span class="line">184</span><br><span class="line">185</span><br><span class="line">186</span><br><span class="line">187</span><br><span class="line">188</span><br><span class="line">189</span><br><span class="line">190</span><br><span class="line">191</span><br><span class="line">192</span><br><span class="line">193</span><br><span class="line">194</span><br><span class="line">195</span><br><span class="line">196</span><br><span class="line">197</span><br><span class="line">198</span><br><span class="line">199</span><br><span class="line">200</span><br><span class="line">201</span><br><span class="line">202</span><br><span class="line">203</span><br><span class="line">204</span><br><span class="line">205</span><br><span class="line">206</span><br><span class="line">207</span><br><span class="line">208</span><br><span class="line">209</span><br><span class="line">210</span><br><span class="line">211</span><br><span class="line">212</span><br><span class="line">213</span><br><span class="line">214</span><br><span class="line">215</span><br><span class="line">216</span><br><span class="line">217</span><br><span class="line">218</span><br><span class="line">219</span><br><span class="line">220</span><br><span class="line">221</span><br><span class="line">222</span><br><span class="line">223</span><br><span class="line">224</span><br><span class="line">225</span><br><span class="line">226</span><br><span class="line">227</span><br><span class="line">228</span><br><span class="line">229</span><br><span class="line">230</span><br><span class="line">231</span><br><span class="line">232</span><br><span class="line">233</span><br><span class="line">234</span><br><span class="line">235</span><br><span class="line">236</span><br><span class="line">237</span><br><span class="line">238</span><br><span class="line">239</span><br><span class="line">240</span><br><span class="line">241</span><br><span class="line">242</span><br><span class="line">243</span><br><span class="line">244</span><br><span class="line">245</span><br><span class="line">246</span><br><span class="line">247</span><br><span class="line">248</span><br><span class="line">249</span><br><span class="line">250</span><br><span class="line">251</span><br><span class="line">252</span><br><span class="line">253</span><br><span class="line">254</span><br><span class="line">255</span><br><span class="line">256</span><br><span class="line">257</span><br><span class="line">258</span><br><span class="line">259</span><br><span class="line">260</span><br><span class="line">261</span><br><span class="line">262</span><br><span class="line">263</span><br><span class="line">264</span><br><span class="line">265</span><br><span class="line">266</span><br><span class="line">267</span><br><span class="line">268</span><br><span class="line">269</span><br><span class="line">270</span><br><span class="line">271</span><br><span class="line">272</span><br><span class="line">273</span><br><span class="line">274</span><br><span class="line">275</span><br><span class="line">276</span><br><span class="line">277</span><br><span class="line">278</span><br><span class="line">279</span><br><span class="line">280</span><br><span class="line">281</span><br><span class="line">282</span><br><span class="line">283</span><br><span class="line">284</span><br><span class="line">285</span><br><span class="line">286</span><br><span class="line">287</span><br><span class="line">288</span><br><span class="line">289</span><br><span class="line">290</span><br><span class="line">291</span><br><span class="line">292</span><br><span class="line">293</span><br><span class="line">294</span><br><span class="line">295</span><br><span class="line">296</span><br><span class="line">297</span><br><span class="line">298</span><br><span class="line">299</span><br><span class="line">300</span><br><span class="line">301</span><br><span class="line">302</span><br><span class="line">303</span><br><span class="line">304</span><br><span class="line">305</span><br><span class="line">306</span><br><span class="line">307</span><br><span class="line">308</span><br><span class="line">309</span><br><span class="line">310</span><br><span class="line">311</span><br><span class="line">312</span><br><span class="line">313</span><br><span class="line">314</span><br><span class="line">315</span><br><span class="line">316</span><br><span class="line">317</span><br><span class="line">318</span><br><span class="line">319</span><br><span class="line">320</span><br><span class="line">321</span><br><span class="line">322</span><br><span class="line">323</span><br><span class="line">324</span><br><span class="line">325</span><br><span class="line">326</span><br><span class="line">327</span><br><span class="line">328</span><br><span class="line">329</span><br><span class="line">330</span><br><span class="line">331</span><br><span class="line">332</span><br><span class="line">333</span><br><span class="line">334</span><br><span class="line">335</span><br><span class="line">336</span><br><span class="line">337</span><br><span class="line">338</span><br><span class="line">339</span><br><span class="line">340</span><br><span class="line">341</span><br><span class="line">342</span><br><span class="line">343</span><br><span class="line">344</span><br><span class="line">345</span><br><span class="line">346</span><br><span class="line">347</span><br><span class="line">348</span><br><span class="line">349</span><br><span class="line">350</span><br><span class="line">351</span><br><span class="line">352</span><br><span class="line">353</span><br><span class="line">354</span><br><span class="line">355</span><br><span class="line">356</span><br><span class="line">357</span><br><span class="line">358</span><br><span class="line">359</span><br><span class="line">360</span><br><span class="line">361</span><br><span class="line">362</span><br><span class="line">363</span><br><span class="line">364</span><br><span class="line">365</span><br><span class="line">366</span><br><span class="line">367</span><br><span class="line">368</span><br><span class="line">369</span><br><span class="line">370</span><br><span class="line">371</span><br><span class="line">372</span><br><span class="line">373</span><br><span class="line">374</span><br><span class="line">375</span><br><span class="line">376</span><br><span class="line">377</span><br><span class="line">378</span><br><span class="line">379</span><br><span class="line">380</span><br><span class="line">381</span><br><span class="line">382</span><br><span class="line">383</span><br><span class="line">384</span><br><span class="line">385</span><br><span class="line">386</span><br><span class="line">387</span><br><span class="line">388</span><br><span class="line">389</span><br><span class="line">390</span><br><span class="line">391</span><br><span class="line">392</span><br><span class="line">393</span><br><span class="line">394</span><br><span class="line">395</span><br><span class="line">396</span><br><span class="line">397</span><br><span class="line">398</span><br><span class="line">399</span><br><span class="line">400</span><br><span class="line">401</span><br><span class="line">402</span><br><span class="line">403</span><br><span class="line">404</span><br><span class="line">405</span><br><span class="line">406</span><br><span class="line">407</span><br><span class="line">408</span><br><span class="line">409</span><br><span class="line">410</span><br><span class="line">411</span><br><span class="line">412</span><br><span class="line">413</span><br><span class="line">414</span><br><span class="line">415</span><br><span class="line">416</span><br><span class="line">417</span><br><span class="line">418</span><br><span class="line">419</span><br><span class="line">420</span><br><span class="line">421</span><br><span class="line">422</span><br><span class="line">423</span><br><span class="line">424</span><br><span class="line">425</span><br><span class="line">426</span><br><span class="line">427</span><br><span class="line">428</span><br><span class="line">429</span><br><span class="line">430</span><br><span class="line">431</span><br><span class="line">432</span><br><span class="line">433</span><br><span class="line">434</span><br><span class="line">435</span><br><span class="line">436</span><br><span class="line">437</span><br><span class="line">438</span><br><span class="line">439</span><br><span class="line">440</span><br><span class="line">441</span><br><span class="line">442</span><br><span class="line">443</span><br><span class="line">444</span><br><span class="line">445</span><br><span class="line">446</span><br><span class="line">447</span><br><span class="line">448</span><br><span class="line">449</span><br><span class="line">450</span><br><span class="line">451</span><br><span class="line">452</span><br><span class="line">453</span><br><span class="line">454</span><br><span class="line">455</span><br><span class="line">456</span><br><span class="line">457</span><br><span class="line">458</span><br><span class="line">459</span><br><span class="line">460</span><br><span class="line">461</span><br><span class="line">462</span><br><span class="line">463</span><br><span class="line">464</span><br><span class="line">465</span><br><span class="line">466</span><br><span class="line">467</span><br><span class="line">468</span><br><span class="line">469</span><br><span class="line">470</span><br><span class="line">471</span><br><span class="line">472</span><br><span class="line">473</span><br><span class="line">474</span><br><span class="line">475</span><br><span class="line">476</span><br><span class="line">477</span><br><span class="line">478</span><br><span class="line">479</span><br><span class="line">480</span><br><span class="line">481</span><br><span class="line">482</span><br><span class="line">483</span><br><span class="line">484</span><br><span class="line">485</span><br><span class="line">486</span><br><span class="line">487</span><br><span class="line">488</span><br><span class="line">489</span><br><span class="line">490</span><br><span class="line">491</span><br><span class="line">492</span><br><span class="line">493</span><br><span class="line">494</span><br><span class="line">495</span><br><span class="line">496</span><br><span class="line">497</span><br><span class="line">498</span><br><span class="line">499</span><br><span class="line">500</span><br><span class="line">501</span><br><span class="line">502</span><br><span class="line">503</span><br><span class="line">504</span><br><span class="line">505</span><br><span class="line">506</span><br><span class="line">507</span><br><span class="line">508</span><br><span class="line">509</span><br><span class="line">510</span><br><span class="line">511</span><br><span class="line">512</span><br><span class="line">513</span><br><span class="line">514</span><br><span class="line">515</span><br><span class="line">516</span><br><span class="line">517</span><br><span class="line">518</span><br><span class="line">519</span><br><span class="line">520</span><br><span class="line">521</span><br><span class="line">522</span><br><span class="line">523</span><br><span class="line">524</span><br><span class="line">525</span><br><span class="line">526</span><br><span class="line">527</span><br><span class="line">528</span><br><span class="line">529</span><br><span class="line">530</span><br><span class="line">531</span><br><span class="line">532</span><br><span class="line">533</span><br><span class="line">534</span><br><span class="line">535</span><br><span class="line">536</span><br><span class="line">537</span><br><span class="line">538</span><br><span class="line">539</span><br><span class="line">540</span><br><span class="line">541</span><br><span class="line">542</span><br><span class="line">543</span><br><span class="line">544</span><br><span class="line">545</span><br><span class="line">546</span><br><span class="line">547</span><br><span class="line">548</span><br><span class="line">549</span><br><span class="line">550</span><br><span class="line">551</span><br><span class="line">552</span><br><span class="line">553</span><br><span class="line">554</span><br><span class="line">555</span><br><span class="line">556</span><br><span class="line">557</span><br><span class="line">558</span><br><span class="line">559</span><br><span class="line">560</span><br><span class="line">561</span><br><span class="line">562</span><br><span class="line">563</span><br><span class="line">564</span><br><span class="line">565</span><br><span class="line">566</span><br><span class="line">567</span><br><span class="line">568</span><br><span class="line">569</span><br><span class="line">570</span><br><span class="line">571</span><br><span class="line">572</span><br><span class="line">573</span><br><span class="line">574</span><br><span class="line">575</span><br><span class="line">576</span><br><span class="line">577</span><br><span class="line">578</span><br><span class="line">579</span><br><span class="line">580</span><br><span class="line">581</span><br><span class="line">582</span><br><span class="line">583</span><br><span class="line">584</span><br><span class="line">585</span><br><span class="line">586</span><br><span class="line">587</span><br><span class="line">588</span><br><span class="line">589</span><br><span class="line">590</span><br><span class="line">591</span><br><span class="line">592</span><br><span class="line">593</span><br><span class="line">594</span><br><span class="line">595</span><br><span class="line">596</span><br><span class="line">597</span><br><span class="line">598</span><br><span class="line">599</span><br><span class="line">600</span><br><span class="line">601</span><br><span class="line">602</span><br><span class="line">603</span><br><span class="line">604</span><br><span class="line">605</span><br><span class="line">606</span><br><span class="line">607</span><br><span class="line">608</span><br><span class="line">609</span><br><span class="line">610</span><br><span class="line">611</span><br><span class="line">612</span><br><span class="line">613</span><br><span class="line">614</span><br><span class="line">615</span><br><span class="line">616</span><br><span class="line">617</span><br><span class="line">618</span><br><span class="line">619</span><br><span class="line">620</span><br><span class="line">621</span><br><span class="line">622</span><br><span class="line">623</span><br><span class="line">624</span><br><span class="line">625</span><br><span class="line">626</span><br><span class="line">627</span><br><span class="line">628</span><br><span class="line">629</span><br><span class="line">630</span><br><span class="line">631</span><br><span class="line">632</span><br><span class="line">633</span><br><span class="line">634</span><br><span class="line">635</span><br><span class="line">636</span><br><span class="line">637</span><br><span class="line">638</span><br><span class="line">639</span><br><span class="line">640</span><br><span class="line">641</span><br><span class="line">642</span><br><span class="line">643</span><br><span class="line">644</span><br><span class="line">645</span><br><span class="line">646</span><br><span class="line">647</span><br><span class="line">648</span><br><span class="line">649</span><br><span class="line">650</span><br><span class="line">651</span><br><span class="line">652</span><br><span class="line">653</span><br><span class="line">654</span><br><span class="line">655</span><br><span class="line">656</span><br><span class="line">657</span><br><span class="line">658</span><br><span class="line">659</span><br><span class="line">660</span><br><span class="line">661</span><br><span class="line">662</span><br><span class="line">663</span><br><span class="line">664</span><br><span class="line">665</span><br><span class="line">666</span><br><span class="line">667</span><br><span class="line">668</span><br><span class="line">669</span><br><span class="line">670</span><br><span class="line">671</span><br><span class="line">672</span><br><span class="line">673</span><br><span class="line">674</span><br><span class="line">675</span><br><span class="line">676</span><br><span class="line">677</span><br><span class="line">678</span><br><span class="line">679</span><br><span class="line">680</span><br><span class="line">681</span><br><span class="line">682</span><br><span class="line">683</span><br><span class="line">684</span><br><span class="line">685</span><br><span class="line">686</span><br><span class="line">687</span><br><span class="line">688</span><br><span class="line">689</span><br><span class="line">690</span><br><span class="line">691</span><br><span class="line">692</span><br><span class="line">693</span><br><span class="line">694</span><br><span class="line">695</span><br><span class="line">696</span><br><span class="line">697</span><br><span class="line">698</span><br><span class="line">699</span><br><span class="line">700</span><br><span class="line">701</span><br><span class="line">702</span><br><span class="line">703</span><br><span class="line">704</span><br><span class="line">705</span><br><span class="line">706</span><br><span class="line">707</span><br><span class="line">708</span><br><span class="line">709</span><br><span class="line">710</span><br><span class="line">711</span><br><span class="line">712</span><br><span class="line">713</span><br><span class="line">714</span><br><span class="line">715</span><br><span class="line">716</span><br><span class="line">717</span><br><span class="line">718</span><br><span class="line">719</span><br><span class="line">720</span><br><span class="line">721</span><br><span class="line">722</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">######## Stellar info ########</span></span><br><span class="line"><span class="attr">stellar:</span></span><br><span class="line">  <span class="attr">version:</span> <span class="string">&#x27;1.33.1&#x27;</span></span><br><span class="line">  <span class="attr">homepage:</span> <span class="string">&#x27;https://xaoxuu.com/wiki/stellar/&#x27;</span></span><br><span class="line">  <span class="attr">repo:</span> <span class="string">&#x27;https://github.com/xaoxuu/hexo-theme-stellar&#x27;</span></span><br><span class="line">  <span class="attr">main_css:</span> <span class="string">/css/main.css</span></span><br><span class="line">  <span class="attr">main_js:</span> <span class="string">/js/main.js</span></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="comment">######## head tags ########</span></span><br><span class="line"><span class="attr">preconnect:</span></span><br><span class="line">  <span class="comment"># - https://gcore.jsdelivr.net</span></span><br><span class="line">  <span class="comment"># - https://gcore.jsdelivr.net</span></span><br><span class="line">  <span class="comment"># - https://unpkg.com</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 一旦设置源站地址，非源站地址将不会被SEO收录，并且访问时弹出提示</span></span><br><span class="line"><span class="comment"># 如果访问地址不在备用站主机列表，则警告信息为非法克隆</span></span><br><span class="line"><span class="attr">canonical:</span></span><br><span class="line">  <span class="attr">originalHost:</span> <span class="comment"># 主站点域名主机，例如 xaoxuu.com</span></span><br><span class="line">  <span class="attr">officialHosts:</span> <span class="comment"># 官方主机列表，每行一个，例如 xaoxuu.vercel.app</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">localhost</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">example.com</span> <span class="comment"># 这个要填写你的域名哦，要不会触发非法克隆提示</span></span><br><span class="line"></span><br><span class="line"><span class="attr">open_graph:</span></span><br><span class="line">  <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">twitter_id:</span> <span class="comment"># for open_graph meta</span></span><br><span class="line"></span><br><span class="line"><span class="attr">structured_data:</span></span><br><span class="line">  <span class="attr">links:</span> [] <span class="comment"># your social links.</span></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="comment">######## Sidebar ########</span></span><br><span class="line"><span class="comment"># 左上角显示的 logo 区域，包含图标、大标题、副标题</span></span><br><span class="line"><span class="attr">logo:</span></span><br><span class="line">  <span class="attr">avatar:</span> <span class="string">&#x27;[&#123;config.avatar&#125;](/about/)&#x27;</span> <span class="comment"># you can set avatar link in _config.yml or &#x27;[https://xxx.png](/about/)&#x27;</span></span><br><span class="line">  <span class="attr">title:</span> <span class="string">&#x27;[&#123;config.title&#125;](/)&#x27;</span> <span class="comment"># you can set html tag like: &#x27;[&lt;img no-lazy height=&quot;32px&quot; src=&quot;xxx&quot;/&gt;](/)&#x27;</span></span><br><span class="line">  <span class="attr">subtitle:</span> <span class="string">&#x27;&#123;config.subtitle&#125;&#x27;</span> <span class="comment"># &#x27;文字1 | 文字2&#x27; (鼠标放上去会切换到文字2)</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 侧边栏主功能导航菜单</span></span><br><span class="line"><span class="attr">menubar:</span></span><br><span class="line">  <span class="attr">columns:</span> <span class="number">4</span> <span class="comment"># 一行多少个</span></span><br><span class="line">  <span class="attr">items:</span> <span class="comment"># 可按照自己需求增加，符合以下格式即可</span></span><br><span class="line">    <span class="comment"># id: 页面中高亮的 menu_id </span></span><br><span class="line">    <span class="comment"># theme: 高亮时的颜色，仅 svg 中 fill=&quot;currentColor&quot; 时有效</span></span><br><span class="line">    <span class="comment"># icon: 支持 svg/img 标签，可以定义在 icons.yml 文件中，也支持外部图片的 URL</span></span><br><span class="line">    <span class="comment"># title: 标题</span></span><br><span class="line">    <span class="comment"># url: 点击跳转到哪，支持相对路径和绝对路径</span></span><br><span class="line">    <span class="comment"># - id: post</span></span><br><span class="line">    <span class="comment">#   theme: &#x27;#1BCDFC&#x27;</span></span><br><span class="line">    <span class="comment">#   icon: solar:documents-bold-duotone</span></span><br><span class="line">    <span class="comment">#   title: 博客</span></span><br><span class="line">    <span class="comment">#   url: /</span></span><br><span class="line">    <span class="comment"># - id: wiki</span></span><br><span class="line">    <span class="comment">#   theme: &#x27;#3DC550&#x27;</span></span><br><span class="line">    <span class="comment">#   icon: solar:notebook-bookmark-bold-duotone</span></span><br><span class="line">    <span class="comment">#   title: 文档</span></span><br><span class="line">    <span class="comment">#   url: /wiki/</span></span><br><span class="line">    <span class="comment"># - id: explore</span></span><br><span class="line">    <span class="comment">#   theme: &#x27;#FA6400&#x27;</span></span><br><span class="line">    <span class="comment">#   icon: solar:planet-bold-duotone</span></span><br><span class="line">    <span class="comment">#   title: 探索</span></span><br><span class="line">    <span class="comment">#   url: /explore/</span></span><br><span class="line">    <span class="comment"># - id: social</span></span><br><span class="line">    <span class="comment">#   theme: &#x27;#F44336&#x27;</span></span><br><span class="line">    <span class="comment">#   icon: solar:chat-square-like-bold-duotone</span></span><br><span class="line">    <span class="comment">#   title: 社交</span></span><br><span class="line">    <span class="comment">#   url: /friends/</span></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="comment">######## Main ########</span></span><br><span class="line"><span class="comment"># 站点主结构树</span></span><br><span class="line"><span class="attr">site_tree:</span></span><br><span class="line">  <span class="comment"># -- 列表类页面 -- #</span></span><br><span class="line">  <span class="comment"># 主页配置</span></span><br><span class="line">  <span class="attr">home:</span></span><br><span class="line">    <span class="attr">leftbar:</span> <span class="string">welcome,</span> <span class="string">recent</span></span><br><span class="line">    <span class="attr">rightbar:</span> </span><br><span class="line">  <span class="comment"># 博客列表页配置</span></span><br><span class="line">  <span class="attr">index_blog:</span></span><br><span class="line">    <span class="attr">base_dir:</span> <span class="string">blog</span> <span class="comment"># 只影响自动生成的页面路径</span></span><br><span class="line">    <span class="attr">menu_id:</span> <span class="string">post</span> <span class="comment"># 未在 front-matter 中指定 menu_id 时，layout 为 post 的页面默认使用这里配置的 menu_id</span></span><br><span class="line">    <span class="attr">leftbar:</span> <span class="string">welcome,</span> <span class="string">recent</span> <span class="comment"># for categories/tags/archives</span></span><br><span class="line">    <span class="attr">rightbar:</span> </span><br><span class="line">    <span class="attr">nav_tabs:</span>  <span class="comment"># 近期发布 分类 标签 专栏 归档 and ...</span></span><br><span class="line">      <span class="comment"># &#x27;朋友文章&#x27;: /friends/rss/</span></span><br><span class="line">  <span class="comment"># 博客专栏列表页配置</span></span><br><span class="line">  <span class="attr">index_topic:</span></span><br><span class="line">    <span class="attr">base_dir:</span> <span class="string">topic</span> <span class="comment"># 只影响自动生成的页面路径</span></span><br><span class="line">    <span class="attr">menu_id:</span> <span class="string">post</span> <span class="comment"># 未在 front-matter 中指定 menu_id 时，layout 为 topic 的页面默认使用这里配置的 menu_id</span></span><br><span class="line">  <span class="comment"># 文档列表页配置</span></span><br><span class="line">  <span class="attr">index_wiki:</span></span><br><span class="line">    <span class="attr">base_dir:</span> <span class="string">wiki</span> <span class="comment"># 只影响自动生成的页面路径</span></span><br><span class="line">    <span class="attr">menu_id:</span> <span class="string">wiki</span> <span class="comment"># 未在 front-matter 中指定 menu_id 时，layout 为 wiki 的页面默认使用这里配置的 menu_id</span></span><br><span class="line">    <span class="attr">leftbar:</span> <span class="string">related,</span> <span class="string">recent</span> <span class="comment"># for wiki</span></span><br><span class="line">    <span class="attr">rightbar:</span> </span><br><span class="line">    <span class="attr">nav_tabs:</span></span><br><span class="line">      <span class="comment"># &#x27;more&#x27;: https://github.com/xaoxuu</span></span><br><span class="line">  <span class="comment"># -- 内容类页面 -- #</span></span><br><span class="line">  <span class="comment"># 博客文章内页配置</span></span><br><span class="line">  <span class="attr">post:</span></span><br><span class="line">    <span class="attr">menu_id:</span> <span class="string">post</span> <span class="comment"># 未在 front-matter 中指定 menu_id 时，layout 为 post 的页面默认使用这里配置的 menu_id</span></span><br><span class="line">    <span class="attr">leftbar:</span> <span class="string">related,</span> <span class="string">recent</span> <span class="comment"># for pages using &#x27;layout:post&#x27;</span></span><br><span class="line">    <span class="attr">rightbar:</span> <span class="string">ghrepo,</span> <span class="string">toc</span></span><br><span class="line">  <span class="comment"># 博客专栏文章内页配置</span></span><br><span class="line">  <span class="attr">topic:</span></span><br><span class="line">    <span class="attr">menu_id:</span> <span class="string">post</span></span><br><span class="line">  <span class="comment"># 文档内页配置</span></span><br><span class="line">  <span class="attr">wiki:</span></span><br><span class="line">    <span class="attr">menu_id:</span> <span class="string">wiki</span> <span class="comment"># 未在 front-matter 中指定 menu_id 时，layout 为 wiki 的页面默认使用这里配置的 menu_id</span></span><br><span class="line">    <span class="attr">leftbar:</span> <span class="string">tree,</span> <span class="string">related,</span> <span class="string">recent</span> <span class="comment"># for wiki</span></span><br><span class="line">    <span class="attr">rightbar:</span> <span class="string">ghrepo,</span> <span class="string">toc</span></span><br><span class="line">  <span class="comment"># 笔记本列表页配置</span></span><br><span class="line">  <span class="attr">notebooks:</span></span><br><span class="line">    <span class="attr">base_dir:</span> <span class="string">notebooks</span> <span class="comment"># 笔记本列表页的路径。以及未指定 base_dir 的笔记本的路径前缀。</span></span><br><span class="line">    <span class="attr">menu_id:</span> <span class="string">notebooks</span> <span class="comment"># 笔记本列表页高亮的主导航栏菜单按钮。</span></span><br><span class="line">    <span class="comment"># 笔记本列表页的左侧栏和右侧栏。</span></span><br><span class="line">    <span class="attr">leftbar:</span> <span class="string">recent</span> <span class="comment"># recent within all notebooks</span></span><br><span class="line">    <span class="attr">rightbar:</span> <span class="literal">null</span></span><br><span class="line">  <span class="comment"># 笔记列表页配置</span></span><br><span class="line">  <span class="attr">notes:</span></span><br><span class="line">    <span class="comment"># 笔记列表页和笔记页高亮的主导航栏菜单按钮。</span></span><br><span class="line">    <span class="comment"># 可以在笔记本 yaml 的 menu_id 字段中覆盖此参数。</span></span><br><span class="line">    <span class="comment"># 可以在笔记的 front-matter/menu_id 中覆盖此参数。</span></span><br><span class="line">    <span class="attr">menu_id:</span> <span class="string">notebooks</span></span><br><span class="line">    <span class="comment"># 笔记列表页的左侧栏和右侧栏。可以在笔记本 yaml 的 leftbar 和 rightbar 字段中覆盖此参数。</span></span><br><span class="line">    <span class="attr">leftbar:</span> <span class="string">tagtree,</span> <span class="string">recent</span> <span class="comment"># recent of current notebook</span></span><br><span class="line">    <span class="attr">rightbar:</span> <span class="literal">null</span></span><br><span class="line">  <span class="comment"># 笔记页配置</span></span><br><span class="line">  <span class="attr">note:</span></span><br><span class="line">    <span class="comment"># 笔记页的左侧栏和右侧栏</span></span><br><span class="line">    <span class="comment"># 可以在笔记本 yaml 的 note_leftbar 和 note_rightbar 字段中覆盖此参数。</span></span><br><span class="line">    <span class="comment"># 可以在笔记的 front-matter/leftbar 和 rightbar 字段中覆盖此参数。</span></span><br><span class="line">    <span class="attr">leftbar:</span> <span class="string">tagtree,</span> <span class="string">recent</span> <span class="comment"># recent of current notebook</span></span><br><span class="line">    <span class="attr">rightbar:</span> <span class="string">toc</span></span><br><span class="line">  <span class="comment"># 作者信息配置</span></span><br><span class="line">  <span class="attr">author:</span> </span><br><span class="line">    <span class="attr">base_dir:</span> <span class="string">author</span> <span class="comment"># 只影响自动生成的页面路径</span></span><br><span class="line">    <span class="attr">menu_id:</span> <span class="string">post</span></span><br><span class="line">    <span class="attr">leftbar:</span> <span class="string">recent,</span> <span class="string">timeline</span></span><br><span class="line">    <span class="attr">rightbar:</span> <span class="string">timeline</span></span><br><span class="line">  <span class="comment"># 错误页配置</span></span><br><span class="line">  <span class="attr">error_page:</span></span><br><span class="line">    <span class="attr">menu_id:</span> <span class="string">post</span></span><br><span class="line">    <span class="attr">&#x27;404&#x27;:</span> <span class="string">&#x27;/404.html&#x27;</span></span><br><span class="line">    <span class="attr">leftbar:</span> <span class="string">recent,</span> <span class="string">timeline</span></span><br><span class="line">    <span class="attr">rightbar:</span> <span class="string">timeline</span></span><br><span class="line">  <span class="comment"># 其它自定义页面配置 layout: page</span></span><br><span class="line">  <span class="attr">page:</span></span><br><span class="line">    <span class="attr">leftbar:</span> <span class="string">recent</span></span><br><span class="line">    <span class="attr">rightbar:</span> <span class="string">toc</span></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="comment">######## Notebook ########</span></span><br><span class="line"><span class="attr">notebook:</span></span><br><span class="line">  <span class="comment"># 如果没有指定 excerpt 和 description，将自动取多长的内容作为文章摘要。</span></span><br><span class="line">  <span class="attr">auto_excerpt:</span> <span class="number">128</span></span><br><span class="line">  <span class="comment"># 可以为某个 tag 设定图标（显示在标签树中）。</span></span><br><span class="line">  <span class="attr">tagcons:</span></span><br><span class="line">    <span class="string">&#x27;&#x27;</span><span class="string">:</span> <span class="string">solar:hashtag-square-bold</span></span><br><span class="line">  <span class="comment"># 每页显示多少篇笔记。0 表示不分页，null 则 fallback 到 hexo 的配置。</span></span><br><span class="line">  <span class="comment"># 可以在笔记本 yaml 的 per_page 字段中覆盖此参数。</span></span><br><span class="line">  <span class="attr">per_page:</span> <span class="literal">null</span></span><br><span class="line">  <span class="comment"># 笔记的排序方式。默认按照 updated 降序排序。</span></span><br><span class="line">  <span class="comment"># 可以在笔记本 yaml 的 order_by 字段中覆盖此参数。</span></span><br><span class="line">  <span class="comment"># 注意：置顶的笔记会始终排在最前面。</span></span><br><span class="line">  <span class="comment"># 在 front-matter 中设置 pin:true|number 或 sticky:true|number 来置顶。</span></span><br><span class="line">  <span class="attr">order_by:</span> <span class="string">-updated</span></span><br><span class="line">  <span class="comment"># 是否在笔记页面显示许可协议。false 表示不显示。true 表示沿用主题许可协议内容。也可以给定具体的文本指定协议内容。</span></span><br><span class="line">  <span class="comment"># 可以在笔记本 yaml 的 license 字段中覆盖此参数。</span></span><br><span class="line">  <span class="comment"># 可以在笔记的 front-matter/license 中覆盖此参数。</span></span><br><span class="line">  <span class="attr">license:</span> <span class="literal">false</span></span><br><span class="line">  <span class="comment"># 是否在笔记页面显示分享按钮。</span></span><br><span class="line">  <span class="comment"># 可以在笔记本 yaml 的 share 字段中覆盖此参数。</span></span><br><span class="line">  <span class="comment"># 可以在笔记的 front-matter/share 中覆盖此参数。</span></span><br><span class="line">  <span class="attr">share:</span> <span class="literal">false</span></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="comment">######## Article ########</span></span><br><span class="line"><span class="attr">article:</span></span><br><span class="line">  <span class="comment"># 文章类型，决定布局风格，可以在 front-matter/topic/wiki 中覆盖此参数</span></span><br><span class="line">  <span class="attr">type:</span> <span class="string">tech</span> <span class="comment"># tech: 默认技术类文章, story: 图文类文章，文字和段落间增距大</span></span><br><span class="line">  <span class="comment"># 缩进两个文字宽度，适合文字类博客，可以在 front-matter/topic/wiki 中覆盖此参数</span></span><br><span class="line">  <span class="attr">indent:</span> <span class="comment"># true / false</span></span><br><span class="line">  <span class="comment"># 封面图宽高比</span></span><br><span class="line">  <span class="attr">cover_ratio:</span> <span class="number">2</span></span><br><span class="line">  <span class="comment"># 文章内横幅宽高比</span></span><br><span class="line">  <span class="attr">banner_ratio:</span> <span class="number">2.5</span></span><br><span class="line">  <span class="comment"># 如果没有指定横幅，是否根据 tags 作为关键词搜索横幅图片？</span></span><br><span class="line">  <span class="attr">auto_banner:</span> <span class="literal">false</span> <span class="comment"># search from https://source.unsplash.com/</span></span><br><span class="line">  <span class="comment"># 如果没有指定 excerpt 和 description，将自动取多长的内容作为文章摘要？</span></span><br><span class="line">  <span class="attr">auto_excerpt:</span> <span class="number">128</span></span><br><span class="line">  <span class="comment"># 分类颜色</span></span><br><span class="line">  <span class="attr">category_color:</span></span><br><span class="line">    <span class="string">&#x27;探索号&#x27;</span><span class="string">:</span> <span class="string">&#x27;#f44336&#x27;</span></span><br><span class="line">  <span class="comment"># 文章许可协议</span></span><br><span class="line">  <span class="attr">license:</span> <span class="string">&#x27;本文采用 [署名-非商业性使用-相同方式共享 4.0 国际](https://creativecommons.org/licenses/by-nc-sa/4.0/) 许可协议，转载请注明出处。&#x27;</span></span><br><span class="line">  <span class="comment"># 分享</span></span><br><span class="line">  <span class="attr">share:</span> <span class="comment"># [wechat, weibo, email, link]</span></span><br><span class="line">  <span class="comment"># 相关文章，需要安装插件 (for layout: post)</span></span><br><span class="line">  <span class="comment"># npm i hexo-related-popular-posts</span></span><br><span class="line">  <span class="attr">related_posts:</span></span><br><span class="line">    <span class="attr">enable:</span> <span class="literal">false</span></span><br><span class="line">    <span class="attr">max_count:</span> <span class="number">5</span></span><br><span class="line"></span><br><span class="line"><span class="attr">search:</span></span><br><span class="line">  <span class="attr">service:</span> <span class="string">local_search</span> <span class="comment"># local_search, algolia_search, todo...</span></span><br><span class="line">  <span class="attr">local_search:</span> <span class="comment"># 在 front-matter 中设置 indexing:false 来避免被搜索索引</span></span><br><span class="line">    <span class="attr">field:</span> <span class="string">all</span> <span class="comment"># post, page, all</span></span><br><span class="line">    <span class="attr">path:</span> <span class="string">/search.json</span> <span class="comment"># 搜索文件存放位置</span></span><br><span class="line">    <span class="attr">content:</span> <span class="literal">true</span> <span class="comment"># 是否搜索内容</span></span><br><span class="line">    <span class="attr">skip_search:</span>  <span class="comment"># 指定 path 中的内容不被搜索。</span></span><br><span class="line">  <span class="attr">algolia_search:</span> <span class="comment"># Docsearch https://docsearch.algolia.com/apply/ 申请</span></span><br><span class="line">    <span class="attr">appId:</span> </span><br><span class="line">    <span class="attr">apiKey:</span> </span><br><span class="line">    <span class="attr">indexName:</span> </span><br><span class="line">    <span class="attr">js:</span> <span class="string">https://gcore.jsdelivr.net/algoliasearch/3/algoliasearch.min.js</span></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="comment">######## Comments ########</span></span><br><span class="line"><span class="attr">comments:</span></span><br><span class="line">  <span class="attr">service:</span> <span class="comment"># beaudar, utterances, giscus, twikoo, waline, artalk</span></span><br><span class="line">  <span class="attr">comment_title:</span> <span class="string">快来参与讨论吧~</span></span><br><span class="line">  <span class="attr">lazyload:</span> <span class="literal">false</span> <span class="comment"># true / false</span></span><br><span class="line">  <span class="attr">custom_css:</span> <span class="comment"># artalk,twikoo,... 可以为没有全局启用的评论加载自定义样式</span></span><br><span class="line">  <span class="comment"># beaudar</span></span><br><span class="line">  <span class="comment"># https://beaudar.lipk.org/</span></span><br><span class="line">  <span class="attr">beaudar:</span></span><br><span class="line">    <span class="attr">repo:</span> <span class="string">xxx/xxx</span></span><br><span class="line">    <span class="attr">issue-term:</span> <span class="string">pathname</span></span><br><span class="line">    <span class="attr">issue-number:</span></span><br><span class="line">    <span class="attr">theme:</span> <span class="string">preferred-color-scheme</span></span><br><span class="line">    <span class="attr">label:</span></span><br><span class="line">    <span class="attr">input-position:</span> <span class="string">top</span> <span class="comment"># top/bottom 评论框位置</span></span><br><span class="line">    <span class="attr">comment-order:</span> <span class="string">desc</span> <span class="comment"># desc 排序</span></span><br><span class="line">    <span class="attr">keep-theme:</span> <span class="comment"># true/false</span></span><br><span class="line">    <span class="attr">loading:</span> <span class="literal">false</span></span><br><span class="line">    <span class="attr">branch:</span> <span class="string">main</span></span><br><span class="line">  <span class="comment"># utterances</span></span><br><span class="line">  <span class="comment"># https://utteranc.es/</span></span><br><span class="line">  <span class="attr">utterances:</span></span><br><span class="line">    <span class="attr">repo:</span> <span class="string">xxx/xxx</span></span><br><span class="line">    <span class="attr">issue-term:</span> <span class="string">pathname</span></span><br><span class="line">    <span class="attr">issue-number:</span></span><br><span class="line">    <span class="attr">theme:</span> <span class="string">preferred-color-scheme</span></span><br><span class="line">    <span class="attr">label:</span></span><br><span class="line">  <span class="comment"># giscus</span></span><br><span class="line">  <span class="comment"># https://giscus.app/zh-CN</span></span><br><span class="line">  <span class="attr">giscus:</span></span><br><span class="line">    <span class="attr">src:</span> <span class="string">https://giscus.app/client.js</span></span><br><span class="line">    <span class="attr">data-repo:</span> <span class="string">xxx/xxx</span> <span class="comment"># [在此输入仓库]</span></span><br><span class="line">    <span class="attr">data-repo-id:</span> <span class="comment"># [在此输入仓库 ID]</span></span><br><span class="line">    <span class="attr">data-category:</span> <span class="comment"># [在此输入分类名]</span></span><br><span class="line">    <span class="attr">data-category-id:</span></span><br><span class="line">    <span class="attr">data-mapping:</span> <span class="string">pathname</span></span><br><span class="line">    <span class="attr">data-strict:</span> <span class="number">0</span></span><br><span class="line">    <span class="attr">data-reactions-enabled:</span> <span class="number">1</span></span><br><span class="line">    <span class="attr">data-emit-metadata:</span> <span class="number">0</span></span><br><span class="line">    <span class="attr">data-input-position:</span> <span class="string">top</span> <span class="comment"># top, bottom</span></span><br><span class="line">    <span class="attr">data-theme:</span> <span class="string">preferred_color_scheme</span></span><br><span class="line">    <span class="attr">data-lang:</span> <span class="string">zh-CN</span></span><br><span class="line">    <span class="attr">data-loading:</span> <span class="comment"># lazy</span></span><br><span class="line">    <span class="attr">crossorigin:</span> <span class="string">anonymous</span></span><br><span class="line"></span><br><span class="line">  <span class="comment"># Twikoo</span></span><br><span class="line">  <span class="comment"># https://twikoo.js.org/</span></span><br><span class="line">  <span class="attr">twikoo:</span></span><br><span class="line">    <span class="attr">js:</span> <span class="string">https://gcore.jsdelivr.net/npm/twikoo@1.6/dist/twikoo.all.min.js</span> <span class="comment"># 建议锁定版本</span></span><br><span class="line">    <span class="attr">envId:</span> <span class="string">https://xxx</span> <span class="comment"># vercel函数</span></span><br><span class="line"></span><br><span class="line">  <span class="comment"># Waline</span></span><br><span class="line">  <span class="comment"># https://waline.js.org/</span></span><br><span class="line">  <span class="attr">waline:</span></span><br><span class="line">    <span class="attr">js:</span> <span class="string">https://gcore.jsdelivr.net/npm/@waline/client@3.1/dist/waline.js</span></span><br><span class="line">    <span class="attr">css:</span> <span class="string">https://gcore.jsdelivr.net/npm/@waline/client@3.1/dist/waline.css</span></span><br><span class="line">    <span class="attr">meta_css:</span> <span class="string">https://gcore.jsdelivr.net/npm/@waline/client@3.1/dist/waline-meta.css</span></span><br><span class="line">    <span class="comment"># Waline server address url, you should set this to your own link</span></span><br><span class="line">    <span class="attr">serverURL:</span> <span class="string">https://waline.vercel.app</span></span><br><span class="line">    <span class="comment"># If false, comment count will only be displayed in post page, not in home page</span></span><br><span class="line">    <span class="attr">commentCount:</span> <span class="literal">true</span></span><br><span class="line">    <span class="comment"># Pageviews count, <span class="doctag">Note:</span> You should not enable both `waline.pageview` and `leancloud_visitors`.</span></span><br><span class="line">    <span class="attr">pageview:</span> <span class="literal">false</span></span><br><span class="line">    <span class="comment"># Custom emoji</span></span><br><span class="line">    <span class="comment"># emoji:</span></span><br><span class="line">    <span class="comment">#   - https://unpkg.com/@waline/emojis@1.1.0/weibo</span></span><br><span class="line">    <span class="comment">#   - https://unpkg.com/@waline/emojis@1.1.0/alus</span></span><br><span class="line">    <span class="comment">#   - https://unpkg.com/@waline/emojis@1.1.0/bilibili</span></span><br><span class="line">    <span class="comment">#   - https://unpkg.com/@waline/emojis@1.1.0/qq</span></span><br><span class="line">    <span class="comment">#   - https://unpkg.com/@waline/emojis@1.1.0/tieba</span></span><br><span class="line">    <span class="comment">#   - https://unpkg.com/@waline/emojis@1.1.0/tw-emoji</span></span><br><span class="line">    <span class="comment">#   - https://unpkg.com/@waline/emojis@1.1.0/bmoji</span></span><br><span class="line">    <span class="comment"># 设置自己的图床服务，替换默认的 Base 64 编码嵌入（有体积大小限制），在评论中上传图片更加方便</span></span><br><span class="line">    <span class="comment"># imageUploader:</span></span><br><span class="line">      <span class="comment"># 适配了兰空图床V1、V2版本</span></span><br><span class="line">      <span class="comment"># 以兰空图床V1为例，下列填写内容为：</span></span><br><span class="line">      <span class="comment"># fileName: file</span></span><br><span class="line">      <span class="comment"># tokenName: Authorization</span></span><br><span class="line">      <span class="comment"># api: https://xxxxxx/api/v1/upload</span></span><br><span class="line">      <span class="comment"># token: Bearer xxxxxxxxxxxxxx</span></span><br><span class="line">      <span class="comment"># resp: data.links.url</span></span><br><span class="line">      <span class="comment"># 以兰空图床V2为例，下列填写内容为：</span></span><br><span class="line">      <span class="comment"># fileName: image</span></span><br><span class="line">      <span class="comment"># tokenName: token</span></span><br><span class="line">      <span class="comment"># api: https://xxxxxx/api/upload</span></span><br><span class="line">      <span class="comment"># token: xxxxxxxxxxxxxx</span></span><br><span class="line">      <span class="comment"># resp: data.url</span></span><br><span class="line">    <span class="comment">#   fileName: # 根据版本二选一</span></span><br><span class="line">    <span class="comment">#   tokenName: # 根据版本二选一</span></span><br><span class="line">    <span class="comment">#   api: # 图床 api 地址</span></span><br><span class="line">    <span class="comment">#   token: # 图床验证</span></span><br><span class="line">    <span class="comment">#   resp: # 图片地址返回值的字段</span></span><br><span class="line"></span><br><span class="line">  <span class="comment"># Artalk</span></span><br><span class="line">  <span class="comment"># https://artalk.js.org/</span></span><br><span class="line">  <span class="attr">artalk:</span></span><br><span class="line">    <span class="attr">css:</span> <span class="string">https://unpkg.com/artalk@2.9/dist/Artalk.css</span></span><br><span class="line">    <span class="attr">js:</span> <span class="string">https://unpkg.com/artalk@2.9/dist/Artalk.js</span></span><br><span class="line">    <span class="attr">server:</span> <span class="comment"># 后端服务地址</span></span><br><span class="line">    <span class="attr">site:</span> <span class="string">&#x27;&#x27;</span> <span class="comment"># 站点名称</span></span><br><span class="line">    <span class="attr">darkMode:</span> <span class="string">auto</span> <span class="comment"># 其它模式都有问题，慎用，否则后果自负</span></span><br><span class="line">    <span class="attr">fancybox:</span> <span class="literal">true</span> <span class="comment"># 是否为评论区启用 fancybox</span></span><br><span class="line">    <span class="comment"># artalk 有三类图片：1.上传至服务端 2.上传至服务端后利用upgit上传至图床 3.前端上传至图床（本配置为此类）</span></span><br><span class="line">    <span class="comment"># 配置此项时将覆盖服务端上传能力</span></span><br><span class="line">    <span class="attr">imageUploader:</span></span><br><span class="line">      <span class="comment"># 以兰空图床为例，下列填写内容为：</span></span><br><span class="line">      <span class="comment"># api: &#x27;https://xxxxxx/api/v1/upload&#x27; # 图床上传地址</span></span><br><span class="line">      <span class="comment"># token: &#x27;Bearer xxxxxxxxxxxxxx&#x27; # 图床验证</span></span><br><span class="line">      <span class="comment"># resp: &#x27;data.links.url&#x27; # 图片地址返回值的字段</span></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="comment">######## Footer ########</span></span><br><span class="line"><span class="attr">footer:</span></span><br><span class="line">  <span class="attr">social:</span></span><br><span class="line">    <span class="comment"># github:</span></span><br><span class="line">    <span class="comment">#   icon: &#x27;&lt;img src=&quot;https://gcore.jsdelivr.net/gh/cdn-x/placeholder@1.0.12/social/08a41b181ce68.svg&quot;/&gt;&#x27;</span></span><br><span class="line">    <span class="comment">#   url: /</span></span><br><span class="line">    <span class="comment"># music:</span></span><br><span class="line">    <span class="comment">#   icon: &#x27;&lt;img src=&quot;https://gcore.jsdelivr.net/gh/cdn-x/placeholder@1.0.12/social/3845874.svg&quot;/&gt;&#x27;</span></span><br><span class="line">    <span class="comment">#   url: /</span></span><br><span class="line">    <span class="comment"># unsplash:</span></span><br><span class="line">    <span class="comment">#   icon: &#x27;&lt;img src=&quot;https://gcore.jsdelivr.net/gh/cdn-x/placeholder@1.0.12/social/3616429.svg&quot;/&gt;&#x27;</span></span><br><span class="line">    <span class="comment">#   url: /</span></span><br><span class="line">    <span class="comment"># comments:</span></span><br><span class="line">    <span class="comment">#   icon: &#x27;&lt;img src=&quot;https://gcore.jsdelivr.net/gh/cdn-x/placeholder@1.0.12/social/942ebbf1a4b91.svg&quot;/&gt;&#x27;</span></span><br><span class="line">    <span class="comment">#   url: /about/#comments</span></span><br><span class="line">  <span class="attr">sitemap:</span></span><br><span class="line">    <span class="comment"># - title: 博客</span></span><br><span class="line">    <span class="comment">#   items:</span></span><br><span class="line">    <span class="comment">#     - &#x27;[近期发布](/)&#x27;</span></span><br><span class="line">    <span class="comment">#     - &#x27;[分类](/blog/categories/)&#x27;</span></span><br><span class="line">    <span class="comment">#     - &#x27;[标签](/blog/tags/)&#x27;</span></span><br><span class="line">    <span class="comment">#     - &#x27;[归档](/blog/archives/)&#x27;</span></span><br><span class="line">    <span class="comment"># - title: 项目</span></span><br><span class="line">    <span class="comment">#   items:</span></span><br><span class="line">    <span class="comment">#     - &#x27;[xxx](/)&#x27;</span></span><br><span class="line">    <span class="comment">#     - &#x27;[xxx](/)&#x27;</span></span><br><span class="line">    <span class="comment">#     - &#x27;[xxx](/)&#x27;</span></span><br><span class="line">    <span class="comment">#     - &#x27;[xxx](/)&#x27;</span></span><br><span class="line">    <span class="comment"># - title: 社交</span></span><br><span class="line">    <span class="comment">#   items:</span></span><br><span class="line">    <span class="comment">#     - &#x27;[xxx](/)&#x27;</span></span><br><span class="line">    <span class="comment">#     - &#x27;[xxx](/)&#x27;</span></span><br><span class="line">    <span class="comment">#     - &#x27;[xxx](/)&#x27;</span></span><br><span class="line">    <span class="comment">#     - &#x27;[xxx](/)&#x27;</span></span><br><span class="line">    <span class="comment"># - title: 关于</span></span><br><span class="line">    <span class="comment">#   items:</span></span><br><span class="line">    <span class="comment">#     - &#x27;[xxx](/)&#x27;</span></span><br><span class="line">    <span class="comment">#     - &#x27;[xxx](/)&#x27;</span></span><br><span class="line">    <span class="comment">#     - &#x27;[xxx](/)&#x27;</span></span><br><span class="line">    <span class="comment">#     - &#x27;[xxx](/)&#x27;</span></span><br><span class="line">  <span class="attr">content:</span> <span class="string">|</span> <span class="comment"># 支持 Markdown 格式</span></span><br><span class="line">    <span class="string">本站由</span> [&#123;<span class="string">author.name</span>&#125;]<span class="string">(/)</span> <span class="string">使用</span> [&#123;<span class="string">theme.name</span>&#125; &#123;<span class="string">theme.version</span>&#125;]<span class="string">(&#123;theme.tree&#125;)</span> <span class="string">主题创建。</span></span><br><span class="line">    <span class="string">本博客所有文章除特别声明外，均采用</span> [<span class="string">CC</span> <span class="string">BY-NC-SA</span> <span class="number">4.0</span>]<span class="string">(https://creativecommons.org/licenses/by-nc-sa/4.0/)</span> <span class="string">许可协议，转载请注明出处。</span></span><br><span class="line">  <span class="comment"># 主题用户越多，开发者维护和更新的积极性就越高，如果您喜欢本主题，请在适当的位置显示主题信息和仓库链接以表支持。</span></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="comment">######## Tag Plugins ########</span></span><br><span class="line"><span class="attr">tag_plugins:</span></span><br><span class="line">  <span class="comment"># &#123;% box %&#125; / &#123;% note %&#125;</span></span><br><span class="line">  <span class="attr">note:</span></span><br><span class="line">    <span class="attr">default_color:</span> <span class="string">&#x27;&#x27;</span> <span class="comment"># light, dark, red, orange, yellow, green, cyan, blue, purple, warning, error</span></span><br><span class="line">    <span class="attr">border:</span> <span class="literal">true</span> <span class="comment"># true / false</span></span><br><span class="line">  <span class="comment"># &#123;% checkbox %&#125;</span></span><br><span class="line">  <span class="attr">checkbox:</span></span><br><span class="line">    <span class="attr">interactive:</span> <span class="literal">false</span> <span class="comment"># enable interactive for user</span></span><br><span class="line">  <span class="comment"># &#123;% quot %&#125;</span></span><br><span class="line">  <span class="attr">quot:</span></span><br><span class="line">    <span class="attr">default:</span> <span class="comment"># 可以自行配置多种图标方案，支持icons.yml中配置的图片key，也支持直接设置svg/png等文件链接</span></span><br><span class="line">      <span class="attr">prefix:</span> <span class="string">bxs:quote-left</span></span><br><span class="line">      <span class="attr">suffix:</span> <span class="string">bxs:quote-right</span></span><br><span class="line">    <span class="attr">hashtag:</span></span><br><span class="line">      <span class="attr">prefix:</span> <span class="string">solar:hashtag-square-bold</span></span><br><span class="line">    <span class="attr">question:</span></span><br><span class="line">      <span class="attr">prefix:</span> <span class="string">ph:seal-question-fill</span></span><br><span class="line">  <span class="comment"># &#123;% emoji %&#125;</span></span><br><span class="line">  <span class="attr">emoji:</span></span><br><span class="line">    <span class="attr">default:</span> <span class="string">https://gcore.jsdelivr.net/gh/cdn-x/emoticons@3.1/qq/&#123;name&#125;.gif</span></span><br><span class="line">    <span class="attr">twemoji:</span> <span class="string">https://gcore.jsdelivr.net/gh/twitter/twemoji/assets/svg/&#123;name&#125;.svg</span></span><br><span class="line">    <span class="attr">qq:</span> <span class="string">https://gcore.jsdelivr.net/gh/cdn-x/emoticons@3.1/qq/&#123;name&#125;.gif</span></span><br><span class="line">    <span class="attr">aru:</span> <span class="string">https://gcore.jsdelivr.net/gh/cdn-x/emoticons@3.1/aru/&#123;name&#125;.gif</span></span><br><span class="line">    <span class="attr">tieba:</span> <span class="string">https://gcore.jsdelivr.net/gh/cdn-x/emoticons@3.1/tieba/&#123;name&#125;.png</span></span><br><span class="line">    <span class="attr">blobcat:</span> <span class="string">https://gcore.jsdelivr.net/gh/cdn-x/emoticons@3.1/blobcat/&#123;name&#125;.gif</span></span><br><span class="line">  <span class="attr">icon:</span></span><br><span class="line">    <span class="comment"># 留空时，图标和文字颜色相同</span></span><br><span class="line">    <span class="attr">default_color:</span> <span class="string">accent</span> <span class="comment"># theme, accent, red, orange, yellow, green, cyan, blue, purple</span></span><br><span class="line">  <span class="comment"># &#123;% button 标题 链接 %&#125;</span></span><br><span class="line">  <span class="attr">button:</span></span><br><span class="line">    <span class="attr">default_color:</span> <span class="string">theme</span> <span class="comment"># theme, accent, red, orange, yellow, green, cyan, blue, purple</span></span><br><span class="line">  <span class="comment"># &#123;% image %&#125;</span></span><br><span class="line">  <span class="attr">image:</span></span><br><span class="line">    <span class="attr">fancybox:</span> <span class="literal">false</span> <span class="comment"># true, false</span></span><br><span class="line">  <span class="comment"># &#123;% copy xxx %&#125;</span></span><br><span class="line">  <span class="attr">copy:</span></span><br><span class="line">    <span class="attr">toast:</span> <span class="string">复制成功</span></span><br><span class="line">  <span class="comment"># &#123;% timeline %&#125;</span></span><br><span class="line">  <span class="attr">timeline:</span></span><br><span class="line">    <span class="attr">max-height:</span> <span class="string">80vh</span></span><br><span class="line">  <span class="comment"># &#123;% mark %&#125;</span></span><br><span class="line">  <span class="attr">mark:</span></span><br><span class="line">    <span class="attr">default_color:</span> <span class="string">yellow</span> <span class="comment"># light, dark, red, orange, yellow, green, cyan, blue, purple, warning, error</span></span><br><span class="line">  <span class="comment"># &#123;% hashtag %&#125;</span></span><br><span class="line">  <span class="attr">hashtag:</span></span><br><span class="line">    <span class="attr">default_color:</span> <span class="comment"># red, orange, yellow, green, cyan, blue, purple</span></span><br><span class="line">  <span class="comment"># &#123;% okr o1 percent:50 status:in_track/at_risk/off_track/finished/unfinished %&#125;</span></span><br><span class="line">  <span class="attr">okr:</span></span><br><span class="line">    <span class="attr">border:</span> <span class="literal">true</span> <span class="comment"># 是否显示边框</span></span><br><span class="line">    <span class="attr">status:</span> <span class="comment"># 可以自行增加</span></span><br><span class="line">      <span class="comment"># 进行中状态</span></span><br><span class="line">      <span class="attr">in_track:</span></span><br><span class="line">        <span class="attr">color:</span> <span class="string">blue</span> <span class="comment"># red, orange, yellow, green, cyan, blue, purple</span></span><br><span class="line">        <span class="attr">label:</span> <span class="string">正常</span></span><br><span class="line">      <span class="attr">at_risk:</span> </span><br><span class="line">        <span class="attr">color:</span> <span class="string">yellow</span></span><br><span class="line">        <span class="attr">label:</span> <span class="string">风险</span></span><br><span class="line">      <span class="attr">off_track:</span></span><br><span class="line">        <span class="attr">color:</span> <span class="string">orange</span></span><br><span class="line">        <span class="attr">label:</span> <span class="string">延期</span></span><br><span class="line">      <span class="comment"># 结果状态</span></span><br><span class="line">      <span class="attr">finished:</span></span><br><span class="line">        <span class="attr">color:</span> <span class="string">green</span></span><br><span class="line">        <span class="attr">label:</span> <span class="string">已完成</span></span><br><span class="line">      <span class="attr">unfinished:</span></span><br><span class="line">        <span class="attr">color:</span> <span class="string">red</span></span><br><span class="line">        <span class="attr">label:</span> <span class="string">未完成</span></span><br><span class="line">  <span class="comment"># &#123;% gallery %&#125;</span></span><br><span class="line">  <span class="attr">gallery:</span></span><br><span class="line">    <span class="attr">layout:</span> <span class="string">grid</span> <span class="comment"># grid / flow</span></span><br><span class="line">    <span class="attr">size:</span> <span class="string">mix</span> <span class="comment"># s / m / l / xl / mix</span></span><br><span class="line">    <span class="attr">ratio:</span> <span class="string">square</span> <span class="comment"># origin / square</span></span><br><span class="line">  <span class="attr">chat:</span></span><br><span class="line">    <span class="attr">api:</span> <span class="string">https://siteinfo.listentothewind.cn/api/v1</span></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="comment"># 基础依赖</span></span><br><span class="line"><span class="attr">dependencies:</span></span><br><span class="line">  <span class="attr">jquery:</span> <span class="string">https://gcore.jsdelivr.net/npm/jquery@3.7/dist/jquery.min.js</span></span><br><span class="line">  <span class="attr">marked:</span> <span class="string">https://gcore.jsdelivr.net/npm/marked@13.0/lib/marked.umd.min.js</span></span><br><span class="line">  <span class="attr">lazyload:</span></span><br><span class="line">    <span class="attr">js:</span> <span class="string">https://gcore.jsdelivr.net/npm/vanilla-lazyload@19.1/dist/lazyload.min.js</span></span><br><span class="line">    <span class="attr">transition:</span> <span class="string">fade</span> <span class="comment"># blur, fade</span></span><br><span class="line">    <span class="attr">fix_ratio:</span> <span class="literal">true</span> <span class="comment"># true / false</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 内置服务，按需加载（页面内用到了就会加载，没有用到就不会加载）</span></span><br><span class="line"><span class="attr">data_services:</span></span><br><span class="line">  <span class="comment"># 外部 md 渲染</span></span><br><span class="line">  <span class="attr">mdrender:</span></span><br><span class="line">    <span class="attr">js:</span> <span class="string">/js/services/mdrender.js</span></span><br><span class="line">  <span class="comment"># 数据填充类</span></span><br><span class="line">  <span class="attr">siteinfo:</span></span><br><span class="line">    <span class="attr">js:</span> <span class="string">/js/services/siteinfo.js</span></span><br><span class="line">    <span class="comment"># 设置 api 可以自动提取网页标题、图标，服务部署方法：https://github.com/xaoxuu/site-info-api/</span></span><br><span class="line">    <span class="comment"># 接口测试通过后，把按钮的 href 部分替换成 &#123;href&#125; 之后填写到下方，例如：https://api.xaox.cc/site_info/v1?url=&#123;href&#125;</span></span><br><span class="line">    <span class="attr">api:</span> </span><br><span class="line">  <span class="attr">ghinfo:</span></span><br><span class="line">    <span class="attr">js:</span> <span class="string">/js/services/ghinfo.js</span></span><br><span class="line">  <span class="comment"># 打分</span></span><br><span class="line">  <span class="attr">rating:</span></span><br><span class="line">    <span class="attr">js:</span> <span class="string">/js/services/rating.js</span></span><br><span class="line">    <span class="attr">api:</span> <span class="string">https://star-vote.xaox.cc/api/rating</span></span><br><span class="line">  <span class="comment"># 投票</span></span><br><span class="line">  <span class="attr">vote:</span></span><br><span class="line">    <span class="attr">js:</span> <span class="string">/js/services/vote.js</span></span><br><span class="line">    <span class="attr">api:</span> <span class="string">https://star-vote.xaox.cc/api/vote</span></span><br><span class="line">  <span class="comment"># 网格布局类</span></span><br><span class="line">  <span class="attr">sites:</span></span><br><span class="line">    <span class="attr">js:</span> <span class="string">/js/services/sites.js</span></span><br><span class="line">  <span class="attr">friends:</span></span><br><span class="line">    <span class="attr">js:</span> <span class="string">/js/services/friends.js</span></span><br><span class="line">  <span class="attr">friends_and_posts:</span></span><br><span class="line">    <span class="attr">js:</span> <span class="string">/js/services/friends_and_posts.js</span></span><br><span class="line">  <span class="comment"># 列表布局类</span></span><br><span class="line">  <span class="attr">timeline:</span></span><br><span class="line">    <span class="attr">js:</span> <span class="string">/js/services/timeline.js</span></span><br><span class="line">  <span class="attr">fcircle:</span></span><br><span class="line">    <span class="attr">js:</span> <span class="string">/js/services/fcircle.js</span></span><br><span class="line">  <span class="attr">weibo:</span></span><br><span class="line">    <span class="attr">js:</span> <span class="string">/js/services/weibo.js</span></span><br><span class="line">  <span class="attr">memos:</span></span><br><span class="line">    <span class="attr">js:</span> <span class="string">/js/services/memos.js</span></span><br><span class="line">  <span class="comment"># chat</span></span><br><span class="line">  <span class="attr">voice:</span> </span><br><span class="line">    <span class="attr">js:</span> <span class="string">/js/plugins/voice.js</span></span><br><span class="line">  <span class="attr">video:</span> </span><br><span class="line">    <span class="attr">js:</span> <span class="string">/js/plugins/video.js</span></span><br><span class="line">  <span class="attr">download-file:</span> </span><br><span class="line">    <span class="attr">js:</span> <span class="string">/js/plugins/download-file.js</span></span><br><span class="line">  <span class="comment"># 最新评论获取类</span></span><br><span class="line">  <span class="attr">twikoo:</span></span><br><span class="line">    <span class="attr">js:</span> <span class="string">/js/services/twikoo_latest_comment.js</span></span><br><span class="line">  <span class="attr">waline:</span></span><br><span class="line">    <span class="attr">js:</span> <span class="string">/js/services/waline_latest_comment.js</span></span><br><span class="line">  <span class="attr">artalk:</span></span><br><span class="line">    <span class="attr">js:</span> <span class="string">/js/services/artalk_latest_comment.js</span></span><br><span class="line">  <span class="attr">giscus:</span></span><br><span class="line">    <span class="attr">js:</span> <span class="string">/js/services/giscus_latest_comment.js</span></span><br><span class="line">  <span class="attr">contributors:</span></span><br><span class="line">    <span class="attr">edit_this_page:</span> <span class="comment"># 从开头开始匹配替换</span></span><br><span class="line">      <span class="attr">&#x27;_posts/&#x27;:</span> <span class="comment"># https://github.com/xaoxuu/xaoxuu.com/blob/main/source/_posts/</span></span><br><span class="line">      <span class="attr">&#x27;wiki/stellar/&#x27;:</span> <span class="string">https://github.com/xaoxuu/hexo-theme-stellar-docs/blob/main/</span></span><br><span class="line">    <span class="attr">js:</span> <span class="string">/js/services/contributors.js</span></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="comment"># 扩展插件接入方法：(插件名下面用 #plugin# 代替)</span></span><br><span class="line"><span class="comment"># 1. 在这里增加 #plugin# 配置，至少应含有 enable 字段，默认为空（不启用）</span></span><br><span class="line"><span class="comment"># 2. 新建文件 layout/_plugins/#plugin#.ejs 文件中设置编写加载代码。</span></span><br><span class="line"><span class="comment"># 2.1. 在该文件中可以直接使用 conf 来读取用户在【步骤 1】填写的配置字段内容</span></span><br><span class="line"><span class="comment"># 2.2. 如果需要引入 css 或 js，可以使用 utils.css(xxx)、utils.js(xxx)，具体可参考 layout/_plugins/fancybox.ejs</span></span><br><span class="line"><span class="comment"># 2.3. 如果需要本地 js 文件，请放入 /source/js/plugins 文件夹中，引入方式为：utils.js(&#x27;/js/plugins/xxx.js&#x27;);</span></span><br><span class="line"><span class="comment"># 3. 如果这个插件只需要引入外部文件，可以在【步骤 1】处增加 inject 字段，而无需进入【步骤 2】创建 ejs，参考 katex</span></span><br><span class="line"><span class="attr">plugins:</span></span><br><span class="line"></span><br><span class="line">  <span class="comment"># preload</span></span><br><span class="line">  <span class="attr">preload:</span></span><br><span class="line">    <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">    <span class="attr">service:</span> <span class="string">flying_pages</span> <span class="comment"># flying_pages</span></span><br><span class="line">    <span class="attr">flying_pages:</span> <span class="string">https://gcore.jsdelivr.net/npm/flying-pages@2/flying-pages.min.js</span></span><br><span class="line"></span><br><span class="line">  <span class="comment"># https://fancyapps.com/docs/ui/fancybox/</span></span><br><span class="line">  <span class="comment"># available for &#123;% image xxx %&#125;</span></span><br><span class="line">  <span class="attr">fancybox:</span></span><br><span class="line">    <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">    <span class="attr">loader:</span> <span class="string">/js/plugins/fancybox-loader.js</span></span><br><span class="line">    <span class="attr">js:</span> <span class="string">https://gcore.jsdelivr.net/npm/@fancyapps/ui@5.0/dist/fancybox/fancybox.umd.js</span></span><br><span class="line">    <span class="attr">css:</span> <span class="string">https://gcore.jsdelivr.net/npm/@fancyapps/ui@5.0/dist/fancybox/fancybox.css</span></span><br><span class="line">    <span class="comment"># 让 md 语法图片支持放大可以这样写: .md-text img:not([class]), .md-text .image img</span></span><br><span class="line">    <span class="comment"># 可以处理评论区的图片（不支持 iframe 类评论系统）例如：</span></span><br><span class="line">    <span class="comment"># 使用 twikoo 评论可以写: .tk-content img:not([class*=&quot;emo&quot;])</span></span><br><span class="line">    <span class="comment"># 使用 waline 评论可以写: #waline_container .vcontent img</span></span><br><span class="line">    <span class="attr">selector:</span> <span class="string">.timenode</span> <span class="string">p&gt;img</span> <span class="comment"># 多个选择器用英文逗号隔开</span></span><br><span class="line"></span><br><span class="line">  <span class="comment"># swiper</span></span><br><span class="line">  <span class="attr">swiper:</span></span><br><span class="line">    <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">    <span class="attr">css:</span> <span class="string">https://unpkg.com/swiper@10.3/swiper-bundle.min.css</span></span><br><span class="line">    <span class="attr">js:</span> <span class="string">https://unpkg.com/swiper@10.3/swiper-bundle.min.js</span></span><br><span class="line"></span><br><span class="line">  <span class="comment"># https://scrollrevealjs.org/api/reveal.html</span></span><br><span class="line">  <span class="attr">scrollreveal:</span></span><br><span class="line">    <span class="attr">enable:</span> <span class="comment">#true # 慎用，有些时候打开页面空白</span></span><br><span class="line">    <span class="attr">js:</span> <span class="string">https://gcore.jsdelivr.net/npm/scrollreveal@4.0/dist/scrollreveal.min.js</span></span><br><span class="line">    <span class="attr">distance:</span> <span class="string">8px</span></span><br><span class="line">    <span class="attr">duration:</span> <span class="number">500</span> <span class="comment"># ms</span></span><br><span class="line">    <span class="attr">interval:</span> <span class="number">50</span> <span class="comment"># ms</span></span><br><span class="line">    <span class="attr">scale:</span> <span class="number">1</span> <span class="comment"># 0.1~1</span></span><br><span class="line">  </span><br><span class="line">  <span class="comment"># AI 摘要</span></span><br><span class="line">  <span class="comment"># https://github.com/qxchuckle/Post-Summary-AI</span></span><br><span class="line">  <span class="attr">tianli_gpt:</span> </span><br><span class="line">    <span class="attr">enable:</span> <span class="comment">#true</span></span><br><span class="line">    <span class="attr">js:</span> <span class="string">https://jsd.onmicrosoft.cn/gh/qxchuckle/Post-Summary-AI@6.0/chuckle-post-ai.min.js</span></span><br><span class="line">    <span class="attr">field:</span> <span class="string">post</span> <span class="comment"># all, post, wiki</span></span><br><span class="line">    <span class="attr">key:</span> <span class="string">5Q5mpqRK5DkwT1X9Gi5e</span> <span class="comment"># tianli_gpt key</span></span><br><span class="line">    <span class="attr">total_length:</span> <span class="number">1000</span> <span class="comment"># 设置提交的字数限制，默认为1000字，上限为5000，超过5000字符将被截断</span></span><br><span class="line">    <span class="attr">typewriter:</span> <span class="literal">true</span> <span class="comment"># 打字机动画 </span></span><br><span class="line">    <span class="attr">summary_directly:</span> <span class="literal">true</span> <span class="comment"># 是否直接显示摘要，否则显示 AI 简介</span></span><br><span class="line">    <span class="attr">rec_method:</span> <span class="string">all</span> <span class="comment"># all, web # 文章推荐方式，all：匹配数据库内所有文章进行推荐，web：仅当前站内的文章，默认all</span></span><br><span class="line">    <span class="attr">hide_shuttle:</span> <span class="literal">true</span> <span class="comment"># 是否隐藏矩阵穿梭</span></span><br><span class="line">    <span class="attr">summary_toggle:</span> <span class="literal">false</span></span><br><span class="line">    <span class="attr">interface:</span></span><br><span class="line">      <span class="attr">name:</span> <span class="string">AI摘要</span></span><br><span class="line">      <span class="attr">introduce:</span> <span class="string">&#x27;我是文章辅助AI: QX-AI，点击下方的按钮，让我生成本文简介、推荐相关文章等。&#x27;</span></span><br><span class="line">      <span class="attr">version:</span> <span class="string">TianliGPT</span></span><br><span class="line">      <span class="attr">button:</span> [<span class="string">&quot;介绍自己&quot;</span>, <span class="string">&quot;推荐文章&quot;</span>, <span class="string">&quot;生成摘要&quot;</span>, <span class="string">&quot;矩阵穿梭&quot;</span>]</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">  <span class="comment"># Katex - The fastest math typesetting library for the web</span></span><br><span class="line">  <span class="comment"># https://katex.org/docs/autorender.html</span></span><br><span class="line">  <span class="comment"># https://github.com/KaTeX/KaTeX</span></span><br><span class="line">  <span class="comment"># 使用 hexo-renderer-markdown-it-plus 作为公式渲染器：npm uninstall hexo-renderer-marked --save npm install hexo-renderer-markdown-it-plus --save</span></span><br><span class="line">  <span class="attr">katex:</span></span><br><span class="line">    <span class="attr">enable:</span> <span class="comment">#true # hexo-renderer-markdown-it-plus 默认开启 katex，此选项仅用于引入样式</span></span><br><span class="line">    <span class="attr">inject:</span> <span class="string">|</span></span><br><span class="line"><span class="string">      &lt;link rel=&quot;stylesheet&quot; href=&quot;https://gcore.jsdelivr.net/npm/katex@0.16/dist/katex.min.css&quot; integrity=&quot;sha384-vKruj+a13U8yHIkAyGgK1J3ArTLzrFGBbBc0tDp4ad/EyewESeXE/Iv67Aj8gKZ0&quot; crossorigin=&quot;anonymous&quot;&gt;</span></span><br><span class="line"><span class="string"></span>  </span><br><span class="line">  <span class="comment"># MathJax</span></span><br><span class="line">  <span class="comment"># 需在Markdown文件开头加入mathjax: true</span></span><br><span class="line">  <span class="comment"># 推荐使用Pandoc: npm uninstall hexo-renderer-marked --save &amp; npm install hexo-renderer-pandoc --save</span></span><br><span class="line">  <span class="attr">mathjax:</span></span><br><span class="line">    <span class="attr">v3:</span> <span class="literal">false</span> <span class="comment"># 若使用 v3，需將 js 設置為 https://cdnjs.cloudflare.com/ajax/libs/mathjax/3.2.2/es5/tex-mml-chtml.min.js</span></span><br><span class="line">    <span class="attr">enable:</span> <span class="comment"># true # 可以在特定文章的 front-matter 中设置 mathjax: true 来开启，也可以在这里设置全局开启</span></span><br><span class="line">    <span class="attr">js:</span> <span class="string">https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.6/MathJax.js?config=TeX-AMS-MML_HTMLorMML</span></span><br><span class="line"></span><br><span class="line">  <span class="comment"># Mermaid - markdwon to flow chart, seq chart, class chart ...</span></span><br><span class="line">  <span class="comment"># 需要安装 npm install --save hexo-filter-mermaid-diagrams</span></span><br><span class="line">  <span class="comment"># 使用时 需要在Markdown文件开头加入 mermaid: true</span></span><br><span class="line">  <span class="comment"># 使用示例：</span></span><br><span class="line">  <span class="comment"># &lt;pre class=&quot;mermaid&quot;&gt;  # graph LR</span></span><br><span class="line">  <span class="comment">#   A(Section A) --&gt;|option 1| B(Section A)</span></span><br><span class="line">  <span class="comment">#   B --&gt;|option 2| C(Section C)</span></span><br><span class="line">  <span class="comment">#&lt;/pre&gt;</span></span><br><span class="line">  <span class="attr">mermaid:</span></span><br><span class="line">    <span class="attr">enable:</span> <span class="comment"># true # 可以在特定文章的 front-matter 中设置 mermaid: true 来开启，也可以在这里设置全局开启</span></span><br><span class="line">    <span class="attr">style_optimization:</span> <span class="literal">false</span> <span class="comment"># use custom style in stellar</span></span><br><span class="line">    <span class="comment"># js: https://unpkg.com/mermaid@9.0.0/dist/mermaid.min.js</span></span><br><span class="line">    <span class="attr">js:</span> <span class="string">https://gcore.jsdelivr.net/npm/mermaid@v9/dist/mermaid.min.js</span></span><br><span class="line">    <span class="comment"># Available themes: default | dark | forest | neutral</span></span><br><span class="line">    <span class="attr">theme:</span> <span class="string">neutral</span></span><br><span class="line">  </span><br><span class="line">  <span class="comment"># 代码块复制按钮</span></span><br><span class="line">  <span class="attr">copycode:</span></span><br><span class="line">    <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">    <span class="attr">default_text:</span> <span class="string">&#x27;Copy&#x27;</span></span><br><span class="line">    <span class="attr">success_text:</span> <span class="string">&#x27;Copied&#x27;</span></span><br><span class="line">    <span class="attr">toast:</span> <span class="string">复制成功</span></span><br><span class="line">  </span><br><span class="line">  <span class="comment"># 赫蹏 (Heti) - 专为中文网页内容设计的排版样式增强</span></span><br><span class="line">  <span class="comment"># https://github.com/sivan/heti</span></span><br><span class="line">  <span class="attr">heti:</span></span><br><span class="line">    <span class="attr">enable:</span> <span class="literal">false</span> <span class="comment"># 此插件会和代码块冲突，仅适用于纯中文博主。</span></span><br><span class="line">    <span class="attr">css:</span> <span class="string">https://unpkg.com/heti@0.9/umd/heti.min.css</span></span><br><span class="line">    <span class="attr">js:</span> <span class="string">https://unpkg.com/heti@0.9/umd/heti-addon.min.js</span></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="attr">style:</span></span><br><span class="line">  <span class="attr">prefers_theme:</span> <span class="string">auto</span> <span class="comment"># auto / light / dark</span></span><br><span class="line">  <span class="attr">smooth_scroll:</span> <span class="literal">true</span> <span class="comment"># true / false 开启时如果目录过长可能无法准确定位</span></span><br><span class="line">  <span class="attr">font-size:</span></span><br><span class="line">    <span class="attr">root:</span> <span class="string">16px</span> <span class="comment"># 改这个会影响全局所有文字的字号</span></span><br><span class="line">    <span class="attr">body:</span> <span class="string">17px</span> <span class="comment"># 影响正文区域的字号，如果改成 px 则不受 root 影响</span></span><br><span class="line">    <span class="attr">code:</span> <span class="number">85</span><span class="string">%</span> <span class="comment"># 相较于其所在行的文本大小，建议用百分比</span></span><br><span class="line">    <span class="attr">codeblock:</span> <span class="number">0.</span><span class="string">8125rem</span> <span class="comment"># 13px</span></span><br><span class="line">  <span class="attr">font-family:</span></span><br><span class="line">    <span class="attr">body:</span> <span class="string">&#x27;system-ui, &quot;Microsoft Yahei&quot;, &quot;Segoe UI&quot;, Arial, sans-serif&#x27;</span></span><br><span class="line">    <span class="attr">code:</span> <span class="string">&#x27;Menlo, Monaco, Consolas, system-ui, monospace, sans-serif&#x27;</span></span><br><span class="line">    <span class="attr">codeblock:</span> <span class="string">&#x27;Menlo, Monaco, Consolas, system-ui, monospace, sans-serif&#x27;</span></span><br><span class="line">  <span class="attr">text-align:</span> <span class="string">left</span></span><br><span class="line">  <span class="attr">prefix:</span></span><br><span class="line">    <span class="attr">h2:</span> <span class="string">https://api.iconify.design/ci:heading-h2.svg</span></span><br><span class="line">  <span class="attr">border-radius:</span></span><br><span class="line">    <span class="attr">card-l:</span> <span class="string">24px</span> <span class="comment"># 侧边栏、文章横幅位置的圆角</span></span><br><span class="line">    <span class="attr">card:</span> <span class="string">16px</span> <span class="comment"># 文章内大部分卡片的圆角</span></span><br><span class="line">    <span class="attr">card-s:</span> <span class="string">12px</span> <span class="comment"># 文章内小型卡片的圆角</span></span><br><span class="line">    <span class="attr">bar:</span> <span class="string">8px</span> <span class="comment"># 横条类元素的圆角</span></span><br><span class="line">    <span class="attr">image-l:</span> <span class="string">24px</span> <span class="comment"># 非技术类文章插图圆角</span></span><br><span class="line">    <span class="attr">image:</span> <span class="string">16px</span> <span class="comment"># 技术类文章插图圆角</span></span><br><span class="line">    <span class="attr">image-s:</span> <span class="string">8px</span> <span class="comment"># 评论区图片圆角（部分评论支持）</span></span><br><span class="line">  <span class="attr">color:</span></span><br><span class="line">    <span class="comment"># 主题色配置（不会根据明暗动态调整，请设置为通用的颜色）</span></span><br><span class="line">    <span class="attr">theme:</span> <span class="string">&#x27;hsl(192 98% 55%)&#x27;</span> <span class="comment"># 主题色</span></span><br><span class="line">    <span class="attr">accent:</span> <span class="string">&#x27;hsl(14 100% 57%)&#x27;</span> <span class="comment"># 强调色</span></span><br><span class="line">    <span class="attr">link:</span> <span class="string">&#x27;hsl(207 90% 54%)&#x27;</span> <span class="comment"># 超链接颜色</span></span><br><span class="line">  <span class="attr">animated_avatar:</span></span><br><span class="line">    <span class="attr">animate:</span> <span class="string">auto</span> <span class="comment"># auto, always</span></span><br><span class="line">    <span class="attr">background:</span> <span class="string">https://gcore.jsdelivr.net/gh/cdn-x/placeholder@1.0.12/avatar/round/rainbow64@3x.webp</span></span><br><span class="line">  <span class="attr">codeblock:</span></span><br><span class="line">    <span class="attr">scrollbar:</span> <span class="string">4px</span></span><br><span class="line">    <span class="attr">highlightjs_theme:</span> <span class="string">https://gcore.jsdelivr.net/gh/highlightjs/cdn-release@11.9/build/styles/atom-one-dark.min.css</span></span><br><span class="line">  <span class="attr">loading:</span></span><br><span class="line">    <span class="attr">loading:</span> <span class="string">正在加载</span></span><br><span class="line">    <span class="attr">error:</span> <span class="string">加载失败，请稍后重试。</span></span><br><span class="line">  <span class="attr">gradient:</span> <span class="comment"># https://webgradients.com/</span></span><br><span class="line">    <span class="attr">start:</span> <span class="string">&#x27;linear-gradient(to right, hsl(215, 95%, 64%), hsl(195, 95%, 60%), hsl(165, 95%, 56%), hsl(165, 95%, 56%), hsl(195 95% 60%), hsl(215, 95%, 64%))&#x27;</span></span><br><span class="line">  <span class="attr">leftbar:</span></span><br><span class="line">    <span class="comment"># 可以设置：纯色/渐变色/图片作为背景</span></span><br><span class="line">    <span class="attr">background-color:</span> <span class="string">var(--card)</span> <span class="comment"># var(--block)</span></span><br><span class="line">    <span class="attr">background-image:</span> <span class="string">url(https://gcore.jsdelivr.net/gh/cdn-x/placeholder@1.0.13/image/sidebar-bg1@small.jpg)</span></span><br><span class="line">    <span class="attr">blur-px:</span> <span class="string">100px</span></span><br><span class="line">    <span class="attr">blur-bg:</span> <span class="string">var(--bg-a60)</span></span><br><span class="line">    <span class="attr">background-opacity:</span> <span class="number">0.8</span></span><br><span class="line">  <span class="attr">paginator:</span></span><br><span class="line">    <span class="attr">prev:</span> <span class="string">https://gcore.jsdelivr.net/gh/cdn-x/placeholder@1.0.12/arrow/f049bbd4e88ec.svg</span></span><br><span class="line">    <span class="attr">next:</span> <span class="string">https://gcore.jsdelivr.net/gh/cdn-x/placeholder@1.0.12/arrow/064b95430caf4.svg</span></span><br><span class="line">  <span class="attr">error_page:</span> <span class="string">https://gcore.jsdelivr.net/gh/cdn-x/placeholder@1.0.12/404/1c830bfcd517d.svg</span></span><br><span class="line">  <span class="attr">site:</span> <span class="comment"># 使用 background-image 后，blur 设置才有效</span></span><br><span class="line">    <span class="comment"># background-image: url(https://gcore.jsdelivr.net/gh/cdn-x/placeholder@1.0.14/image/site-bg1@small.webp)</span></span><br><span class="line">    <span class="attr">blur-px:</span> <span class="string">100px</span></span><br><span class="line">    <span class="attr">blur-bg:</span> <span class="string">var(--bg-a75)</span></span><br><span class="line">    <span class="attr">blur-sat:</span> <span class="number">300</span><span class="string">%</span></span><br><span class="line">  <span class="comment"># 技术文章内页各级标题前面的符号</span></span><br><span class="line">  <span class="attr">header_prefix:</span></span><br><span class="line">    <span class="attr">h2:</span> <span class="string">&#x27;#&#x27;</span></span><br><span class="line">    <span class="attr">h3:</span> <span class="string">&#x27;=&#x27;</span></span><br><span class="line">    <span class="attr">h4:</span> <span class="string">&#x27;|&#x27;</span></span><br><span class="line">    <span class="attr">h5:</span> <span class="string">&#x27;:&#x27;</span></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="attr">default:</span></span><br><span class="line">  <span class="attr">avatar:</span> <span class="string">https://gcore.jsdelivr.net/gh/cdn-x/placeholder@1.0.12/avatar/round/3442075.svg</span></span><br><span class="line">  <span class="attr">link:</span> <span class="string">https://gcore.jsdelivr.net/gh/cdn-x/placeholder@1.0.12/link/8f277b4ee0ecd.svg</span></span><br><span class="line">  <span class="attr">cover:</span> <span class="string">https://gcore.jsdelivr.net/gh/cdn-x/placeholder@1.0.12/cover/76b86c0226ffd.svg</span></span><br><span class="line">  <span class="attr">image:</span> <span class="string">https://gcore.jsdelivr.net/gh/cdn-x/placeholder@1.0.12/image/2659360.svg</span></span><br><span class="line">  <span class="attr">project:</span> <span class="string">https://gcore.jsdelivr.net/gh/cdn-x/placeholder@1.0.12/image/2779789.png</span></span><br><span class="line">  <span class="attr">banner:</span> <span class="string">https://gcore.jsdelivr.net/gh/cdn-x/placeholder@1.0.12/banner/books.jpg</span></span><br><span class="line">  <span class="attr">topic:</span> <span class="string">https://gcore.jsdelivr.net/gh/cdn-x/placeholder@1.0.12/image/10433048.png</span></span><br><span class="line">  <span class="attr">loading:</span> <span class="string">https://api.iconify.design/eos-icons:three-dots-loading.svg?color=%231cd0fd</span></span><br><span class="line">  <span class="comment"># loading: https://github.githubassets.com/images/mona-loading-dark.gif</span></span><br><span class="line">  <span class="attr">image_onerror:</span> <span class="string">&quot;data:image/svg+xml,%3Csvg xmlns=&#x27;http://www.w3.org/2000/svg&#x27; width=&#x27;2rem&#x27; height=&#x27;2rem&#x27; viewBox=&#x27;0 0 24 24&#x27;%3E%3C!-- Icon from Solar by 480 Design - https://creativecommons.org/licenses/by/4.0/ --%3E%3Cpath fill=&#x27;%23F44336&#x27; d=&#x27;M22 12.698c-.002 1.47-.013 2.718-.096 3.743c-.097 1.19-.296 2.184-.74 3.009a4.2 4.2 0 0 1-.73.983c-.833.833-1.893 1.21-3.237 1.39C15.884 22 14.2 22 12.053 22h-.106c-2.148 0-3.83 0-5.144-.177c-1.343-.18-2.404-.557-3.236-1.39c-.738-.738-1.12-1.656-1.322-2.795c-.2-1.12-.236-2.512-.243-4.241Q1.999 12.737 2 12v-.054c0-2.148 0-3.83.177-5.144c.18-1.343.557-2.404 1.39-3.236s1.893-1.21 3.236-1.39c1.168-.157 2.67-.175 4.499-.177a.697.697 0 1 1 0 1.396c-1.855.002-3.234.018-4.313.163c-1.189.16-1.906.464-2.436.994S3.72 5.8 3.56 6.99C3.397 8.2 3.395 9.788 3.395 12v.784l.932-.814a2.14 2.14 0 0 1 2.922.097l3.99 3.99a1.86 1.86 0 0 0 2.385.207l.278-.195a2.79 2.79 0 0 1 3.471.209l2.633 2.37c.265-.557.423-1.288.507-2.32c.079-.972.09-2.152.091-3.63a.698.698 0 0 1 1.396 0&#x27; opacity=&#x27;.5&#x27;/%3E%3Cpath fill=&#x27;%23F44336&#x27; fill-rule=&#x27;evenodd&#x27; d=&#x27;M17.5 11c-2.121 0-3.182 0-3.841-.659S13 8.621 13 6.5s0-3.182.659-3.841S15.379 2 17.5 2s3.182 0 3.841.659S22 4.379 22 6.5s0 3.182-.659 3.841S19.621 11 17.5 11m-1.47-7.03a.75.75 0 1 0-1.06 1.06l1.47 1.47l-1.47 1.47a.75.75 0 0 0 1.06 1.06l1.47-1.47l1.47 1.47a.75.75 0 1 0 1.06-1.06L18.56 6.5l1.47-1.47a.75.75 0 0 0-1.06-1.06L17.5 5.44z&#x27; clip-rule=&#x27;evenodd&#x27;/%3E%3C/svg%3E&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="attr">api_host:</span></span><br><span class="line">  <span class="attr">ghapi:</span> <span class="string">api.github.com</span></span><br><span class="line">  <span class="attr">ghraw:</span> <span class="string">raw.githubusercontent.com</span></span><br><span class="line">  <span class="attr">gist:</span> <span class="string">gist.github.com</span></span><br><span class="line">  <span class="comment"># https://github.com/anuraghazra/github-readme-stats</span></span><br><span class="line">  <span class="attr">ghcard:</span> <span class="string">github-readme-stats.vercel.app</span></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="comment"># 非资深hexo开发者尽量不要动这块</span></span><br><span class="line"><span class="attr">system:</span></span><br><span class="line">  <span class="comment"># hexo 支持输出的链接格式众多，维护成本高，为了减少出错，统一成推荐的格式。</span></span><br><span class="line">  <span class="attr">override_pretty_urls:</span> <span class="literal">true</span></span><br><span class="line"></span><br></pre></td></tr></table></figure></div></details><h2 id="部署服务器程序"><a href="#部署服务器程序" class="headerlink" title="部署服务器程序"></a>部署服务器程序</h2><h3 id="04-安装Artalk评论系统和Lsky兰空图床"><a href="#04-安装Artalk评论系统和Lsky兰空图床" class="headerlink" title="04. 安装Artalk评论系统和Lsky兰空图床"></a>04. 安装Artalk评论系统和Lsky兰空图床</h3><h5 id="4-1-租赁服务器"><a href="#4-1-租赁服务器" class="headerlink" title="4.1 租赁服务器"></a>4.1 租赁服务器</h5><p>这里我推荐<a href="https://81x.pro/">VPS租赁商 | 八壹云计算</a>  </p><blockquote><p>只做推荐，可以自行选择服务商，建议预算足够优先阿里云或者腾讯云一类的大厂  </p></blockquote><p>我们这里介绍无ICP备案计划的建站步骤<br>我们需要配置至少为2C2G的服务器，以供我们搭建所需的项目  </p><blockquote><p>③* 本文默认服务器部署环境为Ubuntu22.04 LTS</p></blockquote><h6 id="4-2-安装FinalShell"><a href="#4-2-安装FinalShell" class="headerlink" title="4.2 安装FinalShell"></a>4.2 安装FinalShell</h6><p><a href="https://www.hostbuf.com/">FinalShell</a> 是一个开源的SSH终端工具，可以轻松管理远程服务器  </p><ul><li>下载：<a href="https://dl.hostbuf.com/finalshell3/finalshell_windows_x64.exe">下载FinalShell</a>  </li><li>安装：无脑下一步即可</li></ul><h5 id="4-3-链接远程服务器"><a href="#4-3-链接远程服务器" class="headerlink" title="4.3 链接远程服务器"></a>4.3 链接远程服务器</h5><p><img src="https://img.xscnet.cn//i/2026/04/03/69cfd6e997a20.png" alt="1"><br>链接类型选择<code>SSH连接(Linux)</code><br>填写服务器的IP地址和端口，用户名和密码，然后点击链接即可  </p><blockquote><p>注意：一些云服务厂商的默认SSH端口可能为随机端口，未声明则为22默认端口  </p></blockquote><p><img src="https://img.xscnet.cn//i/2026/04/03/69cfd7cf078ad.png" alt="2">  </p><h6 id="4-4-安装1Panel"><a href="#4-4-安装1Panel" class="headerlink" title="4.4 安装1Panel"></a>4.4 安装1Panel</h6><blockquote><p>博主喜欢所有程序都放在Docker容器中执行，以保护主机，个人习惯，所以本文使用1Panel  </p></blockquote><ul><li>安装：安装<a href="https://1panel.cn/">1Panel</a></li></ul><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">bash -c <span class="string">&quot;<span class="subst">$(curl -sSL https://resource.fit2cloud.com/1panel/package/v2/quick_start.sh)</span>&quot;</span></span><br></pre></td></tr></table></figure><ul><li>配置：在安装过程中需要手动设置<code>安全入口</code>，<code>用户名</code>，<code>密码(在您输入密码时候不会显示)</code></li></ul><h5 id="4-5-配置Docker"><a href="#4-5-配置Docker" class="headerlink" title="4.5 配置Docker"></a>4.5 配置Docker</h5><p>登录进入1Panel管理面板，依次选择[左侧]容器 -&gt; [上方]配置 -&gt; 全部配置<br>将下方配置复制进代码框内，点击保存即可  </p><figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">  <span class="attr">&quot;registry-mirrors&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">    <span class="string">&quot;https://hub.rat.dev&quot;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="string">&quot;https://docker.1panel.live&quot;</span></span><br><span class="line">  <span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;log-driver&quot;</span><span class="punctuation">:</span> <span class="string">&quot;json-file&quot;</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;log-opts&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;max-size&quot;</span><span class="punctuation">:</span> <span class="string">&quot;10m&quot;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;max-file&quot;</span><span class="punctuation">:</span> <span class="string">&quot;3&quot;</span></span><br><span class="line">  <span class="punctuation">&#125;</span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><h5 id="4-6-安装mariadb数据库"><a href="#4-6-安装mariadb数据库" class="headerlink" title="4.6 安装mariadb数据库"></a>4.6 安装mariadb数据库</h5><p><strong>MariaDB 是由 MySQL 原始创始人发起的分支，旨在完全替代 MySQL，并保持高度兼容。</strong> 它的核心差异在于<strong>更开放、激进的迭代策略</strong>，提供了比 MySQL 更多的<strong>存储引擎</strong>（如列式存储ColumnStore、MyRocks）和<strong>新特性</strong>（如原生向量支持、多源复制）。目前主流 Linux 发行版（如 RHEL、Ubuntu）已默认用 MariaDB 替换了 MySQL。</p><p><strong>关于资源占用与性能，两者各有侧重：</strong> <strong>默认情况下，MariaDB 因启用 Aria 引擎和线程池，内存占用略高于 MySQL。</strong> 但得益于其<strong>线程池</strong>技术，它在处理<strong>高并发</strong>连接时性能下降曲线更平缓，且官方宣称在低并发负载下比 MySQL 快 13%-36%。如果你需要从 MySQL 迁移，通常直接卸载安装即可，但要注意 JSON 字段的存储逻辑和 GTID 复制协议存在不兼容。</p><blockquote><p>以上内容由AI生成，请注意判断  </p></blockquote><ul><li><p>安装MariaDB:<br>登录1Panel管理面板，依次选择[左侧]应用商店 -&gt; [上方]数据库 -&gt; 选择MariaDB -&gt; 点击安装  </p></li><li><p>在安装配置页面：<br>名称等配置保持不变，切记<strong>关闭</strong>端口外部访问，否则可能会有被攻击风险，访问端口默认3306即可<br><img src="https://img.xscnet.cn//i/2026/04/04/69cfe4334a40e.png"></p></li></ul><h5 id="4-7-安装NPM-NginxProxyManager"><a href="#4-7-安装NPM-NginxProxyManager" class="headerlink" title="4.7 安装NPM(NginxProxyManager)"></a>4.7 安装NPM(NginxProxyManager)</h5><p><strong>Nginx Proxy Manager（简称 NPM）是一个开源的、带 Web 可视化管理界面的反向代理工具，本质上是给 Nginx 套上了一层“图形化外壳”。</strong> 它的核心价值在于<strong>彻底告别手动编辑复杂的 Nginx 配置文件</strong>，你只需要在浏览器里填写域名、目标 IP 和端口，它就会自动生成配置。最大的亮点是<strong>内置了 Let’s Encrypt 免费 SSL 证书的申请与自动续期功能</strong>，点几下鼠标就能给网站配上 HTTPS，特别适合不熟悉 Nginx 命令行的开发者、运维小白或需要快速部署多个 Docker 服务的小团队。  </p><p><strong>相比直接操作 Nginx 配置文件，NPM 的优势在于“简单直观”，但代价是“灵活性有所降低”</strong>：一些特别复杂的 Nginx 高级规则可能需要额外通过“Advanced”选项卡手动补充。资源占用方面，因为 NPM 包含 Web 界面、数据库并基于 Docker 运行，<strong>默认内存占用会略高于纯命令行 Nginx</strong>。如果部署后觉得资源消耗偏高，可以通过限制 Worker 进程数量、调整连接数和配置代理缓存等方式进行优化。  </p><blockquote><p>以上内容由AI生成，请注意判断  </p></blockquote><ul><li><p>安装NPM：<br>登录1Panel管理面板，依次选择[左侧]应用商店 -&gt; [上方]Web服务器 -&gt; 选择Nginx Proxy Manager -&gt; 点击安装 </p></li><li><p>在安装配置页面：<br>名称等配置保持不变，<strong>注意：需要修改<code>HTTP端口</code>,<code>控制台端口</code>,<code>HTTPS端口</code>分别为<code>80</code>,<code>81</code>,<code>443</code>,需要<code>开启</code>端口外部访问</strong><br><img src="https://img.xscnet.cn//i/2026/04/04/69cfe43358235.png">  </p></li><li><p>安装完成后：<br>浏览器输入 http:&#x2F;&#x2F;服务器IP:81 进入NPM后台，默认用户名密码 <a href="mailto:&#x61;&#100;&#x6d;&#x69;&#x6e;&#64;&#x65;&#x78;&#97;&#109;&#112;&#108;&#101;&#46;&#x63;&#111;&#x6d;">admin@example.com</a> &#x2F; changeme</p></li></ul><p>进入后会要求你修改用户邮箱与密码，按提示修改即可  </p><h5 id="4-8-安装Lsky图床"><a href="#4-8-安装Lsky图床" class="headerlink" title="4.8 安装Lsky图床"></a>4.8 安装Lsky图床</h5><ul><li><p>安装Lsky:<br>登录1Panel管理面板，依次选择[左侧]应用商店 -&gt; [上方]云存储 -&gt; 选择Lsky-pro -&gt; 点击安装 </p></li><li><p>在安装配置页面：<br>名称等配置保持不变，<strong>需要<code>开启</code>端口外部访问</strong><br><img src="https://img.xscnet.cn//i/2026/04/04/69cfe433468b3.png">  </p></li><li><p>安装完成后：<br>浏览器输入 http:&#x2F;&#x2F;服务器IP:40027 进入Lsky-pro后台  </p><blockquote><p>具体配置细节请查看视频教程</p></blockquote></li></ul><h5 id="4-9-安装Artalk评论系统"><a href="#4-9-安装Artalk评论系统" class="headerlink" title="4.9 安装Artalk评论系统"></a>4.9 安装Artalk评论系统</h5><ul><li><p>安装Artalk:<br>登录1Panel管理面板，依次选择[左侧]应用商店 -&gt; [上方]实用工具 -&gt; 选择Artalk -&gt; 点击安装  </p></li><li><p>在安装界面:<br>需要修改博客名称和博客地址，<strong>需要<code>开启</code>端口外部访问</strong><br><img src="https://img.xscnet.cn//i/2026/04/04/69cfe4331bcf4.png">   </p></li><li><p>安装完成后：<br>浏览器输入 http:&#x2F;&#x2F;服务器IP:23366 进入Artalk后台  </p><blockquote><p>具体配置细节请查看视频教程<br>此处配置极为复杂，强烈建议查看视频教程</p></blockquote></li></ul><h3 id="05-博客配置Artalk和lsky图床"><a href="#05-博客配置Artalk和lsky图床" class="headerlink" title="05. 博客配置Artalk和lsky图床"></a>05. 博客配置Artalk和lsky图床</h3><ol><li>使用VSCode打开<code>_config.stellar.yml</code>文件  </li><li>找到<code>comments</code>字段，找到<code>artalk</code>字段(约在314行左右)，修改如下内容</li></ol><figure class="highlight yml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">artalk:</span></span><br><span class="line">  <span class="attr">css:</span> <span class="string">https://unpkg.com/artalk@2.9/dist/Artalk.css</span></span><br><span class="line">  <span class="attr">js:</span> <span class="string">https://unpkg.com/artalk@2.9/dist/Artalk.js</span></span><br><span class="line">  <span class="attr">server:</span>  <span class="comment"># 后端服务地址</span></span><br><span class="line">  <span class="attr">site:</span> <span class="string">&#x27;&#x27;</span> <span class="comment"># 站点名称（此处为刚才创建应用时候的站点名称）</span></span><br><span class="line">  <span class="attr">darkMode:</span> <span class="string">auto</span> <span class="comment"># 其它模式都有问题，慎用，否则后果自负</span></span><br><span class="line">  <span class="attr">fancybox:</span> <span class="literal">true</span> <span class="comment"># 是否为评论区启用 fancybox</span></span><br><span class="line">  <span class="comment"># artalk 有三类图片：1.上传至服务端 2.上传至服务端后利用upgit上传至图床 3.前端上传至图床（本配置为此类）</span></span><br><span class="line">  <span class="comment"># 配置此项时将覆盖服务端上传能力</span></span><br><span class="line">  <span class="attr">imageUploader:</span></span><br><span class="line">    <span class="comment"># 以兰空图床为例，下列填写内容为：</span></span><br><span class="line">    <span class="attr">api:</span> <span class="string">&#x27;https://xxxxxx/api/v1/upload&#x27;</span> <span class="comment"># 图床上传地址</span></span><br><span class="line">    <span class="attr">token:</span> <span class="string">&#x27;Bearer xxxxxxxxxxxxxx&#x27;</span> <span class="comment"># 图床验证</span></span><br><span class="line">    <span class="attr">resp:</span> <span class="string">&#x27;data.links.url&#x27;</span> <span class="comment"># 图片地址返回值的字段</span></span><br></pre></td></tr></table></figure><h3 id="06-购买属于自己的独立域名"><a href="#06-购买属于自己的独立域名" class="headerlink" title="06. 购买属于自己的独立域名"></a>06. 购买属于自己的独立域名</h3><h4 id="6-1-选择服务商"><a href="#6-1-选择服务商" class="headerlink" title="6.1 选择服务商"></a>6.1 选择服务商</h4><ul><li>1.<a href="https://wanwang.aliyun.com/">阿里云万网</a><br>博主自己用的是阿里云购买的域名，体验还算不错，价格也很实惠，cn后缀域名一年40左右  </li><li>2.<a href="https://cloud.tencent.com/product/domain">腾讯云</a><br>腾讯云的域名注册服务我还没有用过，不过腾讯云和阿里云均为国内大厂，应该体验会相差不大</li></ul><h4 id="6-2-购买CDN服务-可选"><a href="#6-2-购买CDN服务-可选" class="headerlink" title="6.2 购买CDN服务(可选)"></a>6.2 购买CDN服务(可选)</h4><p>Q:CDN是什么？<br>A:CDN就像是为网站内容建立的“全国连锁快递仓库”。它的核心工作，就是把数据提前运送到离用户最近的地方，让用户能以最快速度获取想要的信息  </p><p>这个项目是可选择项目，配置CDN的目的是为了加速静态网站在全球的访问速度<br>因为配置过CDN之后，用户访问的不再是你的源站服务器，而是CDN为用户选择的最近的边缘节点<br>这样还可以减缓你的源站服务器流量压力<br>CDN只需在你的源站更新后重新拉取一次缓存，后续用户访问你的网站都是走的CDN边缘节点缓存，并不是访问你的源站服务器  </p><p>配置CDN后还可防止源站IP泄露问题，降低源站被DDOS的风险<br>具体源站IP泄露问题请查看我<a href="https://www.xscnet.cn/posts/p3420260329/">往期文章 | 博客源站IP泄露的两种主要方式与防护指南</a>  </p><p>博主自己使用的是<a href="https://cloud.tencent.com/product/teo?Is=sdk-topnav">腾讯云的EdgeOne边缘加速服务</a><br>EO提供了免费套餐，对于我们这样的小型静态博客，EdgeOne的免费套餐完全够用了  </p><h4 id="6-3-配置EO-可选"><a href="#6-3-配置EO-可选" class="headerlink" title="6.3 配置EO(可选)"></a>6.3 配置EO(可选)</h4><p>登录<a href="https://console.cloud.tencent.com/edgeone">EO控制台 | Tencent Cloud</a>  </p><p>选择<code>计费管理</code> -&gt; <code>套餐管理</code> -&gt; <code>购买套餐</code><br>如果您没有免费版，可选择购买个人版  </p><p>购买完成后，回到<code>服务总览</code>页面，点击<code>新增站点</code><br>输入您购买的域名，并根据提示进行所有权验证  </p><p>验证完成后，点击域名即可进入配置界面<br>可以依次点击 <code>域名服务</code> -&gt; <code>域名管理</code> -&gt; <code>添加域名</code><br>进行多级域名的代理配置  </p><p>在配置多级域名代理时，<code>回源配置</code>中的<code>源站配置</code>直接填写您的源站服务器IP，不需要填写端口等信息，回源设置80或者443均可(具体需根据您源站NPM的设置进行抉择)<br><strong><code>回源 HOST 头</code>请选择<code>使用加速域名</code></strong><br>模板可以选择<code>网站加速</code>  </p><h4 id="6-4-配置域名解析"><a href="#6-4-配置域名解析" class="headerlink" title="6.4 配置域名解析"></a>6.4 配置域名解析</h4><h5 id="6-4-1-未配置CDN的方法"><a href="#6-4-1-未配置CDN的方法" class="headerlink" title="6.4.1 未配置CDN的方法"></a>6.4.1 未配置CDN的方法</h5><p>这里以阿里云购买的域名为例  </p><ol><li><p>登录<a href="https://console.aliyun.com/">阿里云控制台</a>，依次选择 <code>域名与网站</code> -&gt; <code>云解析DNS</code> -&gt; 选择域名 -&gt; 点击查看 -&gt; 点击添加记录</p></li><li><p>添加记录<br>如果您没有配置CDN服务，则添加的记录类型为<code>A</code>记录，记录值为<code>服务器IP</code>    </p></li><li><p>添加完成后，请等待DNS生效，可能需要等待1～30分钟</p></li></ol><h5 id="6-4-2-配置CDN的方法"><a href="#6-4-2-配置CDN的方法" class="headerlink" title="6.4.2 配置CDN的方法"></a>6.4.2 配置CDN的方法</h5><p>这里以阿里云购买的域名为例  </p><ol><li><p>登录<a href="https://console.aliyun.com/">阿里云控制台</a>，依次选择 <code>域名与网站</code> -&gt; <code>云解析DNS</code> -&gt; 选择域名 -&gt; 点击查看 -&gt; 点击添加记录</p></li><li><p>添加记录<br>如果配置了CDN服务，则添加的记录类型为<code>CNAME</code>记录，记录值为EO提供给您的CNAME记录值  </p></li><li><p>添加完成后，请等待DNS生效，可能需要等待1～30分钟</p></li></ol><h4 id="6-5-配置NginxProxyManager"><a href="#6-5-配置NginxProxyManager" class="headerlink" title="6.5 配置NginxProxyManager"></a>6.5 配置NginxProxyManager</h4><p>使用 http:&#x2F;&#x2F;您的服务器IP:81 进入NginxProxyManager管理后台  </p><p>选择<code>Hosts</code> –&gt; <code>Proxy Hosts</code> –&gt; <code>Add Proxy Host</code><br>在Domain Names中填写您的多级域名 例如<code>blog.example.com</code>  </p><p>选择<code>Advanced</code>并填写如下内容  </p><figure class="highlight nginx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line"><span class="section">location</span> / &#123;</span><br><span class="line">    <span class="comment"># 指向你存放 Hexo 静态文件的绝对路径</span></span><br><span class="line">    <span class="attribute">root</span> /home/blog/dist;</span><br><span class="line">    <span class="attribute">try_files</span> <span class="variable">$uri</span> <span class="variable">$uri</span>/ /index.html;</span><br><span class="line"></span><br><span class="line">    <span class="comment"># 禁止 Nginx 本地缓存，完全由 CDN 控制</span></span><br><span class="line">    <span class="attribute">expires</span> <span class="literal">off</span>;</span><br><span class="line">    <span class="attribute">add_header</span> Cache-Control <span class="string">&quot;no-cache, no-store, must-revalidate&quot;</span>;</span><br><span class="line">    <span class="attribute">add_header</span> Pragma <span class="string">&quot;no-cache&quot;</span>;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="comment"># 关闭 NPM 默认的 log 格式（可选，减少日志噪音）</span></span><br><span class="line"><span class="attribute">access_log</span> <span class="literal">off</span>;</span><br></pre></td></tr></table></figure><p>点击Save即可  </p><p>这样配置好NPM后，EO就可以正常访问到源站内容了  </p><h3 id="07-配置GithubAction自动部署"><a href="#07-配置GithubAction自动部署" class="headerlink" title="07. 配置GithubAction自动部署"></a>07. 配置GithubAction自动部署</h3><p>这里用到了GithubAction的双仓库部署模式<br>1号仓库用来存放博客开发下的源文件<br>因为可能会有Token的问题，所以要设置为私密仓库  </p><p>通过1号仓库Action自动构建静态文件推送到仓库2<br>2号仓库用来存放博客生成的静态文件，并继续通过GithubAction部署到服务器上  </p><h4 id="7-1-注册Github账号"><a href="#7-1-注册Github账号" class="headerlink" title="7.1 注册Github账号"></a>7.1 注册Github账号</h4><h4 id="7-2-创建仓库1-私密"><a href="#7-2-创建仓库1-私密" class="headerlink" title="7.2 创建仓库1(私密)"></a>7.2 创建仓库1(私密)</h4><h5 id="7-2-1-创建仓库1并推送"><a href="#7-2-1-创建仓库1并推送" class="headerlink" title="7.2.1 创建仓库1并推送"></a>7.2.1 创建仓库1并推送</h5><p>创建一个仓库，例如<code>HexoBlog</code><br>这个仓库负责存放博客源文件<br>创建完成后，将仓库设置为私密  </p><p>在本地开发文件夹内右键选择Git，并依次输入  </p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">git init</span><br><span class="line">git add .</span><br><span class="line">git commit -m <span class="string">&quot;init&quot;</span></span><br><span class="line">git remote add origin (这里要设置为Github给你的仓库地址)</span><br><span class="line">git branch -M master</span><br><span class="line">git push -u origin master</span><br></pre></td></tr></table></figure><p>这样整个博客的源文件都会上传到1号仓库中  </p><h5 id="7-2-2-配置仓库1Action"><a href="#7-2-2-配置仓库1Action" class="headerlink" title="7.2.2 配置仓库1Action"></a>7.2.2 配置仓库1Action</h5><ol><li>在本地创建 <code>.github/workflows/deploy.yml</code> 文件，并添加如下内容：</li></ol><figure class="highlight yml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">name:</span> <span class="string">Deploy</span> <span class="string">to</span> <span class="string">GitHub</span> <span class="string">Pages</span></span><br><span class="line"></span><br><span class="line"><span class="attr">on:</span></span><br><span class="line">  <span class="attr">push:</span></span><br><span class="line">    <span class="attr">branches:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">master</span> <span class="comment"># ❗[需要修改] 改成你的默认分支名称（main / master / develop）</span></span><br><span class="line"></span><br><span class="line"><span class="attr">jobs:</span></span><br><span class="line">  <span class="attr">deploy:</span></span><br><span class="line">    <span class="attr">runs-on:</span> <span class="string">ubuntu-latest</span></span><br><span class="line">    <span class="attr">steps:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">Checkout</span> <span class="string">source</span></span><br><span class="line">        <span class="attr">uses:</span> <span class="string">actions/checkout@v3</span></span><br><span class="line"></span><br><span class="line">      <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">Setup</span> <span class="string">Node.js</span></span><br><span class="line">        <span class="attr">uses:</span> <span class="string">actions/setup-node@v3</span></span><br><span class="line">        <span class="attr">with:</span></span><br><span class="line">          <span class="attr">node-version:</span> <span class="string">&#x27;22.14.0&#x27;</span> <span class="comment"># 🔧 [可选修改] 改成你项目需要的 Node.js 版本</span></span><br><span class="line"></span><br><span class="line">      <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">Cache</span> <span class="string">dependencies</span></span><br><span class="line">        <span class="attr">uses:</span> <span class="string">actions/cache@v3</span></span><br><span class="line">        <span class="attr">with:</span></span><br><span class="line">          <span class="attr">path:</span> <span class="string">~/.npm</span></span><br><span class="line">          <span class="attr">key:</span> <span class="string">$&#123;&#123;</span> <span class="string">runner.os</span> <span class="string">&#125;&#125;-node-$&#123;&#123;</span> <span class="string">hashFiles(&#x27;**/package-lock.json&#x27;)</span> <span class="string">&#125;&#125;</span></span><br><span class="line"></span><br><span class="line">      <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">Install</span> <span class="string">dependencies</span></span><br><span class="line">        <span class="attr">run:</span> <span class="string">npm</span> <span class="string">install</span></span><br><span class="line"></span><br><span class="line">      <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">Generate</span> <span class="string">static</span> <span class="string">files</span></span><br><span class="line">        <span class="attr">run:</span> <span class="string">npx</span> <span class="string">hexo</span> <span class="string">generate</span></span><br><span class="line">      </span><br><span class="line">      <span class="comment"># ===== 复制部署脚本到 public 目录 =====</span></span><br><span class="line">      <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">Copy</span> <span class="string">deploy</span> <span class="string">workflow</span> <span class="string">to</span> <span class="string">public</span></span><br><span class="line">        <span class="attr">run:</span> <span class="string">|</span></span><br><span class="line"><span class="string">          echo &quot;📋 复制部署脚本到 public 目录...&quot;</span></span><br><span class="line"><span class="string"></span>          </span><br><span class="line">          <span class="comment"># 检查源文件是否存在</span></span><br><span class="line">          <span class="string">if</span> [ <span class="string">-f</span> <span class="string">&quot;./HexoSite/.github/workflows/deploy-to-server.yml&quot;</span> ]<span class="string">;</span> <span class="string">then</span></span><br><span class="line">            <span class="comment"># 创建目标目录</span></span><br><span class="line">            <span class="string">mkdir</span> <span class="string">-p</span> <span class="string">./public/.github/workflows</span></span><br><span class="line">            </span><br><span class="line">            <span class="comment"># 复制文件</span></span><br><span class="line">            <span class="string">cp</span> <span class="string">./HexoSite/.github/workflows/deploy-to-server.yml</span> <span class="string">./public/.github/workflows/</span></span><br><span class="line">            </span><br><span class="line">            <span class="string">echo</span> <span class="string">&quot;✅ 部署脚本已复制：&quot;</span></span><br><span class="line">            <span class="string">ls</span> <span class="string">-la</span> <span class="string">./public/.github/workflows/</span></span><br><span class="line">          <span class="string">else</span></span><br><span class="line">            <span class="string">echo</span> <span class="string">&quot;⚠️ 警告：未找到部署脚本文件&quot;</span></span><br><span class="line">            <span class="string">echo</span> <span class="string">&quot;   期望路径: ./HexoSite/.github/workflows/deploy-to-server.yml&quot;</span></span><br><span class="line">            <span class="string">exit</span> <span class="number">1</span>  <span class="comment"># 如果文件不存在，让工作流失败</span></span><br><span class="line">          <span class="string">fi</span></span><br><span class="line">      <span class="comment"># ====================================</span></span><br><span class="line"></span><br><span class="line">      <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">Deploy</span> <span class="string">to</span> <span class="string">HexoSite</span></span><br><span class="line">        <span class="attr">uses:</span> <span class="string">peaceiris/actions-gh-pages@v3</span></span><br><span class="line">        <span class="attr">with:</span></span><br><span class="line">          <span class="attr">personal_token:</span> <span class="string">$&#123;&#123;</span> <span class="string">secrets.PERSONAL_TOKEN</span> <span class="string">&#125;&#125;</span></span><br><span class="line">          <span class="attr">publish_dir:</span> <span class="string">./public</span></span><br><span class="line">          <span class="attr">publish_branch:</span> <span class="string">master</span></span><br><span class="line">          <span class="attr">external_repository:</span> <span class="string">username/HexoSite</span> <span class="comment"># ❗ [需要修改] 改成目标仓库（格式：用户名/仓库名）</span></span><br><span class="line">          <span class="attr">user_name:</span> <span class="string">&#x27;github-actions[bot]&#x27;</span></span><br><span class="line">          <span class="attr">user_email:</span> <span class="string">&#x27;github-actions[bot]@users.noreply.github.com&#x27;</span></span><br><span class="line">          <span class="attr">exclude_assets:</span> <span class="string">&#x27;&#x27;</span>  <span class="comment"># 覆盖默认值，不排除任何文件</span></span><br></pre></td></tr></table></figure><p>继续在本地开发文件夹中的CMD窗口执行  </p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">@<span class="built_in">echo</span> off &amp; <span class="built_in">set</span> <span class="string">&quot;START_DIR=%CD%&quot;</span> &amp; <span class="built_in">mkdir</span> <span class="string">&quot;.\HexoSite\.github\workflows&quot;</span> 2&gt;nul &amp; <span class="built_in">cd</span> /d <span class="string">&quot;.\HexoSite\.github\workflows&quot;</span> &amp; powershell -Command <span class="string">&quot;Invoke-WebRequest -Uri &#x27;https://gcore.jsdelivr.net/gh/mete0rxsc/HexoSite@master/.github/workflows/deploy-to-server.yml&#x27; -OutFile &#x27;deploy-to-server.yml&#x27;&quot;</span> &amp; <span class="built_in">cd</span> /d <span class="string">&quot;%START_DIR%&quot;</span></span><br></pre></td></tr></table></figure><p>在HexoBlog(一号仓库)设置密钥<br>选择<code>Settings</code> –&gt; <code>Secrets and variables</code> –&gt; <code>Actions</code><br>在<code>Repository secrets</code>添加密钥<code>PERSONAL_TOKEN</code>，值为Github个人令牌  </p><p>如果您还没有<code>Personal Access Token</code>，请在<a href="https://github.com/settings/tokens">Github | Personal access tokens (classic)</a>中创建  </p><h4 id="7-3-创建仓库2-公开"><a href="#7-3-创建仓库2-公开" class="headerlink" title="7.3 创建仓库2(公开)"></a>7.3 创建仓库2(公开)</h4><p>创建一个仓库，例如<code>HexoSite</code><br>这个仓库负责存放博客生成的静态文件<br>创建完成后，将仓库设置为公开  </p><p>这个仓库的文件是通过仓库1的Action自动生成的，不需要手动添加，但是<strong>请注意：在一号仓库的Action中，请将 external_repository: username&#x2F;HexoSite 改成你自己的仓库名称</strong>  </p><h5 id="7-3-1-配置仓库2Action"><a href="#7-3-1-配置仓库2Action" class="headerlink" title="7.3.1 配置仓库2Action"></a>7.3.1 配置仓库2Action</h5><p>我们刚才执行的CMD文件就是为仓库2的Action下载的，他会通过仓库1自动复制到仓库2中  </p><p>但是我们需要更改<code>.\HexoSite\.github\workflows\deploy-to-server.yml</code>这个文件内的内容(以下展示是密钥登录，密码登录请向下翻)  </p><figure class="highlight yml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">name:</span> <span class="string">Deploy</span> <span class="string">to</span> <span class="string">Aliyun</span> <span class="string">Server</span> <span class="string">and</span> <span class="string">Purge</span> <span class="string">EO</span> <span class="string">Cache</span></span><br><span class="line"></span><br><span class="line"><span class="attr">on:</span></span><br><span class="line">  <span class="attr">push:</span></span><br><span class="line">    <span class="attr">branches:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">master</span> <span class="comment"># ❗[需要修改] 改成你的默认分支名称（main / master / develop）</span></span><br><span class="line"></span><br><span class="line"><span class="attr">jobs:</span></span><br><span class="line">  <span class="attr">deploy:</span></span><br><span class="line">    <span class="attr">runs-on:</span> <span class="string">ubuntu-latest</span></span><br><span class="line"></span><br><span class="line">    <span class="attr">steps:</span></span><br><span class="line">      <span class="comment"># 1. 拉取代码</span></span><br><span class="line">      <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">Checkout</span> <span class="string">repository</span></span><br><span class="line">        <span class="attr">uses:</span> <span class="string">actions/checkout@v3</span></span><br><span class="line"></span><br><span class="line">      <span class="comment"># 2. 添加服务器到 known_hosts</span></span><br><span class="line">      <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">Add</span> <span class="string">server</span> <span class="string">to</span> <span class="string">known_hosts</span></span><br><span class="line">        <span class="attr">run:</span> <span class="string">|</span></span><br><span class="line"><span class="string">          mkdir -p ~/.ssh</span></span><br><span class="line"><span class="string">          ssh-keyscan -H $&#123;&#123; secrets.SERVER_IP &#125;&#125; &gt;&gt; ~/.ssh/known_hosts</span></span><br><span class="line"><span class="string"></span></span><br><span class="line">      <span class="comment"># 3. 准备本地文件</span></span><br><span class="line">      <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">Prepare</span> <span class="string">files</span> <span class="string">locally</span></span><br><span class="line">        <span class="attr">run:</span> <span class="string">|</span></span><br><span class="line"><span class="string">          mkdir -p ./deploy_dist</span></span><br><span class="line"><span class="string">          rsync -av --exclude=&#x27;.git&#x27; --exclude=&#x27;.github&#x27; --exclude=&#x27;deploy_dist&#x27; ./ ./deploy_dist/</span></span><br><span class="line"><span class="string">          echo &quot;✅ 文件已准备到 ./deploy_dist 目录：&quot;</span></span><br><span class="line"><span class="string">          ls -la ./deploy_dist/</span></span><br><span class="line"><span class="string"></span></span><br><span class="line">      <span class="comment"># 4. 清理远程目录</span></span><br><span class="line">      <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">Clean</span> <span class="string">remote</span> <span class="string">directory</span></span><br><span class="line">        <span class="attr">uses:</span> <span class="string">appleboy/ssh-action@v0.1.5</span></span><br><span class="line">        <span class="attr">with:</span></span><br><span class="line">          <span class="attr">host:</span> <span class="string">$&#123;&#123;</span> <span class="string">secrets.SERVER_IP</span> <span class="string">&#125;&#125;</span></span><br><span class="line">          <span class="attr">username:</span> <span class="string">$&#123;&#123;</span> <span class="string">secrets.SERVER_USER</span> <span class="string">&#125;&#125;</span></span><br><span class="line">          <span class="attr">key:</span> <span class="string">$&#123;&#123;</span> <span class="string">secrets.SERVER_SSH_KEY</span> <span class="string">&#125;&#125;</span></span><br><span class="line">          <span class="attr">script:</span> <span class="string">|</span></span><br><span class="line"><span class="string">            mkdir -p /home/blog</span></span><br><span class="line"><span class="string">            rm -rf /home/blog/dist</span></span><br><span class="line"><span class="string">            mkdir -p /home/blog/dist</span></span><br><span class="line"><span class="string">            echo &quot;✅ /home/blog/dist 已清空重建&quot;</span></span><br><span class="line"><span class="string"></span></span><br><span class="line">      <span class="comment"># 5. 部署到服务器</span></span><br><span class="line">      <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">Deploy</span> <span class="string">to</span> <span class="string">server</span></span><br><span class="line">        <span class="attr">uses:</span> <span class="string">appleboy/scp-action@v0.1.4</span></span><br><span class="line">        <span class="attr">with:</span></span><br><span class="line">          <span class="attr">host:</span> <span class="string">$&#123;&#123;</span> <span class="string">secrets.SERVER_IP</span> <span class="string">&#125;&#125;</span></span><br><span class="line">          <span class="attr">username:</span> <span class="string">$&#123;&#123;</span> <span class="string">secrets.SERVER_USER</span> <span class="string">&#125;&#125;</span></span><br><span class="line">          <span class="attr">key:</span> <span class="string">$&#123;&#123;</span> <span class="string">secrets.SERVER_SSH_KEY</span> <span class="string">&#125;&#125;</span></span><br><span class="line">          <span class="attr">source:</span> <span class="string">&quot;./deploy_dist/*&quot;</span></span><br><span class="line">          <span class="attr">target:</span> <span class="string">&quot;/home/blog/dist&quot;</span></span><br><span class="line">          <span class="attr">strip_components:</span> <span class="number">1</span></span><br><span class="line">          <span class="attr">rm:</span> <span class="literal">false</span></span><br><span class="line"></span><br><span class="line">      <span class="comment"># 6. 刷新腾讯云 EdgeOne 缓存（使用官方 CLI）</span></span><br><span class="line">      <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">Install</span> <span class="string">Tencent</span> <span class="string">Cloud</span> <span class="string">CLI</span></span><br><span class="line">        <span class="attr">run:</span> <span class="string">pip</span> <span class="string">install</span> <span class="string">tccli</span></span><br><span class="line"></span><br><span class="line">      <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">Configure</span> <span class="string">and</span> <span class="string">Purge</span> <span class="string">EdgeOne</span> <span class="string">Cache</span></span><br><span class="line">        <span class="attr">env:</span></span><br><span class="line">          <span class="attr">TENCENTCLOUD_SECRET_ID:</span> <span class="string">$&#123;&#123;</span> <span class="string">secrets.EO_SECRET_ID</span> <span class="string">&#125;&#125;</span></span><br><span class="line">          <span class="attr">TENCENTCLOUD_SECRET_KEY:</span> <span class="string">$&#123;&#123;</span> <span class="string">secrets.EO_SECRET_KEY</span> <span class="string">&#125;&#125;</span></span><br><span class="line">        <span class="attr">run:</span> <span class="string">|</span></span><br><span class="line"><span class="string">          tccli configure set secretId $TENCENTCLOUD_SECRET_ID</span></span><br><span class="line"><span class="string">          tccli configure set secretKey $TENCENTCLOUD_SECRET_KEY</span></span><br><span class="line"><span class="string">          tccli configure set region ap-guangzhou</span></span><br><span class="line"><span class="string">          tccli teo CreatePurgeTask \</span></span><br><span class="line"><span class="string">            --ZoneId $&#123;&#123; secrets.EO_ZONE_ID &#125;&#125; \</span></span><br><span class="line"><span class="string">            --Type purge_prefix \</span></span><br><span class="line"><span class="string">            --Method invalidate \</span></span><br><span class="line"><span class="string">            --Targets &#x27;[&quot;$&#123;&#123; secrets.EO_DOMAIN &#125;&#125;&quot;]&#x27;</span></span><br></pre></td></tr></table></figure><p>密码版本：  </p><figure class="highlight yml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">name:</span> <span class="string">Deploy</span> <span class="string">to</span> <span class="string">Aliyun</span> <span class="string">Server</span> <span class="string">and</span> <span class="string">Purge</span> <span class="string">EO</span> <span class="string">Cache</span></span><br><span class="line"></span><br><span class="line"><span class="attr">on:</span></span><br><span class="line">  <span class="attr">push:</span></span><br><span class="line">    <span class="attr">branches:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">master</span>  <span class="comment"># ❗[需要修改] 改成你的默认分支名称（main / master / develop）</span></span><br><span class="line"></span><br><span class="line"><span class="attr">jobs:</span></span><br><span class="line">  <span class="attr">deploy:</span></span><br><span class="line">    <span class="attr">runs-on:</span> <span class="string">ubuntu-latest</span></span><br><span class="line"></span><br><span class="line">    <span class="attr">steps:</span></span><br><span class="line">      <span class="comment"># 1. 拉取代码</span></span><br><span class="line">      <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">Checkout</span> <span class="string">repository</span></span><br><span class="line">        <span class="attr">uses:</span> <span class="string">actions/checkout@v3</span></span><br><span class="line"></span><br><span class="line">      <span class="comment"># 2. 添加服务器到 known_hosts</span></span><br><span class="line">      <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">Add</span> <span class="string">server</span> <span class="string">to</span> <span class="string">known_hosts</span></span><br><span class="line">        <span class="attr">run:</span> <span class="string">|</span></span><br><span class="line"><span class="string">          mkdir -p ~/.ssh</span></span><br><span class="line"><span class="string">          ssh-keyscan -H $&#123;&#123; secrets.SERVER_IP &#125;&#125; &gt;&gt; ~/.ssh/known_hosts</span></span><br><span class="line"><span class="string"></span></span><br><span class="line">      <span class="comment"># 3. 准备本地文件</span></span><br><span class="line">      <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">Prepare</span> <span class="string">files</span> <span class="string">locally</span></span><br><span class="line">        <span class="attr">run:</span> <span class="string">|</span></span><br><span class="line"><span class="string">          mkdir -p ./deploy_dist</span></span><br><span class="line"><span class="string">          rsync -av --exclude=&#x27;.git&#x27; --exclude=&#x27;.github&#x27; --exclude=&#x27;deploy_dist&#x27; ./ ./deploy_dist/</span></span><br><span class="line"><span class="string">          echo &quot;✅ 文件已准备到 ./deploy_dist 目录：&quot;</span></span><br><span class="line"><span class="string">          ls -la ./deploy_dist/</span></span><br><span class="line"><span class="string"></span></span><br><span class="line">      <span class="comment"># 4. 清理远程目录（密码登录版）</span></span><br><span class="line">      <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">Clean</span> <span class="string">remote</span> <span class="string">directory</span></span><br><span class="line">        <span class="attr">uses:</span> <span class="string">appleboy/ssh-action@v0.1.5</span></span><br><span class="line">        <span class="attr">with:</span></span><br><span class="line">          <span class="attr">host:</span> <span class="string">$&#123;&#123;</span> <span class="string">secrets.SERVER_IP</span> <span class="string">&#125;&#125;</span></span><br><span class="line">          <span class="attr">username:</span> <span class="string">$&#123;&#123;</span> <span class="string">secrets.SERVER_USER</span> <span class="string">&#125;&#125;</span></span><br><span class="line">          <span class="attr">password:</span> <span class="string">$&#123;&#123;</span> <span class="string">secrets.SERVER_PASSWORD</span> <span class="string">&#125;&#125;</span>  <span class="comment"># 🔧 密码登录</span></span><br><span class="line">          <span class="attr">script:</span> <span class="string">|</span></span><br><span class="line"><span class="string">            mkdir -p /home/blog</span></span><br><span class="line"><span class="string">            rm -rf /home/blog/dist</span></span><br><span class="line"><span class="string">            mkdir -p /home/blog/dist</span></span><br><span class="line"><span class="string">            echo &quot;✅ /home/blog/dist 已清空重建&quot;</span></span><br><span class="line"><span class="string"></span></span><br><span class="line">      <span class="comment"># 5. 部署到服务器（密码登录版）</span></span><br><span class="line">      <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">Deploy</span> <span class="string">to</span> <span class="string">server</span></span><br><span class="line">        <span class="attr">uses:</span> <span class="string">appleboy/scp-action@v0.1.4</span></span><br><span class="line">        <span class="attr">with:</span></span><br><span class="line">          <span class="attr">host:</span> <span class="string">$&#123;&#123;</span> <span class="string">secrets.SERVER_IP</span> <span class="string">&#125;&#125;</span></span><br><span class="line">          <span class="attr">username:</span> <span class="string">$&#123;&#123;</span> <span class="string">secrets.SERVER_USER</span> <span class="string">&#125;&#125;</span></span><br><span class="line">          <span class="attr">password:</span> <span class="string">$&#123;&#123;</span> <span class="string">secrets.SERVER_PASSWORD</span> <span class="string">&#125;&#125;</span>  <span class="comment"># 🔧 密码登录</span></span><br><span class="line">          <span class="attr">source:</span> <span class="string">&quot;./deploy_dist/*&quot;</span></span><br><span class="line">          <span class="attr">target:</span> <span class="string">&quot;/home/blog/dist&quot;</span></span><br><span class="line">          <span class="attr">strip_components:</span> <span class="number">1</span></span><br><span class="line">          <span class="attr">rm:</span> <span class="literal">false</span></span><br><span class="line"></span><br><span class="line">      <span class="comment"># 6. 刷新腾讯云 EdgeOne 缓存（使用官方 CLI）</span></span><br><span class="line">      <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">Install</span> <span class="string">Tencent</span> <span class="string">Cloud</span> <span class="string">CLI</span></span><br><span class="line">        <span class="attr">run:</span> <span class="string">pip</span> <span class="string">install</span> <span class="string">tccli</span></span><br><span class="line"></span><br><span class="line">      <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">Configure</span> <span class="string">and</span> <span class="string">Purge</span> <span class="string">EdgeOne</span> <span class="string">Cache</span></span><br><span class="line">        <span class="attr">env:</span></span><br><span class="line">          <span class="attr">TENCENTCLOUD_SECRET_ID:</span> <span class="string">$&#123;&#123;</span> <span class="string">secrets.EO_SECRET_ID</span> <span class="string">&#125;&#125;</span></span><br><span class="line">          <span class="attr">TENCENTCLOUD_SECRET_KEY:</span> <span class="string">$&#123;&#123;</span> <span class="string">secrets.EO_SECRET_KEY</span> <span class="string">&#125;&#125;</span></span><br><span class="line">        <span class="attr">run:</span> <span class="string">|</span></span><br><span class="line"><span class="string">          tccli configure set secretId $TENCENTCLOUD_SECRET_ID</span></span><br><span class="line"><span class="string">          tccli configure set secretKey $TENCENTCLOUD_SECRET_KEY</span></span><br><span class="line"><span class="string">          tccli configure set region ap-guangzhou</span></span><br><span class="line"><span class="string">          tccli teo CreatePurgeTask \</span></span><br><span class="line"><span class="string">            --ZoneId $&#123;&#123; secrets.EO_ZONE_ID &#125;&#125; \</span></span><br><span class="line"><span class="string">            --Type purge_prefix \</span></span><br><span class="line"><span class="string">            --Method invalidate \</span></span><br><span class="line"><span class="string">            --Targets &#x27;[&quot;$&#123;&#123; secrets.EO_DOMAIN &#125;&#125;&quot;]&#x27;</span></span><br></pre></td></tr></table></figure><h5 id="7-3-2-配置仓库2的Action变量"><a href="#7-3-2-配置仓库2的Action变量" class="headerlink" title="7.3.2 配置仓库2的Action变量"></a>7.3.2 配置仓库2的Action变量</h5><ul><li>🔧 配置指南<br>使用本 Action 前，你需要在 GitHub 仓库中配置以下 Secrets 和 Variables<br>必需的 Secrets</li></ul><table><thead><tr><th align="left">Secret 名称</th><th align="left">说明</th><th align="left">如何获取</th></tr></thead><tbody><tr><td align="left"><code>SERVER_IP</code></td><td align="left">你的阿里云服务器的公网 IP 地址</td><td align="left">登录阿里云控制台 → 云服务器 ECS → 实例 → 查看公网 IP</td></tr><tr><td align="left"><code>SERVER_USER</code></td><td align="left">SSH 登录用户名</td><td align="left">通常是 <code>root</code>（Ubuntu&#x2F;CentOS 默认）或 <code>ubuntu</code>（Ubuntu 镜像默认）</td></tr><tr><td align="left"><code>SERVER_SSH_KEY</code></td><td align="left">SSH 私钥内容（完整内容，包括 <code>-----BEGIN OPENSSH PRIVATE KEY-----</code>）</td><td align="left">本地执行 <code>cat ~/.ssh/id_rsa</code> 复制全部内容；若没有，执行 <code>ssh-keygen -t rsa -b 4096</code> 生成，并将公钥 <code>id_rsa.pub</code> 添加到服务器的 <code>~/.ssh/authorized_keys</code></td></tr><tr><td align="left"><code>EO_SECRET_ID</code></td><td align="left">腾讯云 API 密钥 ID</td><td align="left">登录腾讯云控制台 → 访问管理 → API 密钥管理 → 新建密钥或查看现有密钥</td></tr><tr><td align="left"><code>EO_SECRET_KEY</code></td><td align="left">腾讯云 API 密钥 Key</td><td align="left">同上，与 Secret ID 成对出现</td></tr><tr><td align="left"><code>EO_ZONE_ID</code></td><td align="left">EdgeOne 站点的 Zone ID</td><td align="left">登录腾讯云 EdgeOne 控制台 → 站点列表 → 点击你的域名 → 在概览页面找到“Zone ID”</td></tr><tr><td align="left"><code>EO_DOMAIN</code></td><td align="left">需要刷新缓存的域名（带 <code>https://</code>）</td><td align="left">你的网站域名，例如 <code>https://www.example.com</code></td></tr></tbody></table><ul><li>配置步骤</li></ul><ol><li><p>进入你的 GitHub 仓库 → <strong>Settings</strong> → <strong>Secrets and variables</strong> → <strong>Actions</strong>  </p></li><li><p>点击 <strong>New repository secret</strong>，依次添加上述表格中的所有 Secrets：  </p><table><thead><tr><th align="left">Name</th><th align="left">Secret</th></tr></thead><tbody><tr><td align="left"><code>SERVER_IP</code></td><td align="left"><code>123.456.789.0</code></td></tr><tr><td align="left"><code>SERVER_USER</code></td><td align="left"><code>root</code></td></tr><tr><td align="left"><code>SERVER_SSH_KEY</code></td><td align="left"><code>-----BEGIN OPENSSH PRIVATE KEY-----\n...</code></td></tr><tr><td align="left">…</td><td align="left">…</td></tr></tbody></table></li><li><p>确保你的服务器已允许 SSH 密钥登录，并将公钥添加到 <code>~/.ssh/authorized_keys</code></p></li></ol><ul><li>验证配置<br>配置完成后，推送一次代码到 <code>master</code> 分支，在 GitHub 仓库的 <strong>Actions</strong> 标签页查看运行日志，确认所有步骤均为绿色 ✅</li></ul><h3 id="08-懒人部署"><a href="#08-懒人部署" class="headerlink" title="08. 懒人部署"></a>08. 懒人部署</h3><p>在你的开发文件夹中执行  </p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">powershell -Command <span class="string">&quot;Invoke-WebRequest -Uri &#x27;https://github.com/mete0rxsc/Mete0r-Tree-Hole/raw/refs/heads/master/01.%20%E5%8D%9A%E5%AE%A2%E7%B1%BB/%E6%95%99%E5%AD%A6/%E9%83%A8%E7%BD%B2.cmd&#x27; -OutFile &#x27;部署.cmd&#x27;&quot;</span></span><br></pre></td></tr></table></figure><p>运行 <code>部署.cmd</code><br>就可以自动推送到仓库1了  </p><h3 id="09-添加友链页面"><a href="#09-添加友链页面" class="headerlink" title="09. 添加友链页面"></a>09. 添加友链页面</h3><p><strong>建议同步查看<a href="https://xaoxuu.com/wiki/stellar/tag-plugins/data/#friends-%E5%8F%8B%E9%93%BE">原作者xaoxuu对于友链的解释页面</a></strong>  </p><ol><li>创建 <code>.\source\links\index.md</code> 文件，并添加如下内容：</li></ol><figure class="highlight md"><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></pre></td><td class="code"><pre><span class="line">---</span><br><span class="line">title: 我的小伙伴们</span><br><span class="line">date: 2077/12/30</span><br><span class="line">update: 2077/12/30</span><br><span class="line">keywords: 链接</span><br><span class="line"><span class="section">description: 小伙伴们</span></span><br><span class="line"><span class="section">---</span></span><br><span class="line"></span><br><span class="line">可以一起交换友链！  </span><br><span class="line">想交好多好多的博友们！  </span><br><span class="line"></span><br><span class="line">&#123;% friends posts:true api:你需要修改为你的API地址 %&#125;</span><br><span class="line"></span><br><span class="line"><span class="strong">**申请前须知**</span></span><br><span class="line"></span><br><span class="line"><span class="bullet">-</span> 本站友链均为动态友链，页面加载后通过请求接口渲染出友链数据。</span><br><span class="line"><span class="bullet">-</span> 本站友链按最新一篇文章发布时间倒序排序，越活跃的博主就越靠前。</span><br><span class="line"><span class="bullet">-</span> 没有 feed 链接的可能会排在最后。</span><br><span class="line"><span class="bullet">-</span> 本站仅定期解析 feed 地址，不会爬取其它地址。</span><br><span class="line"></span><br><span class="line"><span class="strong">**自助友链申请流程**</span></span><br><span class="line"></span><br><span class="line"><span class="bullet">1.</span> 确保符合<span class="strong">**安全合规**</span>的硬性条件，且不会对本站进行高频爬取。</span><br><span class="line"><span class="bullet">2.</span> 提交友链意向申请，如实填写。（此时不必提前添加本站为友链）</span><br><span class="line"><span class="bullet">3.</span> 完成友链任务，未完成的不要随意勾选。（如果迟迟没有通过审核，请检查 issue 中列出的任务是否完成。）</span><br><span class="line"><span class="bullet">4.</span> 博主审核通过，此时请及时添加本站友链。</span><br><span class="line"></span><br><span class="line"><span class="strong">**提交完成后可以到此板块下方留言，这样可以有助于您提交的友链接更快的通过审核**</span>  </span><br><span class="line"></span><br><span class="line"></span><br><span class="line">&gt;我的友链:  </span><br><span class="line"><span class="bullet">-</span>   &quot;url&quot;: &quot;&quot;,  </span><br><span class="line"><span class="code">    &quot;avatar&quot;: &quot;&quot;,  </span></span><br><span class="line"><span class="code">    &quot;title&quot;: &quot;&quot;,    </span></span><br><span class="line"><span class="code">    &quot;description&quot;: &quot;&quot;,  </span></span><br><span class="line"><span class="code">    &quot;snapshot&quot;: &quot;&quot;  </span></span><br><span class="line"><span class="code">    &quot;feed&quot;: &quot;&quot;   </span></span><br><span class="line"><span class="code"></span></span><br><span class="line">如果我的网站有什么不好的地方，还请您多多担待，指出我的错误我会及时修改的~  </span><br><span class="line">填写你的友链信息，我审核通过后会在网站展示你的友链~  </span><br></pre></td></tr></table></figure><ol start="2"><li><p>搭建API服务<br>进入作者的仓库: <a href="https://github.com/xaoxuu/friends">xaoxuu&#x2F;friends</a><br>点击Fork按钮，创建自己的仓库 ,记得打开 github action 的运行权限  </p></li><li><p>修改<code>index.md</code>中的API地址为Github仓库OutPut分支的地址</p></li></ol><h2 id="结语"><a href="#结语" class="headerlink" title="结语"></a>结语</h2><p>这篇文章写作的初衷，是方便更多的新人朋友加入到我们博客圈大家庭<br>让大家相信，在各大平台兴起、信息愈发碎片化的当下，这个看似渐渐淡出人们视野的圈子里，依然有许多人在默默为爱发电<br>用 Hexo 搭建起一方属于自己的小天地，从来都不是一件复杂又遥远的事<br>它无关流量与热度，不必迎合算法与潮流，只是安安静静记录思考、分享热爱、留存时光<br>愿每一位愿意提笔、愿意搭建、愿意坚守的朋友，都能在这里找到同频的伙伴，让文字有归处，让热爱有回响<br>也期待越来越多新鲜的面孔加入进来，一起守护这份纯粹与真诚，让小小的博客世界，永远温暖、永远鲜活  、</p>]]>
    </content>
    <id>https://www.xscnet.cn/posts/p3520260403/</id>
    <link href="https://www.xscnet.cn/posts/p3520260403/"/>
    <published>2026-04-02T16:00:00.000Z</published>
    <summary>本文为新手保姆级 Hexo 博客搭建教程，详细记录 NodeJS、Git、Hexo 框架的安装，Stellar 主题配置，以及 Artalk 评论、Lsky 图床部署和友链页面搭建，助力新手快速上手，加入博客圈，用文字留存热爱。</summary>
    <title>使用Hexo搭建自己的博客</title>
    <updated>2026-04-03T16:05:00.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>Mete0r</name>
    </author>
    <category term="服务器" scheme="https://www.xscnet.cn/categories/%E6%9C%8D%E5%8A%A1%E5%99%A8/"/>
    <category term="博客" scheme="https://www.xscnet.cn/tags/%E5%8D%9A%E5%AE%A2/"/>
    <category term="教学" scheme="https://www.xscnet.cn/tags/%E6%95%99%E5%AD%A6/"/>
    <category term="服务器" scheme="https://www.xscnet.cn/tags/%E6%9C%8D%E5%8A%A1%E5%99%A8/"/>
    <content>
      <![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>最近 <strong><a href="https://koxiuqiu.cn/">klcdm老哥</a></strong> 提醒我，提醒道我的服务器IP会因为以前的邮件推送方式泄露<br>我一查，果然如此<br><a href="https://koxiuqiu.cn/posts/a8migration/">kl的往期文章</a>也提到过此事  </p><h2 id="泄露原因"><a href="#泄露原因" class="headerlink" title="泄露原因"></a>泄露原因</h2><h3 id="1-邮件推送"><a href="#1-邮件推送" class="headerlink" title="1. 邮件推送"></a>1. 邮件推送</h3><p>如果您的博客使用的是QQ邮箱或者163邮箱诸如此类的邮箱则会遇到这种情况  </p><blockquote><p><strong>Q: 哪些SMTP服务会导致IP泄露？</strong><br>A: 答案是：几乎所有允许你直接使用“客户端&#x2F;服务器”方式连接的SMTP服务，都有可能泄露</p></blockquote><h4 id="QQ邮箱SMTP发信泄露源站IP的原理"><a href="#QQ邮箱SMTP发信泄露源站IP的原理" class="headerlink" title="QQ邮箱SMTP发信泄露源站IP的原理"></a>QQ邮箱SMTP发信泄露源站IP的原理</h4><p>这种情况常见于你的博客网站使用了邮件功能（如注册验证、密码找回、通知邮件），并且邮件是通过源站服务器直接使用SMTP发送的  </p><ul><li><p>1 .背景知识  </p><p>很多网站会配置邮件服务，使用第三方邮箱（如QQ邮箱、163邮箱、企业邮箱）的SMTP服务器来代发邮件<br>邮件原文中，通常包含发件服务器的IP信息，这是SMTP协议的一部分  </p></li><li><p>2 .泄露原理  </p><p>当网站源站服务器通过SMTP协议连接QQ邮箱的发信服务器时，QQ邮箱会在邮件的原始头部（Email Header）中记录下连接来源的IP地址，即网站源站服务器的公网IP<br>这个信息通常位于 Received: from 字段中<br>我的博客在原来的方案中也是这么泄露了源站IP：<br><strong>当然，如果您以前与我进行互访，于此知道了我的源站IP，请您务必不要泄露，谢谢您的配合</strong><br><img src="https://img.xscnet.cn//i/2026/03/29/69c8c0ba76723.png"><br>您可以这么查看：点击邮件，然后选择查看，查看邮件源<br><img src="https://img.xscnet.cn//i/2026/03/29/69c8bf81b1f78.png">  </p><p>攻击者只需要：<br>注册一个网站账号，触发一封邮件（如验证邮件）发送到自己的邮箱<br>查看邮件的原文&#x2F;源代码（不同邮箱客户端叫法不同，如Outlook的“查看邮件源”）<br>在邮件头部找到 Received 字段，其中就可能包含网站真实的源站IP  </p></li><li><p>3 .常见成因<br>网站没有使用专业的邮件发送服务（如SendCloud、阿里云邮件推送等），而是直接使用普通的SMTP邮箱代发<br>更重要的是，发信操作是在源站服务器上直接进行的，而不是通过CDN或专门的中继服务器  </p></li><li><p>4 .普遍存在的漏洞:<br>源站IP的泄露关键在于：泄露源站IP的并不是邮箱服务商本身，而是你“从哪里”连上它的SMTP服务器发信  </p><p>所有自建邮件服务器：如果你在自己的源站服务器上搭建了邮件服务，然后直接用这台服务器发信，那么邮件的Received头里必定包含你服务器的IP –这是最直接的泄露方式  </p><p>使用第三方SMTP中继服务：当你配置邮件客户端（如Outlook、Foxmail）或代码，填写了第三方SMTP服务器信息（如mail.xxxx.com），但连接的IP是你服务器的IP时，依然会泄露</p></li></ul><h5 id="SMTP泄露源站IP的解决方案"><a href="#SMTP泄露源站IP的解决方案" class="headerlink" title="SMTP泄露源站IP的解决方案"></a>SMTP泄露源站IP的解决方案</h5><p>我自己的解决方案目前是使用<a href="https://dm.console.aliyun.com/#/directmail/Home/cn-hangzhou">阿里云邮件推送服务</a>的免费额度<br>他是信誉分机制，具体统计规则如下(资料来源：<a href="https://help.aliyun.com/zh/direct-mail/getting-started/product-rules/?spm=5176.2020520150.console-base_help.dexternal.51427528rDmRop">阿里云邮件推送服务产品规则</a>)：<br>每个阿里云账户开通登录后，不同的阿里云账户会根据在阿里云整体等级分配不同的初始值，最低初始信誉等级为2级，对应日额度为 2000 封&#x2F;日。信誉等级最高是16级，对应日额度为 1000 万封&#x2F;日<br><img src="https://img.xscnet.cn//i/2026/03/29/69c8c185a29ed.png"><br>信誉等级与日额度的对应关系如下：  </p><table><thead><tr><th>信誉等级</th><th>日额度（封）</th></tr></thead><tbody><tr><td>1级</td><td>500</td></tr><tr><td>2级</td><td>2,000</td></tr><tr><td>3级</td><td>5,000</td></tr><tr><td>4级</td><td>8,000</td></tr><tr><td>5级</td><td>10,000</td></tr><tr><td>6级</td><td>20,000</td></tr><tr><td>7级</td><td>50,000</td></tr><tr><td>8级</td><td>100,000</td></tr><tr><td>9级</td><td>200,000</td></tr><tr><td>10级</td><td>500,000</td></tr><tr><td>11级</td><td>800,000</td></tr><tr><td>12级</td><td>1,000,000</td></tr><tr><td>13级</td><td>2,000,000</td></tr><tr><td>14级</td><td>5,000,000</td></tr><tr><td>15级</td><td>8,000,000</td></tr><tr><td>16级</td><td>10,000,000</td></tr></tbody></table><p>那么对于我们自己的博客，这个额度已经足够使用了</p><p>而通过这样配置的SMTP服务，并不会显示你服务器源站IP，而是显示阿里云邮件推送服务器的IP<br>但这种方式有一个明显的弊端：邮件推送服务通常使用共享IP节点。一旦同一IP下有其他用户发送恶意邮件，该IP便可能被各大邮箱服务商列入黑名单，从而影响正常邮件的送达率<br>但这样，优点却显而易见  </p><ol><li>邮件发送服务不会泄露源站IP  </li><li>邮件使用的是你自己的域名，较为有辨识度</li></ol><h3 id="2-证书泄露源站IP"><a href="#2-证书泄露源站IP" class="headerlink" title="2. 证书泄露源站IP"></a>2. 证书泄露源站IP</h3><p>当你为网站配置HTTPS时，会用到一份TLS&#x2F;SSL证书<br>这份证书里，有一个字段叫 <code>“使用者备用名称”</code> ，里面清清楚楚地写着你的网站域名，有时甚至直接包含了服务器的IP地址或内网域<br>当扫描者通过IP访问拿到了你的证书，会根据域名与你的IP相比对，一旦某个IP在443端口返回了与你网站相同的证书信息，基本可以确定这就是源站IP  </p><h4 id="证书泄露源站IP的原理"><a href="#证书泄露源站IP的原理" class="headerlink" title="证书泄露源站IP的原理"></a>证书泄露源站IP的原理</h4><p>这种情况主要发生在使用HTTPS且配置了CDN的网站上  </p><p>-1 .背景知识<br>  网站为了安全、加速，通常会套用CDN（如Cloudflare、腾讯云EO等）<br>  用户访问时，DNS解析到CDN节点，CDN节点再将请求转发给源站服务器<br>  理想情况下，所有流量都经过CDN，源站IP不对外暴露  </p><ul><li>2 .泄露原理<br>在HTTPS中，TLS&#x2F;SSL证书通常绑定在域名上<br>如果源站服务器本身也开启了HTTPS（80&#x2F;443端口），并且直接绑定了该域名的证书，那么当有人绕过CDN，直接向源站IP发起HTTPS请求时，源站会返回该证书<br>攻击者可以通过全网扫描，寻找返回该域名证书的IP。一旦某个IP在443端口返回了与你网站相同的证书信息，基本可以确定这就是源站IP<br><strong>这里提及一个很恶心人的网站：<a href="https://www.shodan.io/">shodan.io</a>在这个网站里，他会不间断的扫描所有IP段，寻找你服务器的漏洞，您可以这样尝试 <a href="https://www.shodan.io/host/%E4%BD%A0%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%9A%84IP%E5%9C%B0%E5%9D%80">https://www.shodan.io/host/你服务器的IP地址</a></strong></li></ul><p>-3 .常见成因<br>  在您为你的网站配置CDN时，没有关闭源站的Web服务（Nginx、Apache等）<br>  或者因为“只允许CDN回源IP访问”的防火墙规则配置不完善，导致源站80&#x2F;443端口对公网开放  </p><h5 id="证书泄露源站IP的解决方案"><a href="#证书泄露源站IP的解决方案" class="headerlink" title="证书泄露源站IP的解决方案"></a>证书泄露源站IP的解决方案</h5><ol><li><p>关闭源站80&#x2F;443端口对公网开放<br>这是最简单直接的方法，因为关闭了这些端口，你只需要配置CDN回源的端口即可，但大多数攻击者并不会费尽心思扫描你所有的端口  </p></li><li><p>为default_site设置一个假的证书<br>这种情况使用在您无法关闭源站的443端口，或者CDN回源的端口被限制时<br>您可以创建一个假的证书，自签10年即可，名字可以取：CNMSB扫描器Gun一边去.crt<br>这样当访问者不携带域名信息访问您的IP时，返回的只是defalut_site的假证书，而不是您博客的证书</p></li></ol><h2 id="我的解决日志"><a href="#我的解决日志" class="headerlink" title="我的解决日志"></a>我的解决日志</h2><p>截至2026&#x2F;03&#x2F;29,所有问题均解决<br>CDN回源使用IP回源，域名指向IP已取消<br>邮件推送已切换为阿里云<br><strong>目前.top域名已无法访问博客，301已取消，请使用<a href="https://www.xscnet.cn访问/">https://www.xscnet.cn访问</a></strong><br><strong>若您访问<a href="https://xscnet.cn/">https://xscnet.cn/</a> 则无法跳转，由于阿里云限制，只有http访问可自动301到3w,https访问子域名无法跳转 - 由于博主设置了HSTS，您可能无法使用HTTP协议</strong><br><strong>同样的，<a href="https://www.xscnas.top/">https://www.xscnas.top/</a> 无法正常跳转，需切换为http协议 - 由于博主设置了HSTS，您可能无法使用HTTP协议</strong>  </p><h2 id="小结"><a href="#小结" class="headerlink" title="小结"></a>小结</h2><p>任何漏洞，都是有成因的，只有你找到这个成因，才能找到对应的解决方案<br>不过，漏洞始终随着软件的更新而出现，我们只有努力的应对，才可以使我们的网站保持最安全的状态<br>不能亵渎任何的漏洞<br><strong>常在河边走，哪有不湿鞋</strong>  </p>]]>
    </content>
    <id>https://www.xscnet.cn/posts/p3420260329/</id>
    <link href="https://www.xscnet.cn/posts/p3420260329/"/>
    <published>2026-03-28T16:00:00.000Z</published>
    <summary>源站IP泄露是博客安全中常见但容易被忽视的问题。本文结合实际案例，详细分析了邮件推送和TLS/SSL证书两种泄露源站IP的典型途径，包括其原理、成因以及具体排查方式。同时，文章提供了使用阿里云邮件推送服务、关闭源站Web端口、配置默认假证书等实用的防护方案，帮助博主在不影响正常功能的前提下有效隐藏源站IP，提升网站整体安全性。</summary>
    <title>博客源站IP泄露的两种主要方式与防护指南</title>
    <updated>2026-03-29T06:05:05.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>Mete0r</name>
    </author>
    <category term="随笔" scheme="https://www.xscnet.cn/categories/%E9%9A%8F%E7%AC%94/"/>
    <category term="生活" scheme="https://www.xscnet.cn/tags/%E7%94%9F%E6%B4%BB/"/>
    <category term="随笔" scheme="https://www.xscnet.cn/tags/%E9%9A%8F%E7%AC%94/"/>
    <category term="博客" scheme="https://www.xscnet.cn/tags/%E5%8D%9A%E5%AE%A2/"/>
    <content>
      <![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>许久不见朋友们<br>不知不觉有有近一个月没发过文章了<br>不过前一阵子就规划了这次的计划，在春天到来之际总结一下平凡的三月~  </p><h2 id="Next-Station-is-Spring"><a href="#Next-Station-is-Spring" class="headerlink" title="Next Station is Spring!"></a>Next Station is Spring!</h2><h4 id="报告长官：是春天！"><a href="#报告长官：是春天！" class="headerlink" title="报告长官：是春天！"></a>报告长官：是春天！</h4><p>春天到了，万物复苏，看着各位博友争相发出了春日游记，各位博友家乡的花朵都已经含苞待放，心里不由得生出了一丝羡慕<br>东北的春天一向来的很晚，不知为何？<br>究竟是心里在作祟，还是天公不作美？  </p><blockquote><p>–今年的春天到来的格外慢，慢到好使让人已经习惯这褪去缓慢的冷意  </p></blockquote><p>不过，日日夜夜的翘首以盼终究等到了春天的到来，可能是由于学习压力的增大，对于户外的风景有着不同往日的向往  </p><p>两天前(2026-03-22)，我发了一篇说说，是关于我们这里春天第一场雨，可是那时候的空气并不讨人喜爱，反而充斥着一种烟尘味，那是农民春耕焚烧土地上剩余的秸秆的味道<br>作为一个东北孩子，我总觉得这风和雨，好像是东乡的专属，在别的城市，鲜少能闻到如此”厚重”的桔梗烟味  </p><blockquote><p>个人习惯：我个人是一个不抽烟的人，也不喜欢闻到很大的烟味  </p></blockquote><p>东北的春天，来了  </p>      <div class="live-photo-container" id="livephoto-levaevx4t" >        <img src="https://img.xscnet.cn//i/2026/03/22/69c000cd1f82d.jpg" alt="Live Photo" class="live-photo-static"  >        <video muted playsinline preload="auto" class="live-photo-video">          <source src="https://api.xscnet.cn/videos/%E5%BE%AE%E4%BF%A1%E8%A7%86%E9%A2%912026-03-22_224348_391.mp4" type="video/mp4">        </video>            <div class="live-badge bottom-left">Live</div>              <div class="live-loading"></div>      </div><p>下图：抖音上刷到的一张照片  </p>      <div class="live-photo-container" id="livephoto-iv5jx6we9" >        <img src="https://img.xscnet.cn//i/2026/03/20/69bd49be508f2.jpg" alt="Live Photo" class="live-photo-static"  >        <video muted playsinline preload="auto" class="live-photo-video">          <source src="https://api.xscnet.cn/videos/0002.mp4" type="video/mp4">        </video>            <div class="live-badge bottom-left">Live</div>              <div class="live-loading"></div>      </div><h4 id="下雨天"><a href="#下雨天" class="headerlink" title="下雨天"></a>下雨天</h4><p>我喜欢下雨天，不论是绵绵细雨，还是倾盆大雨，都深得我喜爱<br>我喜欢雨后的空气，那是一种说不上的清新感，给我带来一种心旷神怡的感觉<br>雨下的时候，我总觉得，这风和雨，好似大自然的馈赠，冲刷去我一切的烦恼<br>雨下之后，我总觉得，这风和雨，好似洗涤了一边污浊的空气，让我可以畅快的呼吸  </p><blockquote><p>如果有什么人喜欢极端天气，那大概率是和我一样的存在吧。  </p></blockquote><h2 id="记一次体检"><a href="#记一次体检" class="headerlink" title="记一次体检"></a>记一次体检</h2><p>刚满18岁，心想着去体检一下吧，我还没有全面的了解我我的这副身躯，一不做二不休，就约了一次全面体检  </p><p>还好，身体不算太差 就是<code>动脉粥样硬化指数</code>，<code>高密度脂蛋白胆固醇</code>，<code>血清尿酸含量</code>的指数不正常<br>因为我的母亲动脉就不好，所以肯定会有遗传，这个我早有预料，只不过有些超乎预料罢了<br>罢了罢了，没什么问题，其他地方都还不错  </p><h2 id="小改动"><a href="#小改动" class="headerlink" title="小改动"></a>小改动</h2><h4 id="博客说说页面"><a href="#博客说说页面" class="headerlink" title="博客说说页面"></a>博客说说页面</h4><p>这段时间总是在权衡学习和休息的平衡，所以多出了很多闲暇之余，在这些时候，大部分时间我会拿来看看小说缓解一下压力，但还是有不少时间是折腾起了博客  </p><p><a href="https://www.xscnet.cn/mmtalk/">说说页面</a> 是最近新开的一个页面，总不可能有点事情就要发个文章，便想着用说说来代替，我个人是不喜欢发朋友圈的，因为没有什么共同话题，发起来可能很尴尬<br>首先说说页面需要由衷的感谢 <a href="https://blog.liushen.fun/posts/e0b4d5a/">LiuShen大佬的教程 - 从Moments迁移到Ech0</a> 但是由于博客渲染机制的问题，柳哥提供的js并不能在我的博客上正常渲染出说说页面，所以一不做二不休，先部署了一个 <a href="https://github.com/lin-snow/Ech0">Ech0说说系统</a> ，然后按照柳哥的教程，将他开源的js文件复制到我的博客中，并修改了部分渲染代码，使得Ech0可以在我的博客中正常渲染<br>测试了一下，Ech0的效果还是不错，功能也很全面了，并且整体较为轻量化的设计，适合于我目前的系统  </p><p>根据柳哥的js，我又添加了许多的功能，例如LivePhoto的展示，不过最开始的设想是对接苹果的JSAPI，但是由于自身技术不过关，总是会出问题，所以还是利用最简单的视频URL+图片URL的方式实现了<br>另外感谢 <a href="https://koxiuqiu.cn/">klcdm</a> 的提醒，说说页面的js渲染没有markdown渲染的代码，他为我提供了导入markdown渲染库的代码<br><img src="https://img.xscnet.cn//i/2026/03/25/69c39dcb6d681.png"> </p><details class="tag-plugin colorful folding" color="yellow" child="codeblock"><summary><p>说说页面js二改文件</p></summary><div class="body"><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br><span class="line">128</span><br><span class="line">129</span><br><span class="line">130</span><br><span class="line">131</span><br><span class="line">132</span><br><span class="line">133</span><br><span class="line">134</span><br><span class="line">135</span><br><span class="line">136</span><br><span class="line">137</span><br><span class="line">138</span><br><span class="line">139</span><br><span class="line">140</span><br><span class="line">141</span><br><span class="line">142</span><br><span class="line">143</span><br><span class="line">144</span><br><span class="line">145</span><br><span class="line">146</span><br><span class="line">147</span><br><span class="line">148</span><br><span class="line">149</span><br><span class="line">150</span><br><span class="line">151</span><br><span class="line">152</span><br><span class="line">153</span><br><span class="line">154</span><br><span class="line">155</span><br><span class="line">156</span><br><span class="line">157</span><br><span class="line">158</span><br><span class="line">159</span><br><span class="line">160</span><br><span class="line">161</span><br><span class="line">162</span><br><span class="line">163</span><br><span class="line">164</span><br><span class="line">165</span><br><span class="line">166</span><br><span class="line">167</span><br><span class="line">168</span><br><span class="line">169</span><br><span class="line">170</span><br><span class="line">171</span><br><span class="line">172</span><br><span class="line">173</span><br><span class="line">174</span><br><span class="line">175</span><br><span class="line">176</span><br><span class="line">177</span><br><span class="line">178</span><br><span class="line">179</span><br><span class="line">180</span><br><span class="line">181</span><br><span class="line">182</span><br><span class="line">183</span><br><span class="line">184</span><br><span class="line">185</span><br><span class="line">186</span><br><span class="line">187</span><br><span class="line">188</span><br><span class="line">189</span><br><span class="line">190</span><br><span class="line">191</span><br><span class="line">192</span><br><span class="line">193</span><br><span class="line">194</span><br><span class="line">195</span><br><span class="line">196</span><br><span class="line">197</span><br><span class="line">198</span><br><span class="line">199</span><br><span class="line">200</span><br><span class="line">201</span><br><span class="line">202</span><br><span class="line">203</span><br><span class="line">204</span><br><span class="line">205</span><br><span class="line">206</span><br><span class="line">207</span><br><span class="line">208</span><br><span class="line">209</span><br><span class="line">210</span><br><span class="line">211</span><br><span class="line">212</span><br><span class="line">213</span><br><span class="line">214</span><br><span class="line">215</span><br><span class="line">216</span><br><span class="line">217</span><br><span class="line">218</span><br><span class="line">219</span><br><span class="line">220</span><br><span class="line">221</span><br><span class="line">222</span><br><span class="line">223</span><br><span class="line">224</span><br><span class="line">225</span><br><span class="line">226</span><br><span class="line">227</span><br><span class="line">228</span><br><span class="line">229</span><br><span class="line">230</span><br><span class="line">231</span><br><span class="line">232</span><br><span class="line">233</span><br><span class="line">234</span><br><span class="line">235</span><br><span class="line">236</span><br><span class="line">237</span><br><span class="line">238</span><br><span class="line">239</span><br><span class="line">240</span><br><span class="line">241</span><br><span class="line">242</span><br><span class="line">243</span><br><span class="line">244</span><br><span class="line">245</span><br><span class="line">246</span><br><span class="line">247</span><br><span class="line">248</span><br><span class="line">249</span><br><span class="line">250</span><br><span class="line">251</span><br><span class="line">252</span><br><span class="line">253</span><br><span class="line">254</span><br><span class="line">255</span><br><span class="line">256</span><br><span class="line">257</span><br><span class="line">258</span><br><span class="line">259</span><br><span class="line">260</span><br><span class="line">261</span><br><span class="line">262</span><br><span class="line">263</span><br><span class="line">264</span><br><span class="line">265</span><br><span class="line">266</span><br><span class="line">267</span><br><span class="line">268</span><br><span class="line">269</span><br><span class="line">270</span><br><span class="line">271</span><br><span class="line">272</span><br><span class="line">273</span><br><span class="line">274</span><br><span class="line">275</span><br><span class="line">276</span><br><span class="line">277</span><br><span class="line">278</span><br><span class="line">279</span><br><span class="line">280</span><br><span class="line">281</span><br><span class="line">282</span><br><span class="line">283</span><br><span class="line">284</span><br><span class="line">285</span><br><span class="line">286</span><br><span class="line">287</span><br><span class="line">288</span><br><span class="line">289</span><br><span class="line">290</span><br><span class="line">291</span><br><span class="line">292</span><br><span class="line">293</span><br><span class="line">294</span><br><span class="line">295</span><br><span class="line">296</span><br><span class="line">297</span><br><span class="line">298</span><br><span class="line">299</span><br><span class="line">300</span><br><span class="line">301</span><br><span class="line">302</span><br><span class="line">303</span><br><span class="line">304</span><br><span class="line">305</span><br><span class="line">306</span><br><span class="line">307</span><br><span class="line">308</span><br><span class="line">309</span><br><span class="line">310</span><br><span class="line">311</span><br><span class="line">312</span><br><span class="line">313</span><br><span class="line">314</span><br><span class="line">315</span><br><span class="line">316</span><br><span class="line">317</span><br><span class="line">318</span><br><span class="line">319</span><br><span class="line">320</span><br><span class="line">321</span><br><span class="line">322</span><br><span class="line">323</span><br><span class="line">324</span><br><span class="line">325</span><br><span class="line">326</span><br><span class="line">327</span><br><span class="line">328</span><br><span class="line">329</span><br><span class="line">330</span><br><span class="line">331</span><br><span class="line">332</span><br><span class="line">333</span><br><span class="line">334</span><br><span class="line">335</span><br><span class="line">336</span><br><span class="line">337</span><br><span class="line">338</span><br><span class="line">339</span><br><span class="line">340</span><br><span class="line">341</span><br><span class="line">342</span><br><span class="line">343</span><br><span class="line">344</span><br><span class="line">345</span><br><span class="line">346</span><br><span class="line">347</span><br><span class="line">348</span><br><span class="line">349</span><br><span class="line">350</span><br><span class="line">351</span><br><span class="line">352</span><br><span class="line">353</span><br><span class="line">354</span><br><span class="line">355</span><br><span class="line">356</span><br><span class="line">357</span><br><span class="line">358</span><br><span class="line">359</span><br><span class="line">360</span><br><span class="line">361</span><br><span class="line">362</span><br><span class="line">363</span><br><span class="line">364</span><br><span class="line">365</span><br><span class="line">366</span><br><span class="line">367</span><br><span class="line">368</span><br><span class="line">369</span><br><span class="line">370</span><br><span class="line">371</span><br><span class="line">372</span><br><span class="line">373</span><br><span class="line">374</span><br><span class="line">375</span><br><span class="line">376</span><br><span class="line">377</span><br><span class="line">378</span><br><span class="line">379</span><br><span class="line">380</span><br><span class="line">381</span><br><span class="line">382</span><br><span class="line">383</span><br><span class="line">384</span><br><span class="line">385</span><br><span class="line">386</span><br><span class="line">387</span><br><span class="line">388</span><br><span class="line">389</span><br><span class="line">390</span><br><span class="line">391</span><br><span class="line">392</span><br><span class="line">393</span><br><span class="line">394</span><br><span class="line">395</span><br><span class="line">396</span><br><span class="line">397</span><br><span class="line">398</span><br><span class="line">399</span><br><span class="line">400</span><br><span class="line">401</span><br><span class="line">402</span><br><span class="line">403</span><br><span class="line">404</span><br><span class="line">405</span><br><span class="line">406</span><br><span class="line">407</span><br><span class="line">408</span><br><span class="line">409</span><br><span class="line">410</span><br><span class="line">411</span><br><span class="line">412</span><br><span class="line">413</span><br><span class="line">414</span><br><span class="line">415</span><br><span class="line">416</span><br><span class="line">417</span><br><span class="line">418</span><br><span class="line">419</span><br><span class="line">420</span><br><span class="line">421</span><br><span class="line">422</span><br><span class="line">423</span><br><span class="line">424</span><br><span class="line">425</span><br><span class="line">426</span><br><span class="line">427</span><br><span class="line">428</span><br><span class="line">429</span><br><span class="line">430</span><br><span class="line">431</span><br><span class="line">432</span><br><span class="line">433</span><br><span class="line">434</span><br><span class="line">435</span><br><span class="line">436</span><br><span class="line">437</span><br><span class="line">438</span><br><span class="line">439</span><br><span class="line">440</span><br><span class="line">441</span><br><span class="line">442</span><br><span class="line">443</span><br><span class="line">444</span><br><span class="line">445</span><br><span class="line">446</span><br><span class="line">447</span><br><span class="line">448</span><br><span class="line">449</span><br><span class="line">450</span><br><span class="line">451</span><br><span class="line">452</span><br><span class="line">453</span><br><span class="line">454</span><br><span class="line">455</span><br><span class="line">456</span><br><span class="line">457</span><br><span class="line">458</span><br><span class="line">459</span><br><span class="line">460</span><br><span class="line">461</span><br><span class="line">462</span><br><span class="line">463</span><br><span class="line">464</span><br><span class="line">465</span><br><span class="line">466</span><br><span class="line">467</span><br><span class="line">468</span><br><span class="line">469</span><br><span class="line">470</span><br><span class="line">471</span><br><span class="line">472</span><br><span class="line">473</span><br><span class="line">474</span><br><span class="line">475</span><br><span class="line">476</span><br><span class="line">477</span><br><span class="line">478</span><br><span class="line">479</span><br><span class="line">480</span><br><span class="line">481</span><br><span class="line">482</span><br><span class="line">483</span><br><span class="line">484</span><br><span class="line">485</span><br><span class="line">486</span><br><span class="line">487</span><br><span class="line">488</span><br><span class="line">489</span><br><span class="line">490</span><br><span class="line">491</span><br><span class="line">492</span><br><span class="line">493</span><br><span class="line">494</span><br><span class="line">495</span><br><span class="line">496</span><br><span class="line">497</span><br><span class="line">498</span><br><span class="line">499</span><br><span class="line">500</span><br><span class="line">501</span><br><span class="line">502</span><br><span class="line">503</span><br><span class="line">504</span><br><span class="line">505</span><br><span class="line">506</span><br><span class="line">507</span><br><span class="line">508</span><br><span class="line">509</span><br><span class="line">510</span><br><span class="line">511</span><br><span class="line">512</span><br><span class="line">513</span><br><span class="line">514</span><br><span class="line">515</span><br><span class="line">516</span><br><span class="line">517</span><br><span class="line">518</span><br><span class="line">519</span><br><span class="line">520</span><br><span class="line">521</span><br><span class="line">522</span><br><span class="line">523</span><br><span class="line">524</span><br><span class="line">525</span><br><span class="line">526</span><br><span class="line">527</span><br><span class="line">528</span><br><span class="line">529</span><br><span class="line">530</span><br><span class="line">531</span><br><span class="line">532</span><br><span class="line">533</span><br><span class="line">534</span><br><span class="line">535</span><br><span class="line">536</span><br><span class="line">537</span><br><span class="line">538</span><br><span class="line">539</span><br><span class="line">540</span><br><span class="line">541</span><br><span class="line">542</span><br><span class="line">543</span><br><span class="line">544</span><br><span class="line">545</span><br><span class="line">546</span><br><span class="line">547</span><br><span class="line">548</span><br><span class="line">549</span><br><span class="line">550</span><br><span class="line">551</span><br><span class="line">552</span><br><span class="line">553</span><br><span class="line">554</span><br><span class="line">555</span><br><span class="line">556</span><br><span class="line">557</span><br><span class="line">558</span><br><span class="line">559</span><br><span class="line">560</span><br><span class="line">561</span><br><span class="line">562</span><br><span class="line">563</span><br><span class="line">564</span><br><span class="line">565</span><br><span class="line">566</span><br><span class="line">567</span><br><span class="line">568</span><br><span class="line">569</span><br><span class="line">570</span><br><span class="line">571</span><br><span class="line">572</span><br><span class="line">573</span><br><span class="line">574</span><br><span class="line">575</span><br><span class="line">576</span><br><span class="line">577</span><br><span class="line">578</span><br><span class="line">579</span><br><span class="line">580</span><br><span class="line">581</span><br><span class="line">582</span><br><span class="line">583</span><br><span class="line">584</span><br><span class="line">585</span><br><span class="line">586</span><br><span class="line">587</span><br><span class="line">588</span><br><span class="line">589</span><br><span class="line">590</span><br><span class="line">591</span><br><span class="line">592</span><br><span class="line">593</span><br><span class="line">594</span><br><span class="line">595</span><br><span class="line">596</span><br><span class="line">597</span><br><span class="line">598</span><br><span class="line">599</span><br><span class="line">600</span><br><span class="line">601</span><br><span class="line">602</span><br><span class="line">603</span><br><span class="line">604</span><br><span class="line">605</span><br><span class="line">606</span><br><span class="line">607</span><br><span class="line">608</span><br><span class="line">609</span><br><span class="line">610</span><br><span class="line">611</span><br><span class="line">612</span><br><span class="line">613</span><br><span class="line">614</span><br><span class="line">615</span><br><span class="line">616</span><br><span class="line">617</span><br><span class="line">618</span><br><span class="line">619</span><br><span class="line">620</span><br><span class="line">621</span><br><span class="line">622</span><br><span class="line">623</span><br><span class="line">624</span><br><span class="line">625</span><br><span class="line">626</span><br><span class="line">627</span><br><span class="line">628</span><br><span class="line">629</span><br><span class="line">630</span><br><span class="line">631</span><br><span class="line">632</span><br><span class="line">633</span><br><span class="line">634</span><br><span class="line">635</span><br><span class="line">636</span><br><span class="line">637</span><br><span class="line">638</span><br><span class="line">639</span><br><span class="line">640</span><br><span class="line">641</span><br><span class="line">642</span><br><span class="line">643</span><br><span class="line">644</span><br><span class="line">645</span><br><span class="line">646</span><br><span class="line">647</span><br><span class="line">648</span><br><span class="line">649</span><br><span class="line">650</span><br><span class="line">651</span><br><span class="line">652</span><br><span class="line">653</span><br><span class="line">654</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">/* LiuShen Echo System - XSCNET Adapted Version */</span></span><br><span class="line"><span class="comment">/* 原作者Liushen : https://blog.liushen.fun/posts/e0b4d5a/ */</span></span><br><span class="line"></span><br><span class="line"><span class="comment">/* 引入Markdown解析库 - 新增代码开始 */</span></span><br><span class="line">!<span class="keyword">function</span> (<span class="params"></span>) &#123;</span><br><span class="line">    <span class="comment">// 动态加载marked库（CDN方式）</span></span><br><span class="line">    <span class="keyword">if</span> (!<span class="variable language_">window</span>.<span class="property">marked</span>) &#123;</span><br><span class="line">        <span class="keyword">const</span> script = <span class="variable language_">document</span>.<span class="title function_">createElement</span>(<span class="string">&#x27;script&#x27;</span>);</span><br><span class="line">        script.<span class="property">src</span> = <span class="string">&#x27;https://cdn.jsdmirror.com/npm/marked@12.0.2/marked.min.js&#x27;</span>;</span><br><span class="line">        script.<span class="property">async</span> = <span class="literal">true</span>;</span><br><span class="line">        <span class="variable language_">document</span>.<span class="property">head</span>.<span class="title function_">appendChild</span>(script);</span><br><span class="line"></span><br><span class="line">        <span class="comment">// 可选：添加代码高亮支持（如果需要解析代码块）</span></span><br><span class="line">        <span class="keyword">const</span> highlightScript = <span class="variable language_">document</span>.<span class="title function_">createElement</span>(<span class="string">&#x27;script&#x27;</span>);</span><br><span class="line">        highlightScript.<span class="property">src</span> = <span class="string">&#x27;https://cdn.jsdmirror.com/npm/highlight.js@11.9.0/lib/highlight.min.js&#x27;</span>;</span><br><span class="line">        highlightScript.<span class="property">async</span> = <span class="literal">true</span>;</span><br><span class="line">        <span class="variable language_">document</span>.<span class="property">head</span>.<span class="title function_">appendChild</span>(highlightScript);</span><br><span class="line"></span><br><span class="line">        <span class="keyword">const</span> highlightCss = <span class="variable language_">document</span>.<span class="title function_">createElement</span>(<span class="string">&#x27;link&#x27;</span>);</span><br><span class="line">        highlightCss.<span class="property">rel</span> = <span class="string">&#x27;stylesheet&#x27;</span>;</span><br><span class="line">        highlightCss.<span class="property">href</span> = <span class="string">&#x27;https://cdn.jsdmirror.com/npm/highlight.js@11.9.0/styles/github.min.css&#x27;</span>;</span><br><span class="line">        <span class="variable language_">document</span>.<span class="property">head</span>.<span class="title function_">appendChild</span>(highlightCss);</span><br><span class="line">    &#125;</span><br><span class="line">&#125;();</span><br><span class="line"><span class="comment">/* 引入Markdown解析库 - 新增代码结束 */</span></span><br><span class="line"></span><br><span class="line"><span class="comment">// 定义一个自执行的匿名函数，创建独立作用域</span></span><br><span class="line">!<span class="keyword">function</span> (<span class="params"></span>) &#123;</span><br><span class="line">    <span class="comment">// 缓存相关变量定义</span></span><br><span class="line">    <span class="keyword">const</span> e = <span class="string">&quot;EchoCacheV2&quot;</span>, <span class="comment">// 本地存储键名：缓存数据</span></span><br><span class="line">        t = <span class="string">&quot;EchoCacheTimeV2&quot;</span>, <span class="comment">// 本地存储键名：缓存时间戳</span></span><br><span class="line">        <span class="comment">// 初始化全局状态对象，用于管理定时器和事件监听器</span></span><br><span class="line">        n = <span class="variable language_">window</span>.<span class="property">__mete0rShuoshuoState</span> || (<span class="variable language_">window</span>.<span class="property">__mete0rShuoshuoState</span> = &#123;</span><br><span class="line">            <span class="attr">resizeHandler</span>: <span class="literal">null</span>,      <span class="comment">// 窗口大小改变事件处理器</span></span><br><span class="line">            <span class="attr">afterRenderTimer</span>: <span class="literal">null</span>,   <span class="comment">// 渲染后延迟执行的定时器</span></span><br><span class="line">            <span class="attr">listenersBound</span>: !<span class="number">1</span>        <span class="comment">// 是否已绑定事件监听器标记</span></span><br><span class="line">        &#125;);</span><br><span class="line"></span><br><span class="line">    <span class="comment">// --- 核心配置区 ---</span></span><br><span class="line">    <span class="keyword">const</span> xscConfig = &#123;</span><br><span class="line">        <span class="attr">apiUrl</span>: <span class="string">&#x27;https://talk.xscnet.cn/api/echo/page&#x27;</span>, <span class="comment">// API地址，获取说说数据的接口</span></span><br><span class="line">        <span class="attr">avatar</span>: <span class="string">&#x27;https://img.xscnet.cn//i/2025/07/09/686e64ec429db.png&#x27;</span>, <span class="comment">// 默认头像URL</span></span><br><span class="line">        <span class="attr">nickname</span>: <span class="string">&#x27;Mete0r&#x27;</span>, <span class="comment">// 默认昵称</span></span><br><span class="line">        <span class="attr">ech0BaseUrl</span>: <span class="string">&#x27;https://talk.xscnet.cn&#x27;</span> <span class="comment">// ech0系统的基础URL，用于处理相对路径的图片</span></span><br><span class="line">    &#125;;</span><br><span class="line"></span><br><span class="line">    <span class="comment">// 清理函数：清除定时器和移除窗口大小改变事件监听器</span></span><br><span class="line">    <span class="keyword">function</span> <span class="title function_">a</span>(<span class="params"></span>) &#123;</span><br><span class="line">        n.<span class="property">afterRenderTimer</span> &amp;&amp; (<span class="variable language_">window</span>.<span class="built_in">clearTimeout</span>(n.<span class="property">afterRenderTimer</span>), n.<span class="property">afterRenderTimer</span> = <span class="literal">null</span>),</span><br><span class="line">            n.<span class="property">resizeHandler</span> &amp;&amp; (<span class="variable language_">window</span>.<span class="title function_">removeEventListener</span>(<span class="string">&quot;resize&quot;</span>, n.<span class="property">resizeHandler</span>), n.<span class="property">resizeHandler</span> = <span class="literal">null</span>)</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="comment">// 主要功能函数：初始化和渲染说说列表</span></span><br><span class="line">    <span class="keyword">function</span> <span class="title function_">r</span>(<span class="params"></span>) &#123;</span><br><span class="line">        <span class="title function_">a</span>(); <span class="comment">// 清理之前的定时器和事件监听器</span></span><br><span class="line">        <span class="keyword">const</span> r = <span class="variable language_">document</span>.<span class="title function_">querySelector</span>(<span class="string">&quot;#talk&quot;</span>); <span class="comment">// 获取说说容器元素</span></span><br><span class="line">        <span class="keyword">if</span> (!r) <span class="keyword">return</span>; <span class="comment">// 如果找不到容器则直接返回</span></span><br><span class="line">        r.<span class="property">innerHTML</span> = <span class="string">&quot;&quot;</span>; <span class="comment">// 清空容器内容</span></span><br><span class="line"></span><br><span class="line">        <span class="comment">// 瀑布流布局函数：实现图片/卡片的瀑布流排列</span></span><br><span class="line">        <span class="keyword">const</span> <span class="title function_">o</span> = e =&gt; &#123;</span><br><span class="line">            <span class="comment">// 获取元素指定方向的外边距值</span></span><br><span class="line">            <span class="keyword">function</span> <span class="title function_">t</span>(<span class="params">e, t</span>) &#123;</span><br><span class="line">                <span class="keyword">const</span> n = <span class="variable language_">window</span>.<span class="title function_">getComputedStyle</span>(t);</span><br><span class="line">                <span class="keyword">return</span> <span class="built_in">parseFloat</span>(n[<span class="string">`margin<span class="subst">$&#123;e&#125;</span>`</span>]) || <span class="number">0</span></span><br><span class="line">            &#125;</span><br><span class="line"></span><br><span class="line">            <span class="comment">// 将数值转换为带像素单位的字符串</span></span><br><span class="line">            <span class="keyword">function</span> <span class="title function_">r</span>(<span class="params">e</span>) &#123; <span class="keyword">return</span> <span class="string">`<span class="subst">$&#123;e&#125;</span>px`</span> &#125;</span><br><span class="line"></span><br><span class="line">            <span class="comment">// 获取元素的左边距位置</span></span><br><span class="line">            <span class="keyword">function</span> <span class="title function_">i</span>(<span class="params">e</span>) &#123; <span class="keyword">return</span> <span class="built_in">parseFloat</span>(e.<span class="property">style</span>.<span class="property">left</span>) &#125;</span><br><span class="line"></span><br><span class="line">            <span class="comment">// 获取元素的宽度</span></span><br><span class="line">            <span class="keyword">function</span> <span class="title function_">l</span>(<span class="params">e</span>) &#123; <span class="keyword">return</span> e.<span class="property">clientWidth</span> &#125;</span><br><span class="line"></span><br><span class="line">            <span class="comment">// 计算元素底部位置（顶部位置+高度+下边距）</span></span><br><span class="line">            <span class="keyword">function</span> <span class="title function_">s</span>(<span class="params">e</span>) &#123;</span><br><span class="line">                <span class="keyword">return</span> <span class="keyword">function</span> (<span class="params">e</span>) &#123; <span class="keyword">return</span> <span class="built_in">parseFloat</span>(e.<span class="property">style</span>.<span class="property">top</span>) &#125;(e) +</span><br><span class="line">                    <span class="keyword">function</span> (<span class="params">e</span>) &#123; <span class="keyword">return</span> e.<span class="property">clientHeight</span> &#125;(e) +</span><br><span class="line">                    <span class="title function_">t</span>(<span class="string">&quot;Bottom&quot;</span>, e)</span><br><span class="line">            &#125;</span><br><span class="line"></span><br><span class="line">            <span class="comment">// 计算元素右边位置（左边位置+宽度+右边距）</span></span><br><span class="line">            <span class="keyword">function</span> <span class="title function_">c</span>(<span class="params">e</span>) &#123; <span class="keyword">return</span> <span class="title function_">i</span>(e) + <span class="title function_">l</span>(e) + <span class="title function_">t</span>(<span class="string">&quot;Right&quot;</span>, e) &#125;</span><br><span class="line"></span><br><span class="line">            <span class="comment">// 对元素数组按从下到上的顺序进行排序</span></span><br><span class="line">            <span class="keyword">function</span> <span class="title function_">d</span>(<span class="params">e</span>) &#123;</span><br><span class="line">                e.<span class="title function_">sort</span>((<span class="function">(<span class="params">e, t</span>) =&gt;</span> <span class="title function_">s</span>(e) === <span class="title function_">s</span>(t) ? <span class="title function_">i</span>(t) - <span class="title function_">i</span>(e) : <span class="title function_">s</span>(t) - <span class="title function_">s</span>(e)))</span><br><span class="line">            &#125;</span><br><span class="line"></span><br><span class="line">            <span class="comment">// 如果传入的是字符串选择器，则获取对应DOM元素</span></span><br><span class="line">            <span class="keyword">if</span> (<span class="string">&quot;string&quot;</span> == <span class="keyword">typeof</span> e &amp;&amp; (e = <span class="variable language_">document</span>.<span class="title function_">querySelector</span>(e)), !e) <span class="keyword">return</span>;</span><br><span class="line"></span><br><span class="line">            <span class="comment">// 设置子元素绝对定位，并收集到数组中</span></span><br><span class="line">            <span class="keyword">const</span> u = <span class="title class_">Array</span>.<span class="title function_">from</span>(e.<span class="property">children</span>).<span class="title function_">map</span>((<span class="function"><span class="params">e</span> =&gt;</span> (e.<span class="property">style</span>.<span class="property">position</span> = <span class="string">&quot;absolute&quot;</span>, e)));</span><br><span class="line">            e.<span class="property">style</span>.<span class="property">position</span> = <span class="string">&quot;relative&quot;</span>; <span class="comment">// 设置父容器相对定位</span></span><br><span class="line"></span><br><span class="line">            <span class="keyword">const</span> p = []; <span class="comment">// 存储当前每列底部位置的元素</span></span><br><span class="line"></span><br><span class="line">            <span class="comment">// 处理第一行元素：设置第一个元素的位置</span></span><br><span class="line">            u.<span class="property">length</span> &amp;&amp; (u[<span class="number">0</span>].<span class="property">style</span>.<span class="property">top</span> = <span class="string">&quot;0px&quot;</span>, u[<span class="number">0</span>].<span class="property">style</span>.<span class="property">left</span> = <span class="title function_">r</span>(<span class="title function_">t</span>(<span class="string">&quot;Left&quot;</span>, u[<span class="number">0</span>])), p.<span class="title function_">push</span>(u[<span class="number">0</span>]));</span><br><span class="line">            <span class="keyword">let</span> m = <span class="number">1</span>; <span class="comment">// 从第二个元素开始循环</span></span><br><span class="line"></span><br><span class="line">            <span class="comment">// 将能放在第一行的元素水平排列</span></span><br><span class="line">            <span class="keyword">for</span> (; m &lt; u.<span class="property">length</span>; m += <span class="number">1</span>) &#123;</span><br><span class="line">                <span class="keyword">const</span> n = u[m - <span class="number">1</span>], a = u[m]; <span class="comment">// 当前元素和前一个元素</span></span><br><span class="line">                <span class="keyword">if</span> (!(<span class="title function_">c</span>(n) + <span class="title function_">l</span>(a) &lt;= <span class="title function_">l</span>(e))) <span class="keyword">break</span>; <span class="comment">// 如果超出容器宽度则跳出循环</span></span><br><span class="line">                a.<span class="property">style</span>.<span class="property">top</span> = n.<span class="property">style</span>.<span class="property">top</span>, a.<span class="property">style</span>.<span class="property">left</span> = <span class="title function_">r</span>(<span class="title function_">c</span>(n) + <span class="title function_">t</span>(<span class="string">&quot;Left&quot;</span>, a)), p.<span class="title function_">push</span>(a) <span class="comment">// 设置元素位置</span></span><br><span class="line">            &#125;</span><br><span class="line"></span><br><span class="line">            <span class="comment">// 处理剩余元素：依次放置到最短列的下方</span></span><br><span class="line">            <span class="keyword">for</span> (; m &lt; u.<span class="property">length</span>; m += <span class="number">1</span>) &#123;</span><br><span class="line">                <span class="title function_">d</span>(p); <span class="comment">// 排序找到最短列</span></span><br><span class="line">                <span class="keyword">const</span> e = u[m], n = p.<span class="title function_">pop</span>(); <span class="comment">// 取出当前最短列的底部元素</span></span><br><span class="line">                e.<span class="property">style</span>.<span class="property">top</span> = <span class="title function_">r</span>(<span class="title function_">s</span>(n) + <span class="title function_">t</span>(<span class="string">&quot;Top&quot;</span>, e)), e.<span class="property">style</span>.<span class="property">left</span> = <span class="title function_">r</span>(<span class="title function_">i</span>(n)), p.<span class="title function_">push</span>(e) <span class="comment">// 放置元素</span></span><br><span class="line">            &#125;</span><br><span class="line"></span><br><span class="line">            <span class="title function_">d</span>(p); <span class="comment">// 最终排序</span></span><br><span class="line">            <span class="keyword">const</span> h = p[<span class="number">0</span>]; <span class="comment">// 找到最高列的底部元素</span></span><br><span class="line">            e.<span class="property">style</span>.<span class="property">height</span> = h ? <span class="title function_">r</span>(<span class="title function_">s</span>(h) + <span class="title function_">t</span>(<span class="string">&quot;Bottom&quot;</span>, h)) : <span class="string">&quot;0px&quot;</span>; <span class="comment">// 设置容器高度</span></span><br><span class="line"></span><br><span class="line">            <span class="keyword">const</span> f = <span class="title function_">l</span>(e); <span class="comment">// 记录初始容器宽度</span></span><br><span class="line">            <span class="comment">// 设置窗口大小改变时的处理函数</span></span><br><span class="line">            n.<span class="property">resizeHandler</span> = <span class="function">() =&gt;</span> &#123;</span><br><span class="line">                <span class="keyword">const</span> e = <span class="variable language_">document</span>.<span class="title function_">querySelector</span>(<span class="string">&quot;#talk&quot;</span>);</span><br><span class="line">                e &amp;&amp; <span class="variable language_">document</span>.<span class="property">body</span>.<span class="title function_">contains</span>(e) ? <span class="title function_">l</span>(e) !== f &amp;&amp; <span class="title function_">o</span>(e) : <span class="title function_">a</span>() <span class="comment">// 如果容器存在且尺寸改变，则重新计算布局</span></span><br><span class="line">            &#125;,</span><br><span class="line">                <span class="variable language_">window</span>.<span class="title function_">addEventListener</span>(<span class="string">&quot;resize&quot;</span>, n.<span class="property">resizeHandler</span>) <span class="comment">// 添加窗口大小改变事件监听器</span></span><br><span class="line">        &#125;,</span><br><span class="line"></span><br><span class="line">            <span class="comment">// 提取扩展信息函数：从数据对象中提取extension字段</span></span><br><span class="line">            i = <span class="function"><span class="params">e</span> =&gt;</span> &#123;</span><br><span class="line">                <span class="keyword">const</span> t = e?.<span class="property">extension</span>;</span><br><span class="line">                <span class="keyword">return</span> t &amp;&amp; <span class="string">&quot;object&quot;</span> == <span class="keyword">typeof</span> t ? t : <span class="literal">null</span></span><br><span class="line">            &#125;,</span><br><span class="line"></span><br><span class="line">            <span class="comment">// 获取标签数组函数：从数据对象中提取标签，如果没有则默认返回&quot;碎碎念&quot;</span></span><br><span class="line">            l = <span class="function"><span class="params">e</span> =&gt;</span> <span class="title class_">Array</span>.<span class="title function_">isArray</span>(e?.<span class="property">tags</span>) &amp;&amp; e.<span class="property">tags</span>.<span class="property">length</span> ?</span><br><span class="line">                e.<span class="property">tags</span>.<span class="title function_">map</span>((<span class="function"><span class="params">e</span> =&gt;</span> e?.<span class="property">name</span> || e)).<span class="title function_">filter</span>(<span class="title class_">Boolean</span>) :</span><br><span class="line">                [<span class="string">&quot;💬 碎碎念&quot;</span>],</span><br><span class="line"></span><br><span class="line">            <span class="comment">// 格式化日期函数：将日期字符串格式化为年月日时分格式</span></span><br><span class="line">            s = <span class="function"><span class="params">e</span> =&gt;</span> &#123;</span><br><span class="line">                <span class="keyword">const</span> t = <span class="keyword">new</span> <span class="title class_">Date</span>(e); <span class="comment">// 创建日期对象</span></span><br><span class="line">                <span class="keyword">if</span> (<span class="built_in">isNaN</span>(t.<span class="title function_">getTime</span>())) <span class="keyword">return</span> <span class="string">&quot;刚刚&quot;</span>; <span class="comment">// 如果日期无效则返回&quot;刚刚&quot;</span></span><br><span class="line">                <span class="keyword">const</span> <span class="title function_">n</span> = e =&gt; <span class="title class_">String</span>(e).<span class="title function_">padStart</span>(<span class="number">2</span>, <span class="string">&quot;0&quot;</span>); <span class="comment">// 补零函数</span></span><br><span class="line">                <span class="comment">// 返回格式化的日期时间字符串</span></span><br><span class="line">                <span class="keyword">return</span> <span class="string">`<span class="subst">$&#123;t.getFullYear()&#125;</span>-<span class="subst">$&#123;n(t.getMonth() + <span class="number">1</span>)&#125;</span>-<span class="subst">$&#123;n(t.getDate())&#125;</span> <span class="subst">$&#123;n(t.getHours())&#125;</span>:<span class="subst">$&#123;n(t.getMinutes())&#125;</span>`</span></span><br><span class="line">            &#125;,</span><br><span class="line"></span><br><span class="line">            <span class="comment">// 生成外部链接HTML函数：根据类型生成网站或GitHub项目链接</span></span><br><span class="line">            c = <span class="function">(<span class="params">e, t</span>) =&gt;</span> &#123;</span><br><span class="line">                <span class="keyword">if</span> (!t) <span class="keyword">return</span> <span class="string">&quot;&quot;</span>; <span class="comment">// 如果没有数据则返回空字符串</span></span><br><span class="line">                <span class="keyword">let</span> n = <span class="string">&quot;&quot;</span>, a = <span class="string">&quot;&quot;</span>, r = <span class="string">&quot;https://img.xscnet.cn//i/2026/03/14/69b5554165047.webp&quot;</span>;</span><br><span class="line"></span><br><span class="line">                <span class="comment">// 处理网站链接</span></span><br><span class="line">                <span class="keyword">if</span> (<span class="string">&quot;WEBSITE&quot;</span> === e) &#123;</span><br><span class="line">                    n = t.<span class="property">site</span> || t.<span class="property">url</span> || <span class="string">&quot;&quot;</span>, a = t.<span class="property">title</span> || n</span><br><span class="line">                &#125;</span><br><span class="line"></span><br><span class="line">                <span class="comment">// 处理GitHub项目链接</span></span><br><span class="line">                <span class="keyword">if</span> (<span class="string">&quot;GITHUBPROJ&quot;</span> === e) &#123;</span><br><span class="line">                    n = t.<span class="property">repoUrl</span> || t.<span class="property">url</span> || <span class="string">&quot;&quot;</span>,</span><br><span class="line">                        a = t.<span class="property">title</span> || (<span class="function"><span class="params">e</span> =&gt;</span> &#123;</span><br><span class="line">                            <span class="keyword">if</span> (!e) <span class="keyword">return</span> <span class="string">&quot;&quot;</span>;</span><br><span class="line">                            <span class="comment">// 提取GitHub仓库名称</span></span><br><span class="line">                            <span class="keyword">const</span> t = e.<span class="title function_">match</span>(<span class="regexp">/^https?:\/\/github\.com\/[^/]+\/([^/?#]+)/i</span>);</span><br><span class="line">                            <span class="keyword">if</span> (t) <span class="keyword">return</span> t[<span class="number">1</span>];</span><br><span class="line">                            <span class="keyword">return</span> e</span><br><span class="line">                        &#125;)(n);</span><br><span class="line">                    r = <span class="string">&quot;https://img.xscnet.cn//i/2026/03/14/69b5554de2010.webp&quot;</span> <span class="comment">// GitHub图标</span></span><br><span class="line">                &#125;</span><br><span class="line"></span><br><span class="line">                <span class="comment">// 返回格式化的外部链接HTML结构</span></span><br><span class="line">                <span class="keyword">return</span> n ? <span class="string">`\n&lt;div class=&quot;shuoshuo-external-link&quot;&gt;&lt;a class=&quot;external-link&quot; href=&quot;<span class="subst">$&#123;n&#125;</span>&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;&lt;div class=&quot;external-link-left&quot; style=&quot;background-image:url(<span class="subst">$&#123;r&#125;</span>)&quot;&gt;&lt;/div&gt;&lt;div class=&quot;external-link-right&quot;&gt;&lt;div class=&quot;external-link-title&quot;&gt;<span class="subst">$&#123;a&#125;</span>&lt;/div&gt;&lt;div&gt;点击跳转&lt;i class=&quot;fa-solid fa-angle-right&quot;&gt;&lt;/i&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/div&gt;`</span> : <span class="string">&quot;&quot;</span></span><br><span class="line">            &#125;,</span><br><span class="line"></span><br><span class="line">            <span class="comment">// 生成B站视频嵌入函数：根据BVID生成B站视频iframe</span></span><br><span class="line">            d = <span class="function"><span class="params">e</span> =&gt;</span> &#123;</span><br><span class="line">                <span class="keyword">const</span> t = e?.<span class="property">videoId</span> || e?.<span class="property">url</span> || <span class="string">&quot;&quot;</span>; <span class="keyword">if</span> (!t) <span class="keyword">return</span> <span class="string">&quot;&quot;</span>; <span class="comment">// 获取视频ID或URL</span></span><br><span class="line">                <span class="keyword">let</span> n = <span class="string">&quot;&quot;</span>;</span><br><span class="line">                <span class="keyword">if</span> (<span class="regexp">/^BV[0-9A-Za-z]+$/i</span>.<span class="title function_">test</span>(t)) <span class="comment">// 验证是否为有效的BVID</span></span><br><span class="line">                    n = <span class="string">`https://www.bilibili.com/blackboard/html5mobileplayer.html?bvid=<span class="subst">$&#123;t&#125;</span>&amp;as_wide=1&amp;high_quality=1&amp;danmaku=0`</span>;</span><br><span class="line">                <span class="comment">// 返回视频iframe HTML</span></span><br><span class="line">                <span class="keyword">return</span> n ? <span class="string">`&lt;div style=&quot;position: relative; padding: 30% 45%; margin-top: 10px;&quot;&gt;&lt;iframe style=&quot;position:absolute;width:100%;height:100%;left:0;top:0;border-radius:12px;&quot; src=&quot;<span class="subst">$&#123;n&#125;</span>&quot; frameborder=&quot;0&quot; allowfullscreen loading=&quot;lazy&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;`</span> : <span class="string">&quot;&quot;</span></span><br><span class="line">            &#125;,</span><br><span class="line"></span><br><span class="line">            <span class="comment">// 生成轮播图HTML函数：将图片数组转换为轮播图结构（已升级支持LivePhoto）</span></span><br><span class="line">            carouselHtml = <span class="function">(<span class="params">images, liveVideos = []</span>) =&gt;</span> &#123;</span><br><span class="line">                <span class="keyword">if</span> (!images || images.<span class="property">length</span> === <span class="number">0</span>) <span class="keyword">return</span> <span class="string">&#x27;&#x27;</span>;</span><br><span class="line"></span><br><span class="line">                <span class="comment">// 内部函数：生成单个幻灯片的HTML，包含Live视频和图标</span></span><br><span class="line">                <span class="keyword">const</span> <span class="title function_">generateSlideHtml</span> = (<span class="params">img, index, isActive</span>) =&gt; &#123;</span><br><span class="line">                    <span class="comment">// 检查图片URL是否为相对路径，如果是则补全为完整URL</span></span><br><span class="line">                    <span class="keyword">let</span> imageUrl = img;</span><br><span class="line">                    <span class="keyword">if</span> (imageUrl &amp;&amp; imageUrl.<span class="title function_">startsWith</span>(<span class="string">&#x27;/api/files/images/&#x27;</span>)) &#123;</span><br><span class="line">                        imageUrl = xscConfig.<span class="property">ech0BaseUrl</span> + imageUrl;</span><br><span class="line">                    &#125;</span><br><span class="line"></span><br><span class="line">                    <span class="keyword">const</span> videoUrl = liveVideos[index];</span><br><span class="line">                    <span class="keyword">const</span> hasLive = !!videoUrl;</span><br><span class="line">                    <span class="keyword">return</span> <span class="string">`&lt;div class=&quot;carousel-slide<span class="subst">$&#123;isActive ? <span class="string">&#x27; active&#x27;</span> : <span class="string">&#x27;&#x27;</span>&#125;</span><span class="subst">$&#123;hasLive ? <span class="string">&#x27; has-live&#x27;</span> : <span class="string">&#x27;&#x27;</span>&#125;</span>&quot;&gt;</span></span><br><span class="line"><span class="string">                        &lt;a href=&quot;<span class="subst">$&#123;imageUrl&#125;</span>&quot; class=&quot;carousel-image-link no-direct-link&quot; data-fancybox=&quot;gallery&quot; data-src=&quot;<span class="subst">$&#123;imageUrl&#125;</span>&quot;&gt;</span></span><br><span class="line"><span class="string">                            &lt;img src=&quot;<span class="subst">$&#123;imageUrl&#125;</span>&quot; loading=&quot;lazy&quot; alt=&quot;图片&quot;&gt;</span></span><br><span class="line"><span class="string">                            <span class="subst">$&#123;hasLive ? <span class="string">`</span></span></span></span><br><span class="line"><span class="string"><span class="subst"><span class="string">                                &lt;div class=&quot;live-badge&quot;&gt;</span></span></span></span><br><span class="line"><span class="string"><span class="subst"><span class="string">                                    &lt;svg class=&quot;live-icon&quot; viewBox=&quot;0 0 512 512&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;&lt;path d=&quot;M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zm0-352a96 96 0 1 1 0 192 96 96 0 1 1 0-192z&quot; fill=&quot;currentColor&quot;/&gt;&lt;/svg&gt;</span></span></span></span><br><span class="line"><span class="string"><span class="subst"><span class="string">                                    &lt;span&gt;LIVE&lt;/span&gt;</span></span></span></span><br><span class="line"><span class="string"><span class="subst"><span class="string">                                &lt;/div&gt;</span></span></span></span><br><span class="line"><span class="string"><span class="subst"><span class="string">                                &lt;video class=&quot;live-video&quot; src=&quot;<span class="subst">$&#123;videoUrl&#125;</span>&quot; loop muted playsinline preload=&quot;metadata&quot;&gt;&lt;/video&gt;</span></span></span></span><br><span class="line"><span class="string"><span class="subst"><span class="string">                            `</span> : <span class="string">&#x27;&#x27;</span>&#125;</span></span></span><br><span class="line"><span class="string">                        &lt;/a&gt;</span></span><br><span class="line"><span class="string">                    &lt;/div&gt;`</span>;</span><br><span class="line">                &#125;;</span><br><span class="line"></span><br><span class="line">                <span class="keyword">if</span> (images.<span class="property">length</span> === <span class="number">1</span>) &#123;</span><br><span class="line">                    <span class="comment">// 只有一张图片时</span></span><br><span class="line">                    <span class="keyword">return</span> <span class="string">`&lt;div class=&quot;image-carousel&quot;&gt;</span></span><br><span class="line"><span class="string">                        &lt;div class=&quot;carousel-container single-image&quot;&gt;</span></span><br><span class="line"><span class="string">                            <span class="subst">$&#123;generateSlideHtml(images[<span class="number">0</span>], <span class="number">0</span>, <span class="literal">true</span>)&#125;</span></span></span><br><span class="line"><span class="string">                        &lt;/div&gt;</span></span><br><span class="line"><span class="string">                    &lt;/div&gt;`</span>;</span><br><span class="line">                &#125; <span class="keyword">else</span> &#123;</span><br><span class="line">                    <span class="comment">// 多张图片时，显示轮播图</span></span><br><span class="line">                    <span class="keyword">let</span> slides = images.<span class="title function_">map</span>(<span class="function">(<span class="params">img, index</span>) =&gt;</span> <span class="title function_">generateSlideHtml</span>(img, index, index === <span class="number">0</span>)).<span class="title function_">join</span>(<span class="string">&#x27;&#x27;</span>);</span><br><span class="line"></span><br><span class="line">                    <span class="keyword">return</span> <span class="string">`&lt;div class=&quot;image-carousel&quot;&gt;</span></span><br><span class="line"><span class="string">                        &lt;div class=&quot;carousel-container multi-images&quot;&gt;</span></span><br><span class="line"><span class="string">                            <span class="subst">$&#123;slides&#125;</span></span></span><br><span class="line"><span class="string">                            &lt;button class=&quot;carousel-btn prev-btn&quot; type=&quot;button&quot; aria-label=&quot;上一张&quot;&gt;&amp;#10094;&lt;/button&gt;</span></span><br><span class="line"><span class="string">                            &lt;button class=&quot;carousel-btn next-btn&quot; type=&quot;button&quot; aria-label=&quot;下一张&quot;&gt;&amp;#10095;&lt;/button&gt;</span></span><br><span class="line"><span class="string">                            &lt;div class=&quot;carousel-indicators&quot;&gt;</span></span><br><span class="line"><span class="string">                                <span class="subst">$&#123;images.map((_, index) =&gt; <span class="string">`&lt;span class=&quot;indicator<span class="subst">$&#123;index === <span class="number">0</span> ? <span class="string">&#x27; active&#x27;</span> : <span class="string">&#x27;&#x27;</span>&#125;</span>&quot; data-index=&quot;<span class="subst">$&#123;index&#125;</span>&quot;&gt;&lt;/span&gt;`</span>).join(<span class="string">&#x27;&#x27;</span>)&#125;</span></span></span><br><span class="line"><span class="string">                            &lt;/div&gt;</span></span><br><span class="line"><span class="string">                        &lt;/div&gt;</span></span><br><span class="line"><span class="string">                    &lt;/div&gt;`</span>;</span><br><span class="line">                &#125;</span><br><span class="line">            &#125;,</span><br><span class="line"></span><br><span class="line">            <span class="comment">// 阻止链接默认行为直到插件加载完成</span></span><br><span class="line">            preventImageLinkDefault = <span class="function">() =&gt;</span> &#123;</span><br><span class="line">                <span class="comment">// 添加事件委托，阻止图片链接的默认行为直到 fancybox 加载完成</span></span><br><span class="line">                <span class="variable language_">document</span>.<span class="title function_">addEventListener</span>(<span class="string">&#x27;click&#x27;</span>, <span class="keyword">function</span> (<span class="params">e</span>) &#123;</span><br><span class="line">                    <span class="comment">// 检查是否点击的是图片链接且属于我们的图片链接类</span></span><br><span class="line">                    <span class="keyword">const</span> imageLink = e.<span class="property">target</span>.<span class="title function_">closest</span>(<span class="string">&#x27;.carousel-image-link.no-direct-link&#x27;</span>);</span><br><span class="line">                    <span class="keyword">if</span> (imageLink) &#123;</span><br><span class="line">                        e.<span class="title function_">preventDefault</span>();</span><br><span class="line">                        e.<span class="title function_">stopPropagation</span>();</span><br><span class="line"></span><br><span class="line">                        <span class="comment">// 检查是否已加载 fancybox</span></span><br><span class="line">                        <span class="keyword">if</span> (<span class="keyword">typeof</span> <span class="title class_">Fancybox</span> !== <span class="string">&#x27;undefined&#x27;</span> &amp;&amp; <span class="keyword">typeof</span> <span class="title class_">Fancybox</span>.<span class="property">bind</span> !== <span class="string">&#x27;undefined&#x27;</span>) &#123;</span><br><span class="line">                            <span class="comment">// 如果已加载，直接打开 fancybox</span></span><br><span class="line">                            <span class="keyword">const</span> galleryImages = [];</span><br><span class="line">                            <span class="keyword">const</span> container = imageLink.<span class="title function_">closest</span>(<span class="string">&#x27;.carousel-container&#x27;</span>);</span><br><span class="line"></span><br><span class="line">                            <span class="comment">// 如果是轮播图，收集所有图片；如果是单张图片，就只有一张</span></span><br><span class="line">                            <span class="keyword">if</span> (container) &#123;</span><br><span class="line">                                <span class="keyword">const</span> links = container.<span class="title function_">querySelectorAll</span>(<span class="string">&#x27;.carousel-image-link&#x27;</span>);</span><br><span class="line">                                links.<span class="title function_">forEach</span>(<span class="function">(<span class="params">link, index</span>) =&gt;</span> &#123;</span><br><span class="line">                                    galleryImages.<span class="title function_">push</span>(&#123;</span><br><span class="line">                                        <span class="attr">src</span>: link.<span class="title function_">getAttribute</span>(<span class="string">&#x27;href&#x27;</span>),</span><br><span class="line">                                        <span class="attr">thumb</span>: link.<span class="title function_">querySelector</span>(<span class="string">&#x27;img&#x27;</span>).<span class="property">src</span></span><br><span class="line">                                    &#125;);</span><br><span class="line"></span><br><span class="line">                                    <span class="comment">// 如果点击的就是当前这张图片，记录索引</span></span><br><span class="line">                                    <span class="keyword">if</span> (link === imageLink) &#123;</span><br><span class="line">                                        <span class="title class_">Fancybox</span>.<span class="title function_">show</span>(galleryImages, &#123; <span class="attr">startIndex</span>: index &#125;);</span><br><span class="line">                                    &#125;</span><br><span class="line">                                &#125;);</span><br><span class="line">                            &#125; <span class="keyword">else</span> &#123;</span><br><span class="line">                                <span class="comment">// 单个图片的情况</span></span><br><span class="line">                                <span class="title class_">Fancybox</span>.<span class="title function_">show</span>([&#123;</span><br><span class="line">                                    <span class="attr">src</span>: imageLink.<span class="title function_">getAttribute</span>(<span class="string">&#x27;href&#x27;</span>),</span><br><span class="line">                                    <span class="attr">thumb</span>: imageLink.<span class="title function_">querySelector</span>(<span class="string">&#x27;img&#x27;</span>).<span class="property">src</span></span><br><span class="line">                                &#125;]);</span><br><span class="line">                            &#125;</span><br><span class="line">                        &#125; <span class="keyword">else</span> &#123;</span><br><span class="line">                            <span class="comment">// 如果未加载，显示提示信息或等待</span></span><br><span class="line">                            <span class="variable language_">console</span>.<span class="title function_">log</span>(<span class="string">&quot;正在加载图片查看器...&quot;</span>);</span><br><span class="line"></span><br><span class="line">                            <span class="comment">// 尝试多次检查 fancybox 是否加载完成</span></span><br><span class="line">                            <span class="keyword">const</span> <span class="title function_">checkFancyboxAndShow</span> = (<span class="params"></span>) =&gt; &#123;</span><br><span class="line">                                <span class="keyword">if</span> (<span class="keyword">typeof</span> <span class="title class_">Fancybox</span> !== <span class="string">&#x27;undefined&#x27;</span> &amp;&amp; <span class="keyword">typeof</span> <span class="title class_">Fancybox</span>.<span class="property">bind</span> !== <span class="string">&#x27;undefined&#x27;</span>) &#123;</span><br><span class="line">                                    <span class="keyword">const</span> galleryImages = [];</span><br><span class="line">                                    <span class="keyword">const</span> container = imageLink.<span class="title function_">closest</span>(<span class="string">&#x27;.carousel-container&#x27;</span>);</span><br><span class="line"></span><br><span class="line">                                    <span class="keyword">if</span> (container) &#123;</span><br><span class="line">                                        <span class="keyword">const</span> links = container.<span class="title function_">querySelectorAll</span>(<span class="string">&#x27;.carousel-image-link&#x27;</span>);</span><br><span class="line">                                        links.<span class="title function_">forEach</span>(<span class="function">(<span class="params">link, index</span>) =&gt;</span> &#123;</span><br><span class="line">                                            galleryImages.<span class="title function_">push</span>(&#123;</span><br><span class="line">                                                <span class="attr">src</span>: link.<span class="title function_">getAttribute</span>(<span class="string">&#x27;href&#x27;</span>),</span><br><span class="line">                                                <span class="attr">thumb</span>: link.<span class="title function_">querySelector</span>(<span class="string">&#x27;img&#x27;</span>).<span class="property">src</span></span><br><span class="line">                                            &#125;);</span><br><span class="line"></span><br><span class="line">                                            <span class="comment">// 如果点击的就是当前这张图片，记录索引</span></span><br><span class="line">                                            <span class="keyword">if</span> (link === imageLink) &#123;</span><br><span class="line">                                                <span class="title class_">Fancybox</span>.<span class="title function_">show</span>(galleryImages, &#123; <span class="attr">startIndex</span>: index &#125;);</span><br><span class="line">                                            &#125;</span><br><span class="line">                                        &#125;);</span><br><span class="line">                                    &#125; <span class="keyword">else</span> &#123;</span><br><span class="line">                                        <span class="comment">// 单个图片的情况</span></span><br><span class="line">                                        <span class="title class_">Fancybox</span>.<span class="title function_">show</span>([&#123;</span><br><span class="line">                                            <span class="attr">src</span>: imageLink.<span class="title function_">getAttribute</span>(<span class="string">&#x27;href&#x27;</span>),</span><br><span class="line">                                            <span class="attr">thumb</span>: imageLink.<span class="title function_">querySelector</span>(<span class="string">&#x27;img&#x27;</span>).<span class="property">src</span></span><br><span class="line">                                        &#125;]);</span><br><span class="line">                                    &#125;</span><br><span class="line">                                &#125; <span class="keyword">else</span> &#123;</span><br><span class="line">                                    <span class="built_in">setTimeout</span>(checkFancyboxAndShow, <span class="number">100</span>); <span class="comment">// 100ms 后再检查</span></span><br><span class="line">                                &#125;</span><br><span class="line">                            &#125;;</span><br><span class="line"></span><br><span class="line">                            <span class="title function_">checkFancyboxAndShow</span>();</span><br><span class="line">                        &#125;</span><br><span class="line">                    &#125;</span><br><span class="line">                &#125;, <span class="literal">true</span>); <span class="comment">// 使用捕获阶段确保在其他事件处理程序之前执行</span></span><br><span class="line">            &#125;,</span><br><span class="line"></span><br><span class="line">            <span class="comment">// 格式化单条说说内容函数：处理文本、图片、视频、外部链接等</span></span><br><span class="line">            u = <span class="function"><span class="params">e</span> =&gt;</span> &#123;</span><br><span class="line">                <span class="comment">// 解析扩展信息</span></span><br><span class="line">                <span class="keyword">const</span> t = (<span class="function"><span class="params">e</span> =&gt;</span> <span class="title function_">i</span>(e)?.<span class="property">type</span> || <span class="string">&quot;&quot;</span>)(e),</span><br><span class="line">                    n = (<span class="function"><span class="params">e</span> =&gt;</span> <span class="title function_">i</span>(e)?.<span class="property">payload</span> || <span class="literal">null</span>)(e),</span><br><span class="line">                    a = e?.<span class="property">content</span> || <span class="string">&quot;&quot;</span>; <span class="comment">// 获取说说内容</span></span><br><span class="line"></span><br><span class="line">                <span class="comment">// --- LivePhoto 视频提取逻辑 ---</span></span><br><span class="line">                <span class="keyword">const</span> liveRegex = <span class="regexp">/\[live\](https?:\/\/[^\s&lt;]+)/g</span>;</span><br><span class="line">                <span class="keyword">let</span> liveVideos = [];</span><br><span class="line">                <span class="keyword">let</span> match;</span><br><span class="line">                <span class="keyword">while</span> ((match = liveRegex.<span class="title function_">exec</span>(a)) !== <span class="literal">null</span>) &#123;</span><br><span class="line">                    liveVideos.<span class="title function_">push</span>(match[<span class="number">1</span>]); <span class="comment">// 提取带前缀的视频URL</span></span><br><span class="line">                &#125;</span><br><span class="line">                <span class="comment">// 从正文中剔除 [live] 链接，确保文字不显示干扰</span></span><br><span class="line">                <span class="keyword">const</span> cleanText = a.<span class="title function_">replace</span>(liveRegex, <span class="string">&#x27;&#x27;</span>).<span class="title function_">trim</span>();</span><br><span class="line"></span><br><span class="line">                <span class="comment">// --- 强制视频链接解析逻辑 ---</span></span><br><span class="line">                <span class="keyword">let</span> videoHtml = <span class="string">&quot;&quot;</span>;</span><br><span class="line">                <span class="comment">// YouTube和B站视频链接正则表达式</span></span><br><span class="line">                <span class="keyword">const</span> youtubeRegex = <span class="regexp">/(?:https?:\/\/)?(?:www\.)?(?:youtube\.com\/watch\?v=|youtu\.be\/)([a-zA-Z0-9_-]&#123;11&#125;)/</span>;</span><br><span class="line">                <span class="keyword">const</span> bilibiliRegex = <span class="regexp">/(?:https?:\/\/)?(?:www\.)?bilibili\.com\/video\/(BV[0-9A-Za-z]+)/</span>;</span><br><span class="line"></span><br><span class="line">                <span class="keyword">const</span> ytMatch = cleanText.<span class="title function_">match</span>(youtubeRegex); <span class="comment">// 在清洗后的文本中匹配YouTube链接</span></span><br><span class="line">                <span class="keyword">const</span> bMatch = cleanText.<span class="title function_">match</span>(bilibiliRegex); <span class="comment">// 在清洗后的文本中匹配B站链接</span></span><br><span class="line"></span><br><span class="line">                <span class="comment">// 如果匹配到YouTube或B站链接，则生成对应的iframe</span></span><br><span class="line">                <span class="keyword">if</span> (ytMatch) &#123;</span><br><span class="line">                    videoHtml = <span class="string">`&lt;div class=&quot;video-wrapper&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/<span class="subst">$&#123;ytMatch[<span class="number">1</span>]&#125;</span>&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;`</span>;</span><br><span class="line">                &#125; <span class="keyword">else</span> <span class="keyword">if</span> (bMatch) &#123;</span><br><span class="line">                    videoHtml = <span class="string">`&lt;div class=&quot;video-wrapper&quot;&gt;&lt;iframe src=&quot;https://www.bilibili.com/blackboard/html5mobileplayer.html?bvid=<span class="subst">$&#123;bMatch[<span class="number">1</span>]&#125;</span>&amp;as_wide=1&amp;high_quality=1&amp;danmaku=0&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;`</span>;</span><br><span class="line">                &#125;</span><br><span class="line"></span><br><span class="line">                <span class="comment">// 处理文本内容：替换复选框标记并将换行符转换为&lt;br&gt;</span></span><br><span class="line">                <span class="keyword">let</span> o = <span class="string">`&lt;div class=&quot;talk_content_text&quot;&gt;<span class="subst">$&#123;(e =&gt; (e || <span class="string">&quot;&quot;</span>).replace(/- \[ \]/g, <span class="string">&quot;[]&quot;</span>).replace(/- \[x\]/gi, <span class="string">&quot;[x]&quot;</span>).replace(/\n/g, <span class="string">&quot;&lt;br&gt;&quot;</span>))(cleanText)&#125;</span>&lt;/div&gt;`</span>;</span><br><span class="line"></span><br><span class="line">                <span class="comment">// 渲染视频</span></span><br><span class="line">                o += videoHtml;</span><br><span class="line"></span><br><span class="line">                <span class="comment">// 渲染图片 - 现在使用轮播图功能</span></span><br><span class="line">                <span class="keyword">const</span> r = (<span class="function"><span class="params">e</span> =&gt;</span> <span class="title class_">Array</span>.<span class="title function_">isArray</span>(e?.<span class="property">echo_files</span>) ?</span><br><span class="line">                    e.<span class="property">echo_files</span>.<span class="title function_">map</span>((<span class="function"><span class="params">e</span> =&gt;</span> e?.<span class="property">file</span> || e))</span><br><span class="line">                        .<span class="title function_">filter</span>(<span class="function"><span class="params">e</span> =&gt;</span> <span class="title class_">String</span>(e?.<span class="property">category</span> || <span class="string">&quot;&quot;</span>).<span class="title function_">toLowerCase</span>() === <span class="string">&quot;image&quot;</span>)</span><br><span class="line">                        .<span class="title function_">map</span>(<span class="function"><span class="params">e</span> =&gt;</span> &#123;</span><br><span class="line">                            <span class="comment">// 检查图片URL是否为相对路径，如果是则补全为完整URL</span></span><br><span class="line">                            <span class="keyword">let</span> url = e?.<span class="property">url</span>;</span><br><span class="line">                            <span class="keyword">if</span> (url &amp;&amp; url.<span class="title function_">startsWith</span>(<span class="string">&#x27;/api/files/images/&#x27;</span>)) &#123;</span><br><span class="line">                                url = xscConfig.<span class="property">ech0BaseUrl</span> + url;</span><br><span class="line">                            &#125;</span><br><span class="line">                            <span class="keyword">return</span> url;</span><br><span class="line">                        &#125;).<span class="title function_">filter</span>(<span class="title class_">Boolean</span>) : [])(e);</span><br><span class="line"></span><br><span class="line">                <span class="comment">// 生成轮播图HTML (传入提取的liveVideos数组)</span></span><br><span class="line">                <span class="keyword">if</span> (r.<span class="property">length</span> &gt; <span class="number">0</span>) &#123;</span><br><span class="line">                    o += <span class="title function_">carouselHtml</span>(r, liveVideos);</span><br><span class="line">                &#125;</span><br><span class="line"></span><br><span class="line">                <span class="comment">// 检查扩展类型并添加外部链接或音乐</span></span><br><span class="line">                <span class="keyword">if</span> (t === <span class="string">&quot;WEBSITE&quot;</span> || t === <span class="string">&quot;GITHUBPROJ&quot;</span>) o += <span class="title function_">c</span>(t, n);</span><br><span class="line">                <span class="keyword">if</span> (t === <span class="string">&quot;MUSIC&quot;</span>) o += (<span class="function">(<span class="params">e</span>) =&gt;</span> &#123;</span><br><span class="line">                    <span class="comment">// 解析音乐链接，识别网易云或QQ音乐</span></span><br><span class="line">                    <span class="keyword">const</span> t = (<span class="function">(<span class="params">e</span>) =&gt;</span> &#123;</span><br><span class="line">                        <span class="keyword">const</span> t = e?.<span class="property">url</span>;</span><br><span class="line">                        <span class="keyword">if</span> (!t) <span class="keyword">return</span> <span class="literal">null</span>;</span><br><span class="line">                        <span class="comment">// 根据URL判断音乐平台</span></span><br><span class="line">                        <span class="keyword">let</span> n = t.<span class="title function_">includes</span>(<span class="string">&quot;music.163.com&quot;</span>) ? <span class="string">&quot;netease&quot;</span> : t.<span class="title function_">includes</span>(<span class="string">&quot;y.qq.com&quot;</span>) ? <span class="string">&quot;tencent&quot;</span> : <span class="string">&quot;&quot;</span>;</span><br><span class="line">                        <span class="keyword">const</span> a = t.<span class="title function_">match</span>(<span class="regexp">/id=(\d+)/</span>); <span class="comment">// 提取音乐ID</span></span><br><span class="line">                        <span class="keyword">return</span> n &amp;&amp; a ? &#123; <span class="attr">server</span>: n, <span class="attr">id</span>: a[<span class="number">1</span>] &#125; : <span class="literal">null</span></span><br><span class="line">                    &#125;)(e);</span><br><span class="line">                    <span class="comment">// 返回MetingJS音乐播放器HTML</span></span><br><span class="line">                    <span class="keyword">return</span> t ? <span class="string">`&lt;meting-js server=&quot;<span class="subst">$&#123;t.server&#125;</span>&quot; type=&quot;song&quot; id=&quot;<span class="subst">$&#123;t.id&#125;</span>&quot; mini=&quot;false&quot;&gt;&lt;/meting-js&gt;`</span> : <span class="string">&quot;&quot;</span></span><br><span class="line">                &#125;)(n);</span><br><span class="line">                <span class="keyword">if</span> (t === <span class="string">&quot;VIDEO&quot;</span>) o += <span class="title function_">d</span>(n);</span><br><span class="line"></span><br><span class="line">                <span class="comment">// 返回格式化后的说说对象</span></span><br><span class="line">                <span class="keyword">return</span> &#123;</span><br><span class="line">                    <span class="attr">content</span>: o,</span><br><span class="line">                    <span class="attr">user</span>: xscConfig.<span class="property">nickname</span>, <span class="comment">// 用户名</span></span><br><span class="line">                    <span class="attr">avatar</span>: xscConfig.<span class="property">avatar</span>, <span class="comment">// 头像</span></span><br><span class="line">                    <span class="attr">date</span>: <span class="title function_">s</span>(e?.<span class="property">created_at</span>),   <span class="comment">// 格式化后的日期</span></span><br><span class="line">                    <span class="attr">tags</span>: <span class="title function_">l</span>(e),               <span class="comment">// 标签数组</span></span><br><span class="line">                    <span class="attr">quoteText</span>: cleanText      <span class="comment">// 原始文本内容（引用回复使用清洗后的文字）</span></span><br><span class="line">                &#125;</span><br><span class="line">            &#125;;</span><br><span class="line"></span><br><span class="line">        <span class="comment">// 引用回复函数：在评论框中填入引用文本并滚动到评论区</span></span><br><span class="line">        p = <span class="function"><span class="params">e</span> =&gt;</span> &#123;</span><br><span class="line">            <span class="comment">// 查找评论框元素（支持Element UI和Artalk）</span></span><br><span class="line">            <span class="keyword">const</span> t = <span class="variable language_">document</span>.<span class="title function_">querySelector</span>(<span class="string">&quot;.el-textarea__inner&quot;</span>) || <span class="variable language_">document</span>.<span class="title function_">querySelector</span>(<span class="string">&quot;.atk-textarea&quot;</span>);</span><br><span class="line">            <span class="keyword">if</span> (t) &#123;</span><br><span class="line">                t.<span class="property">value</span> = <span class="string">`&gt; <span class="subst">$&#123;e || <span class="string">&quot;&quot;</span>&#125;</span>\n\n`</span>; <span class="comment">// 在评论框中填入引用格式</span></span><br><span class="line">                t.<span class="title function_">focus</span>(); <span class="comment">// 聚焦到评论框</span></span><br><span class="line">                t.<span class="title function_">dispatchEvent</span>(<span class="keyword">new</span> <span class="title class_">Event</span>(<span class="string">&#x27;input&#x27;</span>, &#123; <span class="attr">bubbles</span>: <span class="literal">true</span> &#125;)); <span class="comment">// 触发输入事件</span></span><br><span class="line">                <span class="comment">// 查找评论区并平滑滚动到该区域</span></span><br><span class="line">                <span class="keyword">const</span> tw = <span class="variable language_">document</span>.<span class="title function_">querySelector</span>(<span class="string">&#x27;#twikoo&#x27;</span>) || <span class="variable language_">document</span>.<span class="title function_">querySelector</span>(<span class="string">&#x27;#artalk&#x27;</span>);</span><br><span class="line">                tw &amp;&amp; tw.<span class="title function_">scrollIntoView</span>(&#123; <span class="attr">behavior</span>: <span class="string">&#x27;smooth&#x27;</span> &#125;)</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;,</span><br><span class="line"></span><br><span class="line">            <span class="comment">// 布局更新函数：重新计算瀑布流布局并更新懒加载和灯箱效果</span></span><br><span class="line">            m = <span class="function">() =&gt;</span> &#123;</span><br><span class="line">                <span class="title function_">o</span>(<span class="string">&quot;#talk&quot;</span>), <span class="comment">// 重新计算瀑布流布局</span></span><br><span class="line">                    <span class="variable language_">window</span>.<span class="property">btf</span>?.<span class="property">loadLightbox</span> &amp;&amp; btf.<span class="title function_">loadLightbox</span>(<span class="variable language_">document</span>.<span class="title function_">querySelectorAll</span>(<span class="string">&quot;#talk img:not(.no-lightbox)&quot;</span>)), <span class="comment">// 加载灯箱效果</span></span><br><span class="line">                    <span class="variable language_">window</span>.<span class="property">lazyLoadInstance</span>?.<span class="property">update</span> &amp;&amp; lazyLoadInstance.<span class="title function_">update</span>(); <span class="comment">// 更新懒加载实例</span></span><br><span class="line"></span><br><span class="line">                <span class="comment">// 初始化轮播图功能</span></span><br><span class="line">                <span class="title function_">initCarousel</span>();</span><br><span class="line">            &#125;,</span><br><span class="line"></span><br><span class="line">            <span class="comment">// 初始化轮播图功能</span></span><br><span class="line">            initCarousel = <span class="function">() =&gt;</span> &#123;</span><br><span class="line">                <span class="keyword">const</span> carousels = <span class="variable language_">document</span>.<span class="title function_">querySelectorAll</span>(<span class="string">&#x27;.image-carousel&#x27;</span>);</span><br><span class="line"></span><br><span class="line">                carousels.<span class="title function_">forEach</span>(<span class="function"><span class="params">carousel</span> =&gt;</span> &#123;</span><br><span class="line">                    <span class="keyword">const</span> container = carousel.<span class="title function_">querySelector</span>(<span class="string">&#x27;.carousel-container&#x27;</span>);</span><br><span class="line"></span><br><span class="line">                    <span class="comment">// --- LivePhoto 交互逻辑开始 ---</span></span><br><span class="line">                    <span class="keyword">const</span> slidesWithLive = carousel.<span class="title function_">querySelectorAll</span>(<span class="string">&#x27;.carousel-slide.has-live&#x27;</span>);</span><br><span class="line">                    slidesWithLive.<span class="title function_">forEach</span>(<span class="function"><span class="params">slide</span> =&gt;</span> &#123;</span><br><span class="line">                        <span class="keyword">const</span> video = slide.<span class="title function_">querySelector</span>(<span class="string">&#x27;.live-video&#x27;</span>);</span><br><span class="line">                        <span class="keyword">const</span> img = slide.<span class="title function_">querySelector</span>(<span class="string">&#x27;img&#x27;</span>);</span><br><span class="line"></span><br><span class="line">                        <span class="comment">// 添加一个标志来跟踪视频是否已完成播放</span></span><br><span class="line">                        <span class="keyword">let</span> hasVideoPlayed = <span class="literal">false</span>;</span><br><span class="line"></span><br><span class="line">                        <span class="comment">// 鼠标进入：播放视频，隐藏图片</span></span><br><span class="line">                        slide.<span class="title function_">addEventListener</span>(<span class="string">&#x27;mouseenter&#x27;</span>, <span class="function">() =&gt;</span> &#123;</span><br><span class="line">                            <span class="comment">// 如果视频尚未播放过，或者已经播放完成但鼠标离开了再回来，则重新播放</span></span><br><span class="line">                            <span class="keyword">if</span> (!hasVideoPlayed) &#123;</span><br><span class="line">                                video.<span class="property">currentTime</span> = <span class="number">0</span>; <span class="comment">// 确保每次从头播放</span></span><br><span class="line">                                video.<span class="title function_">play</span>().<span class="title function_">catch</span>(<span class="function"><span class="params">e</span> =&gt;</span> <span class="variable language_">console</span>.<span class="title function_">warn</span>(<span class="string">&quot;LivePhoto播放被阻挡&quot;</span>));</span><br><span class="line">                                video.<span class="property">style</span>.<span class="property">opacity</span> = <span class="string">&quot;1&quot;</span>;</span><br><span class="line">                                img.<span class="property">style</span>.<span class="property">opacity</span> = <span class="string">&quot;0&quot;</span>;</span><br><span class="line">                                hasVideoPlayed = <span class="literal">true</span>;</span><br><span class="line">                            &#125;</span><br><span class="line">                        &#125;);</span><br><span class="line"></span><br><span class="line">                        <span class="comment">// 鼠标离开：停止视频，恢复图片显示，并重置播放状态</span></span><br><span class="line">                        slide.<span class="title function_">addEventListener</span>(<span class="string">&#x27;mouseleave&#x27;</span>, <span class="function">() =&gt;</span> &#123;</span><br><span class="line">                            video.<span class="title function_">pause</span>();</span><br><span class="line">                            video.<span class="property">currentTime</span> = <span class="number">0</span>; <span class="comment">// 重置进度</span></span><br><span class="line">                            video.<span class="property">style</span>.<span class="property">opacity</span> = <span class="string">&quot;0&quot;</span>;</span><br><span class="line">                            img.<span class="property">style</span>.<span class="property">opacity</span> = <span class="string">&quot;1&quot;</span>;</span><br><span class="line">                            hasVideoPlayed = <span class="literal">false</span>; <span class="comment">// 重置播放状态</span></span><br><span class="line">                        &#125;);</span><br><span class="line"></span><br><span class="line">                        <span class="comment">// 视频播放结束：恢复图片显示，但不重置播放状态</span></span><br><span class="line">                        video.<span class="title function_">addEventListener</span>(<span class="string">&#x27;ended&#x27;</span>, <span class="function">() =&gt;</span> &#123;</span><br><span class="line">                            video.<span class="property">style</span>.<span class="property">opacity</span> = <span class="string">&quot;0&quot;</span>;</span><br><span class="line">                            img.<span class="property">style</span>.<span class="property">opacity</span> = <span class="string">&quot;1&quot;</span>;</span><br><span class="line">                            <span class="comment">// 不重置hasVideoPlayed，保持为true表示视频已经播放完成</span></span><br><span class="line">                        &#125;);</span><br><span class="line">                    &#125;);</span><br><span class="line">                    <span class="comment">// --- LivePhoto 交互逻辑结束 ---</span></span><br><span class="line"></span><br><span class="line">                    <span class="keyword">if</span> (container.<span class="property">classList</span>.<span class="title function_">contains</span>(<span class="string">&#x27;single-image&#x27;</span>)) <span class="keyword">return</span>; <span class="comment">// 单张图片无需翻页处理</span></span><br><span class="line"></span><br><span class="line">                    <span class="keyword">const</span> slides = carousel.<span class="title function_">querySelectorAll</span>(<span class="string">&#x27;.carousel-slide&#x27;</span>);</span><br><span class="line">                    <span class="keyword">const</span> prevBtn = carousel.<span class="title function_">querySelector</span>(<span class="string">&#x27;.prev-btn&#x27;</span>);</span><br><span class="line">                    <span class="keyword">const</span> nextBtn = carousel.<span class="title function_">querySelector</span>(<span class="string">&#x27;.next-btn&#x27;</span>);</span><br><span class="line">                    <span class="keyword">const</span> indicators = carousel.<span class="title function_">querySelectorAll</span>(<span class="string">&#x27;.indicator&#x27;</span>);</span><br><span class="line">                    <span class="keyword">let</span> currentIndex = <span class="number">0</span>;</span><br><span class="line"></span><br><span class="line">                    <span class="comment">// 显示当前幻灯片</span></span><br><span class="line">                    <span class="keyword">const</span> <span class="title function_">showSlide</span> = (<span class="params">index</span>) =&gt; &#123;</span><br><span class="line">                        slides.<span class="title function_">forEach</span>(<span class="function">(<span class="params">slide, i</span>) =&gt;</span> &#123;</span><br><span class="line">                            slide.<span class="property">classList</span>.<span class="title function_">toggle</span>(<span class="string">&#x27;active&#x27;</span>, i === index);</span><br><span class="line">                        &#125;);</span><br><span class="line"></span><br><span class="line">                        indicators.<span class="title function_">forEach</span>(<span class="function">(<span class="params">indicator, i</span>) =&gt;</span> &#123;</span><br><span class="line">                            indicator.<span class="property">classList</span>.<span class="title function_">toggle</span>(<span class="string">&#x27;active&#x27;</span>, i === index);</span><br><span class="line">                        &#125;);</span><br><span class="line"></span><br><span class="line">                        currentIndex = index;</span><br><span class="line">                    &#125;;</span><br><span class="line"></span><br><span class="line">                    <span class="comment">// 下一张</span></span><br><span class="line">                    <span class="keyword">const</span> <span class="title function_">nextSlide</span> = (<span class="params"></span>) =&gt; &#123;</span><br><span class="line">                        <span class="keyword">const</span> nextIndex = (currentIndex + <span class="number">1</span>) % slides.<span class="property">length</span>;</span><br><span class="line">                        <span class="title function_">showSlide</span>(nextIndex);</span><br><span class="line">                    &#125;;</span><br><span class="line"></span><br><span class="line">                    <span class="comment">// 上一张</span></span><br><span class="line">                    <span class="keyword">const</span> <span class="title function_">prevSlide</span> = (<span class="params"></span>) =&gt; &#123;</span><br><span class="line">                        <span class="keyword">const</span> prevIndex = (currentIndex - <span class="number">1</span> + slides.<span class="property">length</span>) % slides.<span class="property">length</span>;</span><br><span class="line">                        <span class="title function_">showSlide</span>(prevIndex);</span><br><span class="line">                    &#125;;</span><br><span class="line"></span><br><span class="line">                    <span class="comment">// 绑定按钮事件</span></span><br><span class="line">                    <span class="keyword">if</span> (prevBtn) prevBtn.<span class="title function_">addEventListener</span>(<span class="string">&#x27;click&#x27;</span>, <span class="function">(<span class="params">e</span>) =&gt;</span> &#123; e.<span class="title function_">preventDefault</span>(); e.<span class="title function_">stopPropagation</span>(); <span class="title function_">prevSlide</span>(); &#125;);</span><br><span class="line">                    <span class="keyword">if</span> (nextBtn) nextBtn.<span class="title function_">addEventListener</span>(<span class="string">&#x27;click&#x27;</span>, <span class="function">(<span class="params">e</span>) =&gt;</span> &#123; e.<span class="title function_">preventDefault</span>(); e.<span class="title function_">stopPropagation</span>(); <span class="title function_">nextSlide</span>(); &#125;);</span><br><span class="line"></span><br><span class="line">                    <span class="comment">// 绑定指示器事件</span></span><br><span class="line">                    indicators.<span class="title function_">forEach</span>(<span class="function">(<span class="params">indicator, index</span>) =&gt;</span> &#123;</span><br><span class="line">                        indicator.<span class="title function_">addEventListener</span>(<span class="string">&#x27;click&#x27;</span>, <span class="function">(<span class="params">e</span>) =&gt;</span> &#123;</span><br><span class="line">                            e.<span class="title function_">preventDefault</span>();</span><br><span class="line">                            e.<span class="title function_">stopPropagation</span>();</span><br><span class="line">                            <span class="title function_">showSlide</span>(index);</span><br><span class="line">                        &#125;);</span><br><span class="line">                    &#125;);</span><br><span class="line"></span><br><span class="line">                    <span class="comment">// 键盘支持</span></span><br><span class="line">                    container.<span class="title function_">addEventListener</span>(<span class="string">&#x27;keydown&#x27;</span>, <span class="function">(<span class="params">e</span>) =&gt;</span> &#123;</span><br><span class="line">                        <span class="keyword">if</span> (e.<span class="property">key</span> === <span class="string">&#x27;ArrowLeft&#x27;</span>) <span class="title function_">prevSlide</span>();</span><br><span class="line">                        <span class="keyword">if</span> (e.<span class="property">key</span> === <span class="string">&#x27;ArrowRight&#x27;</span>) <span class="title function_">nextSlide</span>();</span><br><span class="line">                    &#125;);</span><br><span class="line">                &#125;);</span><br><span class="line">            &#125;,</span><br><span class="line"></span><br><span class="line">            <span class="comment">// 渲染说说列表函数：将数据转换为DOM元素并添加到页面</span></span><br><span class="line">            h = <span class="function"><span class="params">e</span> =&gt;</span> &#123;</span><br><span class="line">                <span class="comment">// 将数据映射为DOM元素并添加到容器中</span></span><br><span class="line">                e.<span class="title function_">map</span>(u).<span class="title function_">forEach</span>((<span class="function"><span class="params">e</span> =&gt;</span> r.<span class="title function_">appendChild</span>((<span class="function"><span class="params">e</span> =&gt;</span> &#123;</span><br><span class="line">                    <span class="comment">// 创建说说项容器</span></span><br><span class="line">                    <span class="keyword">const</span> t = <span class="variable language_">document</span>.<span class="title function_">createElement</span>(<span class="string">&quot;div&quot;</span>); t.<span class="property">className</span> = <span class="string">&quot;talk_item card-shadow&quot;</span>;</span><br><span class="line"></span><br><span class="line">                    <span class="comment">// 创建元信息区域（头像和用户名）</span></span><br><span class="line">                    <span class="keyword">const</span> n = <span class="variable language_">document</span>.<span class="title function_">createElement</span>(<span class="string">&quot;div&quot;</span>); n.<span class="property">className</span> = <span class="string">&quot;talk_meta&quot;</span>;</span><br><span class="line"></span><br><span class="line">                    <span class="comment">// 创建头像图片元素</span></span><br><span class="line">                    <span class="keyword">const</span> a = <span class="variable language_">document</span>.<span class="title function_">createElement</span>(<span class="string">&quot;img&quot;</span>); a.<span class="property">className</span> = <span class="string">&quot;no-lightbox avatar&quot;</span>; a.<span class="property">src</span> = e.<span class="property">avatar</span>;</span><br><span class="line"></span><br><span class="line">                    <span class="comment">// 创建用户信息容器</span></span><br><span class="line">                    <span class="keyword">const</span> r = <span class="variable language_">document</span>.<span class="title function_">createElement</span>(<span class="string">&quot;div&quot;</span>); r.<span class="property">className</span> = <span class="string">&quot;info&quot;</span>;</span><br><span class="line"></span><br><span class="line">                    <span class="comment">// 创建用户名标签，包含认证标识</span></span><br><span class="line">                    <span class="keyword">const</span> o = <span class="variable language_">document</span>.<span class="title function_">createElement</span>(<span class="string">&quot;span&quot;</span>); o.<span class="property">className</span> = <span class="string">&quot;talk_nick&quot;</span>;</span><br><span class="line">                    o.<span class="property">innerHTML</span> = <span class="string">`<span class="subst">$&#123;e.user&#125;</span> &lt;svg viewBox=&quot;0 0 512 512&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; class=&quot;is-badge icon&quot; style=&quot;width:14px;margin-left:4px;vertical-align:middle;&quot;&gt;&lt;path d=&quot;m512 268c0 17.9-4.3 34.5-12.9 49.7s-20.1 27.1-34.6 35.4c.4 2.7.6 6.9.6 12.6 0 27.1-9.1 50.1-27.1 69.1-18.1 19.1-39.9 28.6-65.4 28.6-11.4 0-22.3-2.1-32.6-6.3-8 16.4-19.5 29.6-34.6 39.7-15 10.2-31.5 15.2-49.4 15.2-18.3 0-34.9-4.9-49.7-14.9-14.9-9.9-26.3-23.2-34.3-40-10.3 4.2-21.1 6.3-32.6 6.3-25.5 0-47.4-9.5-65.7-28.6-18.3-19-27.4-42.1-27.4-69.1 0-3 .4-7.2 1.1-12.6-14.5-8.4-26-20.2-34.6-35.4-8.5-15.2-12.8-31.8-12.8-49.7 0-19 4.8-36.5 14.3-52.3s22.3-27.5 38.3-35.1c-4.2-11.4-6.3-22.9-6.3-34.3 0-27 9.1-50.1 27.4-69.1s40.2-28.6 65.7-28.6c11.4 0 22.3 2.1 32.6 6.3 8-16.4 19.5-29.6 34.6-39.7 15-10.1 31.5-15.2 49.4-15.2s34.4 5.1 49.4 15.1c15 10.1 26.6 23.3 34.6 39.7 10.3-4.2 21.1-6.3 32.6-6.3 25.5 0 47.3 9.5 65.4 28.6s27.1 42.1 27.1 69.1c0 12.6-1.9 24-5.7 34.3 16 7.6 28.8 19.3 38.3 35.1 9.5 15.9 14.3 33.4 14.3 52.4zm-266.9 77.1 105.7-158.3c2.7-4.2 3.5-8.8 2.6-13.7-1-4.9-3.5-8.8-7.7-11.4-4.2-2.7-8.8-3.6-13.7-2.9-5 .8-9 3.2-12 7.4l-93.1 140-42.9-42.8c-3.8-3.8-8.2-5.6-13.1-5.4-5 .2-9.3 2-13.1 5.4-3.4 3.4-5.1 7.7-5.1 12.9 0 5.1 1.7 9.4 5.1 12.9l58.9 58.9 2.9 2.3c3.4 2.3 6.9 3.4 10.3 3.4 6.7-.1 11.8-2.9 15.2-8.7z&quot; fill=&quot;#1da1f2&quot;&gt;&lt;/path&gt;&lt;/svg&gt;`</span>;</span><br><span class="line"></span><br><span class="line">                    <span class="comment">// 创建日期标签</span></span><br><span class="line">                    <span class="keyword">const</span> i = <span class="variable language_">document</span>.<span class="title function_">createElement</span>(<span class="string">&quot;span&quot;</span>); i.<span class="property">className</span> = <span class="string">&quot;talk_date&quot;</span>; i.<span class="property">textContent</span> = e.<span class="property">date</span>;</span><br><span class="line"></span><br><span class="line">                    <span class="comment">// 组装元信息区域</span></span><br><span class="line">                    r.<span class="title function_">appendChild</span>(o); r.<span class="title function_">appendChild</span>(i); n.<span class="title function_">appendChild</span>(a); n.<span class="title function_">appendChild</span>(r);</span><br><span class="line"></span><br><span class="line">                    <span class="comment">// 创建内容区域</span></span><br><span class="line">                    <span class="keyword">const</span> l = <span class="variable language_">document</span>.<span class="title function_">createElement</span>(<span class="string">&quot;div&quot;</span>); l.<span class="property">className</span> = <span class="string">&quot;talk_content&quot;</span>; l.<span class="property">innerHTML</span> = e.<span class="property">content</span>;</span><br><span class="line"></span><br><span class="line">                    <span class="comment">// 创建底部区域</span></span><br><span class="line">                    <span class="keyword">const</span> s = <span class="variable language_">document</span>.<span class="title function_">createElement</span>(<span class="string">&quot;div&quot;</span>); s.<span class="property">className</span> = <span class="string">&quot;talk_bottom&quot;</span>;</span><br><span class="line"></span><br><span class="line">                    <span class="comment">// 创建标签容器</span></span><br><span class="line">                    <span class="keyword">const</span> c = <span class="variable language_">document</span>.<span class="title function_">createElement</span>(<span class="string">&quot;div&quot;</span>), d = <span class="variable language_">document</span>.<span class="title function_">createElement</span>(<span class="string">&quot;span&quot;</span>);</span><br><span class="line">                    d.<span class="property">className</span> = <span class="string">&quot;talk_tag&quot;</span>; d.<span class="property">textContent</span> = <span class="string">`🏷️ <span class="subst">$&#123;e.tags.join(<span class="string">&quot; / &quot;</span>)&#125;</span>`</span>;</span><br><span class="line">                    c.<span class="title function_">appendChild</span>(d);</span><br><span class="line"></span><br><span class="line">                    <span class="comment">// 创建评论按钮</span></span><br><span class="line">                    <span class="keyword">const</span> u = <span class="variable language_">document</span>.<span class="title function_">createElement</span>(<span class="string">&quot;a&quot;</span>);</span><br><span class="line">                    u.<span class="property">className</span> = <span class="string">&quot;comment_btn&quot;</span>;</span><br><span class="line">                    u.<span class="property">href</span> = <span class="string">&quot;javascript:;&quot;</span>;</span><br><span class="line">                    u.<span class="title function_">addEventListener</span>(<span class="string">&quot;click&quot;</span>, (<span class="function">() =&gt;</span> <span class="title function_">p</span>(e.<span class="property">quoteText</span>))); <span class="comment">// 点击时触发引用回复</span></span><br><span class="line">                    u.<span class="property">innerHTML</span> = <span class="string">&#x27;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 512 512&quot; style=&quot;width:16px;fill:currentColor;&quot;&gt;&lt;path d=&quot;M256 32C114.6 32 0 125.1 0 240c0 47.6 19.9 91.2 52.9 126.3C38 405.7 7 439.1 6.5 439.5c-6.6 7-8.4 17.2-4.6 26S14.4 480 24 480c61.5 0 110-25.7 139.1-46.3C192 442.8 223.2 448 256 448c141.4 0 256-93.1 256-208S397.4 32 256 32zm0 368c-26.7 0-53.1-4.1-78.4-12.1l-22.7-7.2-19.5 13.8c-14.3 10.1-33.9 21.4-57.5 29 7.3-12.1 14.4-25.7 19.9-40.2l10.6-28.1-20.6-21.8C69.7 314.1 48 282.2 48 240c0-88.2 93.3-160 208-160s208 71.8 208 160-93.3 160-208 160z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&#x27;</span>;</span><br><span class="line"></span><br><span class="line">                    <span class="comment">// 组装底部区域</span></span><br><span class="line">                    <span class="keyword">return</span> s.<span class="title function_">appendChild</span>(c), s.<span class="title function_">appendChild</span>(u), t.<span class="title function_">appendChild</span>(n), t.<span class="title function_">appendChild</span>(l), t.<span class="title function_">appendChild</span>(s), t</span><br><span class="line">                &#125;)(e)))),</span><br><span class="line">                    <span class="title function_">m</span>(); <span class="comment">// 执行布局更新</span></span><br><span class="line"></span><br><span class="line">                <span class="comment">// 为视频和图片添加加载事件监听器</span></span><br><span class="line">                <span class="built_in">setTimeout</span>(<span class="function">() =&gt;</span> &#123;</span><br><span class="line">                    <span class="title function_">m</span>(); <span class="comment">// 初次渲染后再次调用瀑布流布局</span></span><br><span class="line"></span><br><span class="line">                    <span class="comment">// 为所有媒体元素添加加载完成事件监听</span></span><br><span class="line">                    r.<span class="title function_">querySelectorAll</span>(<span class="string">&quot;img, iframe, meting-js&quot;</span>).<span class="title function_">forEach</span>((<span class="function"><span class="params">e</span> =&gt;</span> &#123;</span><br><span class="line">                        e.<span class="title function_">addEventListener</span>(<span class="string">&quot;load&quot;</span>, m, &#123; <span class="attr">once</span>: !<span class="number">0</span> &#125;);</span><br><span class="line"></span><br><span class="line">                        <span class="keyword">if</span> (e.<span class="property">complete</span> &amp;&amp; (e.<span class="property">tagName</span> === <span class="string">&#x27;IMG&#x27;</span> || e.<span class="property">tagName</span> === <span class="string">&#x27;IFRAME&#x27;</span>)) &#123;</span><br><span class="line">                            <span class="title function_">m</span>();</span><br><span class="line">                        &#125;</span><br><span class="line">                    &#125;));</span><br><span class="line"></span><br><span class="line">                    <span class="comment">// 监听 MetingJS 初始化完成事件</span></span><br><span class="line">                    <span class="keyword">const</span> <span class="title function_">initMetingObserver</span> = (<span class="params"></span>) =&gt; &#123;</span><br><span class="line">                        <span class="keyword">const</span> metingElements = r.<span class="title function_">querySelectorAll</span>(<span class="string">&#x27;meting-js&#x27;</span>);</span><br><span class="line">                        <span class="keyword">if</span> (metingElements.<span class="property">length</span> &gt; <span class="number">0</span>) &#123;</span><br><span class="line">                            <span class="keyword">const</span> observer = <span class="keyword">new</span> <span class="title class_">MutationObserver</span>(<span class="function">(<span class="params">mutationsList</span>) =&gt;</span> &#123;</span><br><span class="line">                                <span class="keyword">let</span> shouldRefresh = <span class="literal">false</span>;</span><br><span class="line">                                <span class="keyword">for</span> (<span class="keyword">let</span> mutation <span class="keyword">of</span> mutationsList) &#123;</span><br><span class="line">                                    <span class="keyword">if</span> (mutation.<span class="property">type</span> === <span class="string">&#x27;childList&#x27;</span>) &#123;</span><br><span class="line">                                        mutation.<span class="property">addedNodes</span>.<span class="title function_">forEach</span>(<span class="function"><span class="params">node</span> =&gt;</span> &#123;</span><br><span class="line">                                            <span class="keyword">if</span> (node.<span class="property">nodeType</span> === <span class="number">1</span> &amp;&amp; (node.<span class="property">classList</span>.<span class="title function_">contains</span>(<span class="string">&#x27;aplayer&#x27;</span>) || node.<span class="title function_">querySelector</span>(<span class="string">&#x27;.aplayer&#x27;</span>))) &#123;</span><br><span class="line">                                                shouldRefresh = <span class="literal">true</span>;</span><br><span class="line">                                            &#125;</span><br><span class="line">                                        &#125;);</span><br><span class="line">                                        <span class="keyword">if</span> (shouldRefresh) &#123;</span><br><span class="line">                                            <span class="built_in">setTimeout</span>(<span class="function">() =&gt;</span> &#123; <span class="title function_">m</span>(); &#125;, <span class="number">100</span>);</span><br><span class="line">                                            <span class="keyword">break</span>;</span><br><span class="line">                                        &#125;</span><br><span class="line">                                    &#125;</span><br><span class="line">                                &#125;</span><br><span class="line">                            &#125;);</span><br><span class="line">                            metingElements.<span class="title function_">forEach</span>(<span class="function"><span class="params">metingEl</span> =&gt;</span> &#123;</span><br><span class="line">                                observer.<span class="title function_">observe</span>(metingEl, &#123; <span class="attr">childList</span>: <span class="literal">true</span>, <span class="attr">subtree</span>: <span class="literal">true</span> &#125;);</span><br><span class="line">                            &#125;);</span><br><span class="line">                            <span class="built_in">setTimeout</span>(<span class="function">() =&gt;</span> &#123; observer.<span class="title function_">disconnect</span>(); &#125;, <span class="number">5000</span>);</span><br><span class="line">                        &#125;</span><br><span class="line">                    &#125;;</span><br><span class="line"></span><br><span class="line">                    <span class="built_in">setTimeout</span>(initMetingObserver, <span class="number">100</span>);</span><br><span class="line"></span><br><span class="line">                &#125;, <span class="number">100</span>);</span><br><span class="line"></span><br><span class="line">                n.<span class="property">afterRenderTimer</span> = <span class="variable language_">window</span>.<span class="built_in">setTimeout</span>(m, <span class="number">300</span>)</span><br><span class="line">            &#125;;</span><br><span class="line"></span><br><span class="line">        <span class="comment">// 防止图片链接默认行为</span></span><br><span class="line">        <span class="title function_">preventImageLinkDefault</span>();</span><br><span class="line"></span><br><span class="line">        <span class="comment">// 获取数据并渲染的立即执行函数</span></span><br><span class="line">        (<span class="function">() =&gt;</span> &#123;</span><br><span class="line">            <span class="keyword">const</span> n = <span class="variable language_">localStorage</span>.<span class="title function_">getItem</span>(e),</span><br><span class="line">                a = <span class="title class_">Number</span>(<span class="variable language_">localStorage</span>.<span class="title function_">getItem</span>(t)),</span><br><span class="line">                r = <span class="title class_">Date</span>.<span class="title function_">now</span>();</span><br><span class="line"></span><br><span class="line">            <span class="keyword">if</span> (n &amp;&amp; a &amp;&amp; r - a &lt; <span class="number">18e5</span>) &#123;</span><br><span class="line">                <span class="title function_">h</span>(<span class="title class_">JSON</span>.<span class="title function_">parse</span>(n))</span><br><span class="line">            &#125; <span class="keyword">else</span> &#123;</span><br><span class="line">                <span class="title function_">fetch</span>(xscConfig.<span class="property">apiUrl</span>, &#123;</span><br><span class="line">                    <span class="attr">method</span>: <span class="string">&quot;POST&quot;</span>,</span><br><span class="line">                    <span class="attr">headers</span>: &#123; <span class="string">&quot;Content-Type&quot;</span>: <span class="string">&quot;application/json&quot;</span> &#125;,</span><br><span class="line">                    <span class="attr">body</span>: <span class="title class_">JSON</span>.<span class="title function_">stringify</span>(&#123; <span class="attr">page</span>: <span class="number">1</span>, <span class="attr">pageSize</span>: <span class="number">30</span> &#125;)</span><br><span class="line">                &#125;)</span><br><span class="line">                    .<span class="title function_">then</span>(<span class="function"><span class="params">e</span> =&gt;</span> e.<span class="title function_">json</span>()).<span class="title function_">then</span>(<span class="function"><span class="params">n</span> =&gt;</span> &#123;</span><br><span class="line">                        <span class="keyword">if</span> (<span class="number">1</span> !== n?.<span class="property">code</span>) <span class="keyword">return</span>;</span><br><span class="line">                        <span class="variable language_">localStorage</span>.<span class="title function_">setItem</span>(e, <span class="title class_">JSON</span>.<span class="title function_">stringify</span>(n.<span class="property">data</span>.<span class="property">items</span>)),</span><br><span class="line">                            <span class="variable language_">localStorage</span>.<span class="title function_">setItem</span>(t, r.<span class="title function_">toString</span>()),</span><br><span class="line">                            <span class="title function_">h</span>(n.<span class="property">data</span>.<span class="property">items</span>)</span><br><span class="line">                    &#125;)</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;)()</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="variable language_">window</span>.<span class="property">initShuoshuoPage</span> = r,</span><br><span class="line">        n.<span class="property">listenersBound</span> || (<span class="variable language_">document</span>.<span class="title function_">addEventListener</span>(<span class="string">&quot;pjax:complete&quot;</span>, r), n.<span class="property">listenersBound</span> = !<span class="number">0</span>),</span><br><span class="line">        <span class="title function_">r</span>()</span><br><span class="line">&#125;();</span><br></pre></td></tr></table></figure></div></details><p>说说页面js二改代码，如您有需要，可以在上方自取，再次重申，原作者:<a href="https://blog.liushen.fun/posts/e0b4d5a/">LiuShen</a>  </p><h4 id="OpenClaw"><a href="#OpenClaw" class="headerlink" title="OpenClaw"></a>OpenClaw</h4><p>最近很火的OpenClaw，本来我对这个东西是有一些忌惮的，毕竟大部分人都是部署在自己的电脑上，我是一个对隐私信息很在意的人，我不希望我的隐私因为一点事情而泄露<br>但是由于我急需一个可以在微信上对接的AI智能体，并且考虑到这个东西的开源，我决定尝试一下<br>我并没有把他像大多数人那样当作一个可以调用电脑的AI，反而我更希望他不能调用我电脑上的任何东西，所以我很谨慎<br>只是对接了AI接口和微信的接口，让他成为我的微信AI助理而已<br>不过这样的结果已经让我心满意足，我把它部署在了和我博客同一台服务器上，出乎意料的好用<br><img src="https://img.xscnet.cn//i/2026/03/25/69c3a4e6e2fd8.webp"><br>应该说是我剥夺了”ta”接触到我的世界的机会，甚至连图片和文件的权限我也没有给他开放<br>……  </p><p>算是一次不错的体验<br>但肯定不能作为我的主力来使用  </p><h2 id="结语"><a href="#结语" class="headerlink" title="结语"></a>结语</h2><p>发布了这篇文章后肯定又是很长一段时间的销声匿迹，不过会不时的在<a href="https://www.xscnet.cn/mmtalk">说说页面</a>发布一些日常的琐碎小事  </p><p>各位保重，身体是革命的本钱，注意自己的身心健康才是第一位的  </p>]]>
    </content>
    <id>https://www.xscnet.cn/posts/p3320260325/</id>
    <link href="https://www.xscnet.cn/posts/p3320260325/"/>
    <published>2026-03-24T16:00:00.000Z</published>
    <summary>等一场姗姗来迟的东北春日，记一次十八岁的体检，再为博客添一处安放琐碎的角落——三月，在平凡里悄悄生长。</summary>
    <title>三月小记：春雨、体检与博客二三事</title>
    <updated>2026-03-24T16:00:00.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>Mete0r</name>
    </author>
    <category term="博客" scheme="https://www.xscnet.cn/categories/%E5%8D%9A%E5%AE%A2/"/>
    <category term="生活" scheme="https://www.xscnet.cn/tags/%E7%94%9F%E6%B4%BB/"/>
    <category term="随笔" scheme="https://www.xscnet.cn/tags/%E9%9A%8F%E7%AC%94/"/>
    <category term="博客" scheme="https://www.xscnet.cn/tags/%E5%8D%9A%E5%AE%A2/"/>
    <content>
      <![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>今天是周六，本该上学的，但是最近有很多学习上的事情压在身上，决定放纵一天，好好的休息一下<br>游戏已经玩腻了，翻看着Steam的游戏库，却不知从何下手  </p><h2 id="游戏"><a href="#游戏" class="headerlink" title="游戏"></a>游戏</h2><p>在以前，我天真认为游戏是我这辈子遇到过最好的消遣手段，一辈子也不会放下<br>但是直到今天，我开始思考，游戏对生活有什么作用呢？<br>玩了很多的游戏，但是没有发现什么作用，FPS类的游戏只会让自己的心情变得不愉悦  </p><h4 id="Minecraft"><a href="#Minecraft" class="headerlink" title="Minecraft"></a>Minecraft</h4><p>Minecraft是我小时候最喜欢玩的一款游戏，游戏时长也肯定突破了一千小时的大关  </p><p>可是随着年龄的增长，结实到的朋友也更加成熟，我开始逐渐抛弃了Minecraft<br>这个承载着我童年回忆的游戏，一点一点的淡出了我的视线，有时候没有事情干了，就一个人开个存档，漫无目的的玩一会，也就退出了游戏  </p><p>随着朋友的引导，我接触到了CSGO这款游戏  </p><h4 id="CSGO"><a href="#CSGO" class="headerlink" title="CSGO"></a>CSGO</h4><p>当初刚刚接触的时候是初一，男孩子嘛，总归是对枪战类游戏有独特的兴趣<br>从刚刚接触时候的欣喜，到后来每一局游戏都以胜利为目的，经常和队友闹得很不愉快  </p><p><strong><blur>到了这时，玩游戏的初衷还是为了快乐吗？亦或者已经成了我逃避残酷的现实世界的方式了呢？</blur></strong>  </p><p><img src="https://img.xscnet.cn//i/2026/03/07/69ac4738283a5.png" alt="1772898103292.png"><br>从小玩到大的游戏，刚开始因为账号总是会忘记，所以接连换了好几个号，等到稳定下来之后，回看这么几个号的游戏时长也要接近一千小时大关了  </p><p>从CSGO到CS2，一转眼陪着这个游戏经历了一个大版本的更新  </p><p>以前的我，只能用玩物丧志形容才不为过  </p><h4 id="游戏对我的影响"><a href="#游戏对我的影响" class="headerlink" title="游戏对我的影响"></a>游戏对我的影响</h4><p>显然，对于我来说，我经常玩的这些游戏对我的生活可谓是没有任何的积极影响<br>也体现在我的学业上<br>初中三年，我一直沉浸在游戏的世界里，家里给我报了补习班也是时刻想着快点熬完一个半小时回家打游戏<br>直到中考的时候，我意识到不学好像真的上不了高中了  </p><p>我在最后一个月猛学，最后好歹考上了一个正常的普通高中，心中那块悬着的巨石也同时落地了  </p><p>我所在的小县城只有三所普通的汉族高中，所谓普通高中也就是除了职校和私人高中外的公立学校<br>当然，由于我初中三年几乎全都用在游戏上了，也无暇顾及学习，理所应当的就是上了需要分数最低的普通高中  </p><p><strong><blur>不过我是压着顶线进去的</blur></strong>  </p><p><strong>回望过去，发现如果不是沉迷游戏，也不至于到今天这么狼狈的地步</strong>  </p><h4 id="近期"><a href="#近期" class="headerlink" title="近期"></a>近期</h4><p>近期，我在我和朋友们的群聊中发言频率明显降低了，因为我发现一旦我不玩游戏，真的没有什么话题好聊的<br>最近他们在玩一款新的游戏，叫卡拉比丘，我就偶尔听到过这个游戏的名字，也没了解过<br>前些阵子也有些蠢蠢欲动，但是想想，还有一百天高考了，游戏对我的魅惑力反而没有那么大了  </p><hr><h2 id="博客方面"><a href="#博客方面" class="headerlink" title="博客方面"></a>博客方面</h2><p>由于脱离了游戏，我学习的闲暇之余多出来了很多时间可以支配，我选择了躺在床上听爽文小说<br>但是最近想着博客搁置了很久，许多博友的往来渐渐减少，也想着在不耽误学习的情况下多发表一些文章来寄存一些情绪  </p><h4 id="博客框架"><a href="#博客框架" class="headerlink" title="博客框架"></a>博客框架</h4><p>2026新年新气象，原本的<a href="https://valaxy.site/">Valaxy框架</a>是一个新进框架，虽然各种性能表现都很优秀但是兼容性和社区表现却不尽如人意  </p><p>困扰我多时的nodejs问题接踵而至，我当时甚至一度不敢更改我Valaxy博客的文件，生怕哪天他“罢工”给我看<br>当时的处境是在生成博客文件时会有很多的报错，我也无心解决，既然不耽误正常使用就先这么样吧  </p><p>但是时间久了就发现了很多问题，比如在Valaxy时代的时候我的博客主页点击文章卡片没有反应，只有点击文章标题才可以进入文章页面<br>各种配套插件稀少，只能靠自己编辑vue文件来完成<br>这显然不是我想要的  </p><p>索性一不做二不休，趁着最近时间宽裕，花了一个下午把博客换成了Hexo框架<br>不得不说，Hexo的完美生态链做到了配置文件中一目了然的配置，博客核心和插件都在&#x2F;_conmfig.yml文件中<br>而主题的插件也是都在&#x2F;themes&#x2F;hexo-theme-stellar&#x2F;_conmfig.yml文件中<br>结构清晰整洁，让我节省了不少的时间，也降低了我的试错成本  </p><h4 id="配套设施"><a href="#配套设施" class="headerlink" title="配套设施"></a>配套设施</h4><p>得益于Hexo的优秀生态链<br>我本以为配置会比较复杂繁琐，结果只是在配置文件里动动手指的事让我很开心  </p><p>例如我的链接跳转页面，很早我就知道大佬<a href="https://liushen.fun/">Liu神</a>曾开发过一套开源的Hexo-Safe-Go插件<br>也就是动动手指的功夫就安装好了  </p><details class="tag-plugin colorful folding" color="yellow" child="codeblock"><summary><p>&#x2F;_config.yml</p></summary><div class="body"><p>配置文件也是超级简单的在&#x2F;_config.yml文件中添加以下内容  </p> <figure class="highlight yml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># hexo-safego安全跳转插件</span></span><br><span class="line"><span class="comment"># see https://blog.liushen.fun/posts/1dfd1f41/</span></span><br><span class="line"><span class="attr">hexo_safego:</span></span><br><span class="line">  <span class="comment"># 基本功能设置</span></span><br><span class="line">  <span class="attr">general:</span></span><br><span class="line">    <span class="attr">enable:</span> <span class="literal">true</span>                <span class="comment"># 启用插件</span></span><br><span class="line">    <span class="attr">enable_base64_encode:</span> <span class="literal">true</span>  <span class="comment"># 使用 Base64 编码</span></span><br><span class="line">    <span class="attr">enable_target_blank:</span> <span class="literal">true</span>   <span class="comment"># 从新窗口打开跳转页面</span></span><br><span class="line"></span><br><span class="line">  <span class="comment"># 安全设置</span></span><br><span class="line">  <span class="attr">security:</span></span><br><span class="line">    <span class="attr">url_param_name:</span> <span class="string">&#x27;url&#x27;</span>         <span class="comment"># URL 参数名</span></span><br><span class="line">    <span class="attr">html_file_name:</span> <span class="string">&#x27;go.html&#x27;</span>   <span class="comment"># 重定向页面的文件名</span></span><br><span class="line">    <span class="attr">ignore_attrs:</span>               <span class="comment"># 忽略处理的 HTML 结构</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">&#x27;data-fancybox&#x27;</span></span><br><span class="line"></span><br><span class="line">  <span class="comment"># 容器与页面设置</span></span><br><span class="line">  <span class="attr">scope:</span></span><br><span class="line">    <span class="comment"># apply_containers:           # 应用的容器选择器</span></span><br><span class="line">      <span class="comment"># - &#x27;#article-container&#x27;</span></span><br><span class="line">    <span class="attr">apply_pages:</span>                <span class="comment"># 应用的页面路径</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">&quot;/&quot;</span></span><br><span class="line"></span><br><span class="line">    <span class="attr">exclude_pages:</span>              <span class="comment"># 排除的页面路径</span></span><br><span class="line"></span><br><span class="line">  <span class="comment"># 域名白名单</span></span><br><span class="line">  <span class="attr">whitelist:</span></span><br><span class="line">    <span class="attr">domain_whitelist:</span>           <span class="comment"># 允许的白名单域名，通过字符串匹配实现</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">&quot;xscnet.cn&quot;</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">&quot;xscnas.top&quot;</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">&quot;liushen.fun&quot;</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">&quot;koxiuqiu.cn&quot;</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">&quot;beian.miit.gov.cn&quot;</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">&quot;blogscn.fun&quot;</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">&quot;foreverblog.cn&quot;</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">&quot;travellings.cn&quot;</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">&quot;travel.moe&quot;</span></span><br><span class="line"></span><br><span class="line">  <span class="comment"># 页面外观设置</span></span><br><span class="line">  <span class="attr">appearance:</span></span><br><span class="line">    <span class="attr">avatar:</span> <span class="string">https://img.xscnet.cn//i/2025/10/30/6903707e73637.png</span>    <span class="comment"># 跳转页面头像路径</span></span><br><span class="line">    <span class="attr">title:</span> <span class="string">&quot;跳转中...&quot;</span>            <span class="comment"># 跳转页面标题</span></span><br><span class="line">    <span class="attr">subtitle:</span> <span class="string">&quot;安全跳转&quot;</span>         <span class="comment"># 跳转页面副标题</span></span><br><span class="line">    <span class="attr">darkmode:</span> <span class="string">auto</span>              <span class="comment"># 是否启用深色模式</span></span><br><span class="line">    <span class="attr">countdowntime:</span> <span class="number">10</span>            <span class="comment"># 跳转页面倒计时秒数，如果设置为负数则为不自动跳转</span></span><br><span class="line"></span><br><span class="line">  <span class="comment"># 调试设置</span></span><br><span class="line">  <span class="attr">debug:</span></span><br><span class="line">    <span class="attr">enable:</span> <span class="literal">false</span>               <span class="comment"># 启用调试模式</span></span><br></pre></td></tr></table></figure></div></details><h4 id="友链方案"><a href="#友链方案" class="headerlink" title="友链方案"></a>友链方案</h4><p>在以前添加友链一直困扰着我，总不能每次为了添加那么一行的链接都得先打开本地IDE然后git push吧<br>于是我就用最简单的html+nodeserver做了一个简单的友链管理界面，负责在我服务器内的json文件中增删链接<br>但是美中不足的就是每次服务器因为一些事情重启，就需要手动开启后端server服务  </p><p>直到我遇到了现在的这个主题  </p><p>让我最震惊的是这个主题的作者不光想到了主题的美化，甚至还有自动化友链的成熟方案<br><a href="https://xaoxuu.com/wiki/stellar/tag-plugins/data/#%E5%8F%8B%E9%93%BE-%E5%8F%8B%E9%93%BE%E6%96%87%E7%AB%A0%E8%81%9A%E5%90%88%E6%98%BE%E7%A4%BA">xauxuu 友链+友链文章聚合显示</a><br>通过Github Action+Github issues的配合，只需要把Github仓库当作一个成品管理面板，就可以快捷的审核+添加友链<br>这个思路是我从未想到过的  </p><p>具体实现步骤如下：  </p><pre class="mermaid">sequenceDiagram    autonumber        %% 定义参与者    participant User as 👤 申请者 (User)    participant Issue as 📝 GitHub Issue    participant LC as 💬 Label Commenter    participant RC as 🔍 Reachability Checker    participant FP as 📰 Feed Posts Parser    participant Output as 💾 output 分支 (JSON)    %% 阶段一：提交申请    rect rgb(255, 243, 224)        Note over User, Issue: 【第一阶段】用户发起申请        User->>Issue: 提交 Issue (填入博客信息)    end        %% 阶段二：自动化逻辑处理    rect rgb(232, 245, 233)        Note over Issue, RC: 【第二阶段】自动化后端检查        Issue->>RC: 触发 (opened/labeled)        RC->>RC: 检查链接可达性        alt 链接失效            RC->>Issue: 打上 "失联" 标签        else 链接正常            RC->>RC: 运行 issues2json            RC->>Output: 推送最新 data.json        end    end    %% 阶段三：用户反馈    rect rgb(227, 242, 253)        Note over Issue, LC: 【第三阶段】状态实时反馈        Issue->>LC: 触发 (labeled)        LC->>Issue: 根据配置自动回复评论    end    %% 阶段四：内容同步    rect rgb(243, 229, 245)        Note over FP, Output: 【第四阶段】每日定时内容抓取        loop 每日 21:00 (Cron)            FP->>Issue: 批量抓取 RSS 订阅源            FP->>FP: 提取最新 3 篇文章            FP->>FP: 运行 issues2json            FP->>Output: 强制推送至 output 分支        end    end</pre><p>不得不佩服，一套及其完整的逻辑反馈框架，甚至做到了“开箱即用”的方式<br>我在此基础上加了一个自动同步到我阿里云服务器的Action，因为大部分博友网络环境为境内网络，使用Github文件的方式极其不稳定，所以用到了当data.json文件更新后，Action会自动使用SSH链接服务器，并把文件同步至服务器的api下<br>所以目前可以做到了即时更新的效果，不过添加友链不会触发RSS拉取，只能等到每天晚上的自动拉取或我手动触发Action  </p><p>这套框架我最喜欢的地方是，在Github issues内添加的标签会同步给友链页面，如<br><img src="https://img.xscnet.cn//i/2026/03/08/69ac51a238e64.png" alt="1772900769414.png"><br><img src="https://img.xscnet.cn//i/2026/03/08/69ac51bec3da7.png" alt="1772900797968.png">  </p><p>并且刚刚提交的友链会自带“审核中”标签，等到我审核完毕后，撤销标签Action会自动添加进json文件并推送至服务器  </p><p>我一直认为GithubAction只可能胜任一些小的部署项目，例如<a href="https://www.xscnet.cn/posts/p3120260303/">我的博客部署</a>工作流，但我看到了这个框架作者开发的这么一套流程，确实是刘姥姥进了大观园一般  </p><p>避坑点：</p><ol><li>需要手动设置issues的标签，包括但不限于”审核中”,”白名单”</li><li>若是新建仓库可能需要更改Label Commenter的执行权限，否则Action Bot无法添加回复(详细代码见下)  </li><li>.github&#x2F;configs&#x2F;label-commenter-config.yml里面的跳转链接需要手动更改一下</li></ol><p>我更改的一些GithubAtion代码  </p><figure class="highlight yml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">name:</span> <span class="string">Feed</span> <span class="string">Posts</span> <span class="string">Parser</span></span><br><span class="line"></span><br><span class="line"><span class="attr">on:</span></span><br><span class="line">  <span class="attr">workflow_dispatch:</span> <span class="comment"># Allows manual triggering</span></span><br><span class="line">  <span class="attr">schedule:</span></span><br><span class="line">    <span class="comment"># 每天凌晨5点运行一次</span></span><br><span class="line">    <span class="bullet">-</span> <span class="attr">cron:</span> <span class="string">&#x27;0 21 * * *&#x27;</span> <span class="comment"># Runs daily at 21:00</span></span><br><span class="line"></span><br><span class="line"><span class="attr">jobs:</span></span><br><span class="line">  <span class="attr">feed-parser:</span></span><br><span class="line">    <span class="attr">runs-on:</span> <span class="string">ubuntu-latest</span></span><br><span class="line">    <span class="attr">permissions:</span></span><br><span class="line">      <span class="attr">issues:</span> <span class="string">write</span></span><br><span class="line">      <span class="attr">contents:</span> <span class="string">write</span></span><br><span class="line">    <span class="attr">steps:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">Checkout</span> <span class="string">repository</span></span><br><span class="line">        <span class="attr">uses:</span> <span class="string">actions/checkout@v4</span></span><br><span class="line">      <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">Run</span> <span class="string">Feed</span> <span class="string">Post</span> <span class="string">Parser</span></span><br><span class="line">        <span class="attr">uses:</span> <span class="string">xaoxuu/feed-posts-parser@main</span></span><br><span class="line">        <span class="attr">env:</span></span><br><span class="line">          <span class="attr">GITHUB_TOKEN:</span> <span class="string">$&#123;&#123;</span> <span class="string">secrets.GITHUB_TOKEN</span> <span class="string">&#125;&#125;</span></span><br><span class="line">        <span class="attr">with:</span></span><br><span class="line">          <span class="attr">posts_count:</span> <span class="number">3</span> <span class="comment"># 取 3 篇文章</span></span><br><span class="line">      <span class="comment"># 重新生成一下JSON</span></span><br><span class="line">      <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">Generate</span> <span class="string">data.json</span></span><br><span class="line">        <span class="attr">uses:</span> <span class="string">xaoxuu/issues2json@main</span></span><br><span class="line">        <span class="attr">env:</span></span><br><span class="line">          <span class="attr">GITHUB_TOKEN:</span> <span class="string">$&#123;&#123;</span> <span class="string">secrets.GITHUB_TOKEN</span> <span class="string">&#125;&#125;</span></span><br><span class="line">        <span class="attr">with:</span></span><br><span class="line">          <span class="attr">sort:</span> <span class="string">&#x27;posts-desc&#x27;</span></span><br><span class="line">          <span class="attr">exclude_issue_with_labels:</span> <span class="string">&#x27;审核中, 风险网站&#x27;</span> <span class="comment"># 具有哪些标签的issue不生成到JSON中</span></span><br><span class="line">          <span class="attr">hide_labels:</span> <span class="string">&#x27;白名单&#x27;</span> <span class="comment"># 这些标签不显示在前端页面</span></span><br><span class="line">      <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">Setup</span> <span class="string">Git</span> <span class="string">Config</span></span><br><span class="line">        <span class="attr">run:</span> <span class="string">|</span></span><br><span class="line"><span class="string">          git config --global user.name &#x27;github-actions[bot]&#x27;</span></span><br><span class="line"><span class="string">          git config --global user.email &#x27;github-actions[bot]@users.noreply.github.com&#x27;</span></span><br><span class="line"><span class="string"></span>      <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">Commit</span> <span class="string">and</span> <span class="string">Push</span> <span class="string">to</span> <span class="string">output</span> <span class="string">branch</span></span><br><span class="line">        <span class="attr">run:</span> <span class="string">|</span></span><br><span class="line"><span class="string">          git fetch origin output || true</span></span><br><span class="line"><span class="string">          git checkout -B output</span></span><br><span class="line"><span class="string">          git add --all</span></span><br><span class="line"><span class="string">          git commit -m &quot;Update data from issues&quot; || echo &quot;No changes to commit&quot;</span></span><br><span class="line"><span class="string">          git push -f origin output</span></span><br><span class="line"><span class="string"></span>      <span class="comment"># 添加这个新步骤来触发同步</span></span><br><span class="line">      <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">Trigger</span> <span class="string">Aliyun</span> <span class="string">Sync</span></span><br><span class="line">        <span class="attr">if:</span> <span class="string">success()</span>  <span class="comment"># 只在推送成功后触发</span></span><br><span class="line">        <span class="attr">run:</span> <span class="string">|</span></span><br><span class="line"><span class="string">          curl -X POST \</span></span><br><span class="line"><span class="string">            -H &quot;Accept: application/vnd.github.v3+json&quot; \</span></span><br><span class="line"><span class="string">            -H &quot;Authorization: token $&#123;&#123; secrets.PAT_TOKEN &#125;&#125;&quot; \</span></span><br><span class="line"><span class="string">            https://api.github.com/repos/$&#123;&#123; github.repository &#125;&#125;/dispatches \</span></span><br><span class="line"><span class="string">            -d &#x27;&#123;&quot;event_type&quot;:&quot;trigger-sync&quot;&#125;&#x27;</span></span><br><span class="line"><span class="string"></span>      <span class="comment"># 发送统一的通知邮件（简化版）</span></span><br><span class="line">      <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">Send</span> <span class="string">notification</span> <span class="string">email</span></span><br><span class="line">        <span class="attr">if:</span> <span class="string">always()</span></span><br><span class="line">        <span class="attr">uses:</span> <span class="string">dawidd6/action-send-mail@v3</span></span><br><span class="line">        <span class="attr">with:</span></span><br><span class="line">          <span class="attr">server_address:</span> <span class="string">smtp.qq.com</span></span><br><span class="line">          <span class="attr">server_port:</span> <span class="number">465</span></span><br><span class="line">          <span class="attr">secure:</span> <span class="literal">true</span></span><br><span class="line">          <span class="attr">username:</span> <span class="string">$&#123;&#123;</span> <span class="string">secrets.MAIL_USERNAME</span> <span class="string">&#125;&#125;</span></span><br><span class="line">          <span class="attr">password:</span> <span class="string">$&#123;&#123;</span> <span class="string">secrets.MAIL_PASSWORD</span> <span class="string">&#125;&#125;</span></span><br><span class="line">          <span class="attr">subject:</span> <span class="string">$&#123;&#123;</span> <span class="string">job.status</span> <span class="string">==</span> <span class="string">&#x27;success&#x27;</span> <span class="string">&amp;&amp;</span> <span class="string">&#x27;✅&#x27;</span> <span class="string">||</span> <span class="string">&#x27;❌&#x27;</span> <span class="string">&#125;&#125;</span> <span class="string">Feed订阅更新</span> <span class="string">$&#123;&#123;</span> <span class="string">github.workflow</span> <span class="string">==</span> <span class="string">&#x27;Feed Posts Parser&#x27;</span> <span class="string">&amp;&amp;</span> <span class="string">&#x27;文章&#x27;</span> <span class="string">||</span> <span class="string">&#x27;友链&#x27;</span> <span class="string">&#125;&#125;</span> <span class="bullet">-</span> <span class="string">$&#123;&#123;</span> <span class="string">github.event.repository.updated_at</span> <span class="string">||</span> <span class="string">&#x27;手动触发&#x27;</span> <span class="string">&#125;&#125;</span></span><br><span class="line">          <span class="attr">to:</span> <span class="string">$&#123;&#123;</span> <span class="string">secrets.MAIL_TO</span> <span class="string">&#125;&#125;</span></span><br><span class="line">          <span class="attr">from:</span> <span class="string">GitHub</span> <span class="string">Actions</span></span><br><span class="line">          <span class="attr">body:</span> <span class="string">|</span></span><br><span class="line"><span class="string">            🤖 定时任务执行报告</span></span><br><span class="line"><span class="string"></span>      </span><br><span class="line">            <span class="string">📦</span> <span class="string">仓库:</span> <span class="string">$&#123;&#123;</span> <span class="string">github.repository</span> <span class="string">&#125;&#125;</span></span><br><span class="line">            <span class="string">🔄</span> <span class="string">任务:</span> <span class="string">$&#123;&#123;</span> <span class="string">github.workflow</span> <span class="string">&#125;&#125;</span></span><br><span class="line">            <span class="string">🆔</span> <span class="string">运行ID:</span> <span class="string">$&#123;&#123;</span> <span class="string">github.run_id</span> <span class="string">&#125;&#125;</span></span><br><span class="line">            <span class="string">⏱️</span> <span class="string">执行时间:</span> <span class="string">$&#123;&#123;</span> <span class="string">github.event.repository.updated_at</span> <span class="string">||</span> <span class="string">github.event.schedule</span> <span class="string">||</span> <span class="string">&#x27;手动触发&#x27;</span> <span class="string">&#125;&#125;</span></span><br><span class="line">      </span><br><span class="line">            <span class="string">📊</span> <span class="string">最终状态:</span> <span class="string">$&#123;&#123;</span> <span class="string">job.status</span> <span class="string">==</span> <span class="string">&#x27;success&#x27;</span> <span class="string">&amp;&amp;</span> <span class="string">&#x27;✅ 成功&#x27;</span> <span class="string">||</span> <span class="string">&#x27;❌ 失败&#x27;</span> <span class="string">&#125;&#125;</span></span><br><span class="line">      </span><br><span class="line">            <span class="string">🔗</span> <span class="string">查看详情:</span> <span class="string">https://github.com/$&#123;&#123;</span> <span class="string">github.repository</span> <span class="string">&#125;&#125;/actions/runs/$&#123;&#123;</span> <span class="string">github.run_id</span> <span class="string">&#125;&#125;</span></span><br><span class="line">      </span><br><span class="line">            <span class="string">---</span></span><br><span class="line">            <span class="string">本邮件由</span> <span class="string">GitHub</span> <span class="string">Actions</span> <span class="string">自动发送</span></span><br></pre></td></tr></table></figure><p>为.github&#x2F;workflows&#x2F;feed-posts-parser.yml添加了邮件通知和同步事件触发，所谓同步事件就是触发同步文件到服务器的Action  </p><figure class="highlight yml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">name:</span> <span class="string">Label</span> <span class="string">Commenter</span></span><br><span class="line"></span><br><span class="line"><span class="attr">on:</span></span><br><span class="line">  <span class="attr">issues:</span></span><br><span class="line">    <span class="attr">types:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">labeled</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">unlabeled</span></span><br><span class="line"></span><br><span class="line"><span class="attr">permissions:</span></span><br><span class="line">  <span class="attr">actions:</span> <span class="string">read</span></span><br><span class="line">  <span class="attr">checks:</span> <span class="string">read</span></span><br><span class="line">  <span class="attr">contents:</span> <span class="string">read</span></span><br><span class="line">  <span class="attr">deployments:</span> <span class="string">read</span></span><br><span class="line">  <span class="attr">issues:</span> <span class="string">write</span></span><br><span class="line">  <span class="attr">discussions:</span> <span class="string">read</span></span><br><span class="line">  <span class="attr">packages:</span> <span class="string">read</span></span><br><span class="line">  <span class="attr">pages:</span> <span class="string">read</span></span><br><span class="line">  <span class="attr">pull-requests:</span> <span class="string">write</span></span><br><span class="line">  <span class="attr">repository-projects:</span> <span class="string">read</span></span><br><span class="line">  <span class="attr">security-events:</span> <span class="string">read</span></span><br><span class="line">  <span class="attr">statuses:</span> <span class="string">read</span></span><br><span class="line"></span><br><span class="line"><span class="attr">jobs:</span></span><br><span class="line">  <span class="attr">comment:</span></span><br><span class="line">    <span class="attr">runs-on:</span> <span class="string">ubuntu-latest</span></span><br><span class="line">    <span class="attr">steps:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="attr">uses:</span> <span class="string">actions/checkout@v3</span></span><br><span class="line"></span><br><span class="line">      <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">Label</span> <span class="string">Commenter</span></span><br><span class="line">        <span class="attr">uses:</span> <span class="string">peaceiris/actions-label-commenter@v1</span></span><br><span class="line">        <span class="attr">with:</span></span><br><span class="line">          <span class="attr">github_token:</span> <span class="string">$&#123;&#123;</span> <span class="string">secrets.GITHUB_TOKEN</span> <span class="string">&#125;&#125;</span></span><br><span class="line">          <span class="attr">config_file:</span> <span class="string">.github/configs/label-commenter-config.yml</span></span><br></pre></td></tr></table></figure><p>不知道是不是Github的新政策，新的仓库需要有权限说明Action-Bot才能在issue添加回复  </p><p>.github&#x2F;workflows&#x2F;reachability-checker.yml</p><figure class="highlight yml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">name:</span> <span class="string">Reachability</span> <span class="string">Checker</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Controls when the workflow will run</span></span><br><span class="line"><span class="attr">on:</span></span><br><span class="line">  <span class="attr">issues:</span></span><br><span class="line">    <span class="comment"># 新增（打开）/关闭/重新打开/设置标签/移除标签</span></span><br><span class="line">    <span class="attr">types:</span> [<span class="string">opened</span>, <span class="string">closed</span>, <span class="string">reopened</span>, <span class="string">labeled</span>, <span class="string">unlabeled</span>]</span><br><span class="line">  <span class="comment"># 手动触发</span></span><br><span class="line">  <span class="attr">workflow_dispatch:</span></span><br><span class="line">  <span class="comment"># 每天凌晨4点运行一次</span></span><br><span class="line">  <span class="attr">schedule:</span></span><br><span class="line">    <span class="bullet">-</span> <span class="attr">cron:</span> <span class="string">&#x27;0 20 * * *&#x27;</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># A workflow run is made up of one or more jobs that can run sequentially or in parallel</span></span><br><span class="line"><span class="attr">jobs:</span></span><br><span class="line">  <span class="comment"># This workflow contains a single job called &quot;build&quot;</span></span><br><span class="line">  <span class="attr">reachability-checker:</span></span><br><span class="line">    <span class="comment"># The type of runner that the job will run on</span></span><br><span class="line">    <span class="attr">runs-on:</span> <span class="string">ubuntu-latest</span></span><br><span class="line">    <span class="attr">permissions:</span></span><br><span class="line">      <span class="attr">contents:</span> <span class="string">write</span></span><br><span class="line">      <span class="attr">issues:</span> <span class="string">write</span></span><br><span class="line">    <span class="comment"># Steps represent a sequence of tasks that will be executed as part of the job</span></span><br><span class="line">    <span class="attr">steps:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">Checkout</span> <span class="string">repository</span></span><br><span class="line">        <span class="attr">uses:</span> <span class="string">actions/checkout@v4</span></span><br><span class="line">      <span class="comment"># 检查链接状态</span></span><br><span class="line">      <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">Check</span> <span class="string">Reachability</span></span><br><span class="line">        <span class="attr">uses:</span> <span class="string">xaoxuu/links-checker@main</span></span><br><span class="line">        <span class="attr">env:</span></span><br><span class="line">          <span class="attr">GITHUB_TOKEN:</span> <span class="string">$&#123;&#123;</span> <span class="string">secrets.GITHUB_TOKEN</span> <span class="string">&#125;&#125;</span></span><br><span class="line">        <span class="attr">with:</span></span><br><span class="line">          <span class="attr">checker:</span> <span class="string">&#x27;reachability&#x27;</span></span><br><span class="line">          <span class="attr">unreachable_label:</span> <span class="string">&#x27;失联&#x27;</span></span><br><span class="line">          <span class="attr">exclude_issue_with_labels:</span> <span class="string">&#x27;审核中, 白名单&#x27;</span> <span class="comment"># 具有哪些标签的issue不进行检查</span></span><br><span class="line">      <span class="comment"># 检查完毕后重新生成一下JSON</span></span><br><span class="line">      <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">Generate</span> <span class="string">data.json</span></span><br><span class="line">        <span class="attr">uses:</span> <span class="string">xaoxuu/issues2json@main</span></span><br><span class="line">        <span class="attr">env:</span></span><br><span class="line">          <span class="attr">GITHUB_TOKEN:</span> <span class="string">$&#123;&#123;</span> <span class="string">secrets.GITHUB_TOKEN</span> <span class="string">&#125;&#125;</span></span><br><span class="line">        <span class="attr">with:</span></span><br><span class="line">          <span class="attr">sort:</span> <span class="string">&#x27;posts-desc&#x27;</span></span><br><span class="line">          <span class="attr">exclude_issue_with_labels:</span> <span class="string">&#x27;审核中, 风险网站&#x27;</span> <span class="comment"># 具有哪些标签的issue不生成到JSON中</span></span><br><span class="line">          <span class="attr">hide_labels:</span> <span class="string">&#x27;白名单&#x27;</span> <span class="comment"># 这些标签不显示在前端页面</span></span><br><span class="line">      <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">Setup</span> <span class="string">Git</span> <span class="string">Config</span></span><br><span class="line">        <span class="attr">run:</span> <span class="string">|</span></span><br><span class="line"><span class="string">          git config --global user.name &#x27;github-actions[bot]&#x27;</span></span><br><span class="line"><span class="string">          git config --global user.email &#x27;github-actions[bot]@users.noreply.github.com&#x27;</span></span><br><span class="line"><span class="string"></span>      <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">Commit</span> <span class="string">and</span> <span class="string">Push</span> <span class="string">to</span> <span class="string">output</span> <span class="string">branch</span></span><br><span class="line">        <span class="attr">run:</span> <span class="string">|</span></span><br><span class="line"><span class="string">          git fetch origin output || true</span></span><br><span class="line"><span class="string">          git checkout -B output</span></span><br><span class="line"><span class="string">          git add --all</span></span><br><span class="line"><span class="string">          git commit -m &quot;Update data from issues&quot; || echo &quot;No changes to commit&quot;</span></span><br><span class="line"><span class="string">          git push -f origin output</span></span><br><span class="line"><span class="string"></span>      <span class="comment"># 添加这个新步骤来触发同步</span></span><br><span class="line">      <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">Trigger</span> <span class="string">Aliyun</span> <span class="string">Sync</span></span><br><span class="line">        <span class="attr">id:</span> <span class="string">trigger-sync</span></span><br><span class="line">        <span class="attr">if:</span> <span class="string">success()</span></span><br><span class="line">        <span class="attr">continue-on-error:</span> <span class="literal">true</span></span><br><span class="line">        <span class="attr">env:</span></span><br><span class="line">          <span class="attr">PAT_TOKEN:</span> <span class="string">$&#123;&#123;</span> <span class="string">secrets.PAT_TOKEN</span> <span class="string">&#125;&#125;</span></span><br><span class="line">        <span class="attr">run:</span> <span class="string">|</span></span><br><span class="line"><span class="string">          HTTP_RESPONSE=$(curl -s -w &quot;%&#123;http_code&#125;&quot; -X POST \</span></span><br><span class="line"><span class="string">            -H &quot;Accept: application/vnd.github.v3+json&quot; \</span></span><br><span class="line"><span class="string">            -H &quot;Authorization: token $PAT_TOKEN&quot; \</span></span><br><span class="line"><span class="string">            https://api.github.com/repos/$&#123;&#123; github.repository &#125;&#125;/dispatches \</span></span><br><span class="line"><span class="string">            -d &#x27;&#123;&quot;event_type&quot;:&quot;trigger-sync&quot;&#125;&#x27; \</span></span><br><span class="line"><span class="string">            -o response.txt)</span></span><br><span class="line"><span class="string"></span>    </span><br><span class="line">          <span class="string">if</span> [ <span class="string">&quot;$HTTP_RESPONSE&quot;</span> <span class="string">=</span> <span class="string">&quot;204&quot;</span> ]<span class="string">;</span> <span class="string">then</span></span><br><span class="line">            <span class="string">echo</span> <span class="string">&quot;status=success&quot;</span> <span class="string">&gt;&gt;</span> <span class="string">$GITHUB_OUTPUT</span></span><br><span class="line">          <span class="string">else</span></span><br><span class="line">            <span class="string">echo</span> <span class="string">&quot;status=failure&quot;</span> <span class="string">&gt;&gt;</span> <span class="string">$GITHUB_OUTPUT</span></span><br><span class="line">            <span class="string">exit</span> <span class="number">1</span></span><br><span class="line">          <span class="string">fi</span></span><br></pre></td></tr></table></figure><p>同样是添加了同步触发  </p><p>.github&#x2F;workflows&#x2F;sync-to-aliyun.yml<br>最主要的还是这个了  </p><figure class="highlight yml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">name:</span> <span class="string">Sync</span> <span class="string">to</span> <span class="string">Aliyun</span> <span class="string">Server</span></span><br><span class="line"></span><br><span class="line"><span class="attr">on:</span></span><br><span class="line">  <span class="attr">repository_dispatch:</span></span><br><span class="line">    <span class="attr">types:</span> [<span class="string">trigger-sync</span>]  <span class="comment"># 自定义事件类型</span></span><br><span class="line">  <span class="attr">workflow_dispatch:</span></span><br><span class="line">  <span class="attr">push:</span></span><br><span class="line">    <span class="attr">branches:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">output</span></span><br><span class="line">    <span class="attr">paths:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">&#x27;v2/data.json&#x27;</span></span><br><span class="line"></span><br><span class="line"><span class="attr">jobs:</span></span><br><span class="line">  <span class="attr">sync-to-aliyun:</span></span><br><span class="line">    <span class="attr">runs-on:</span> <span class="string">ubuntu-latest</span></span><br><span class="line">    <span class="attr">steps:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">Checkout</span> <span class="string">output</span> <span class="string">branch</span></span><br><span class="line">        <span class="attr">uses:</span> <span class="string">actions/checkout@v4</span></span><br><span class="line">        <span class="attr">with:</span></span><br><span class="line">          <span class="attr">ref:</span> <span class="string">output</span></span><br><span class="line">          <span class="attr">fetch-depth:</span> <span class="number">1</span></span><br><span class="line">      </span><br><span class="line">      <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">Verify</span> <span class="string">data.json</span> <span class="string">exists</span></span><br><span class="line">        <span class="attr">run:</span> <span class="string">|</span></span><br><span class="line"><span class="string">          if [ -f &quot;v2/data.json&quot; ]; then</span></span><br><span class="line"><span class="string">            echo &quot;✅ data.json found, size: $(wc -c &lt; v2/data.json) bytes&quot;</span></span><br><span class="line"><span class="string">            echo &quot;File preview:&quot;</span></span><br><span class="line"><span class="string">            head -n 5 v2/data.json</span></span><br><span class="line"><span class="string">          else</span></span><br><span class="line"><span class="string">            echo &quot;❌ Error: v2/data.json not found!&quot;</span></span><br><span class="line"><span class="string">            exit 1</span></span><br><span class="line"><span class="string">          fi</span></span><br><span class="line"><span class="string"></span>      </span><br><span class="line">      <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">Sync</span> <span class="string">file</span> <span class="string">to</span> <span class="string">Aliyun</span> <span class="string">server</span> <span class="string">via</span> <span class="string">SCP</span></span><br><span class="line">        <span class="attr">uses:</span> <span class="string">appleboy/scp-action@v0.1.7</span></span><br><span class="line">        <span class="attr">id:</span> <span class="string">scp-sync</span></span><br><span class="line">        <span class="attr">with:</span></span><br><span class="line">          <span class="attr">host:</span> <span class="string">$&#123;&#123;</span> <span class="string">secrets.ALIYUN_HOST</span> <span class="string">&#125;&#125;</span></span><br><span class="line">          <span class="attr">username:</span> <span class="string">$&#123;&#123;</span> <span class="string">secrets.ALIYUN_USERNAME</span> <span class="string">&#125;&#125;</span></span><br><span class="line">          <span class="attr">key:</span> <span class="string">$&#123;&#123;</span> <span class="string">secrets.ALIYUN_SSH_KEY</span> <span class="string">&#125;&#125;</span></span><br><span class="line">          <span class="attr">port:</span> <span class="string">$&#123;&#123;</span> <span class="string">secrets.ALIYUN_PORT</span> <span class="string">&#125;&#125;</span></span><br><span class="line">          <span class="attr">source:</span> <span class="string">&quot;v2/data.json&quot;</span></span><br><span class="line">          <span class="attr">target:</span> <span class="string">&quot;/home/linksdata/&quot;</span></span><br><span class="line">          <span class="attr">strip_components:</span> <span class="number">1</span>  <span class="comment"># 移除v2/目录前缀，直接将data.json放到目标目录</span></span><br><span class="line">          <span class="attr">overwrite:</span> <span class="literal">true</span></span><br><span class="line">          <span class="attr">rm:</span> <span class="literal">false</span></span><br><span class="line">      </span><br><span class="line">      <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">Verify</span> <span class="string">sync</span> <span class="string">status</span></span><br><span class="line">        <span class="attr">run:</span> <span class="string">|</span></span><br><span class="line"><span class="string">          echo &quot;✅ Sync completed successfully&quot;</span></span><br><span class="line"><span class="string">          echo &quot;File synced to: /home/linksdata/data.json&quot;</span></span><br><span class="line"><span class="string"></span>      </span><br><span class="line">      <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">Send</span> <span class="string">success</span> <span class="string">email</span> <span class="string">notification</span></span><br><span class="line">        <span class="attr">if:</span> <span class="string">success()</span></span><br><span class="line">        <span class="attr">uses:</span> <span class="string">dawidd6/action-send-mail@v3</span></span><br><span class="line">        <span class="attr">with:</span></span><br><span class="line">          <span class="attr">server_address:</span> <span class="string">smtp.qq.com</span></span><br><span class="line">          <span class="attr">server_port:</span> <span class="number">465</span></span><br><span class="line">          <span class="attr">secure:</span> <span class="literal">true</span></span><br><span class="line">          <span class="attr">username:</span> <span class="string">$&#123;&#123;</span> <span class="string">secrets.MAIL_USERNAME</span> <span class="string">&#125;&#125;</span></span><br><span class="line">          <span class="attr">password:</span> <span class="string">$&#123;&#123;</span> <span class="string">secrets.MAIL_PASSWORD</span> <span class="string">&#125;&#125;</span></span><br><span class="line">          <span class="attr">subject:</span> <span class="string">&quot;✅ GitHub Actions: 友链数据同步成功&quot;</span></span><br><span class="line">          <span class="attr">to:</span> <span class="string">$&#123;&#123;</span> <span class="string">secrets.MAIL_TO</span> <span class="string">&#125;&#125;</span></span><br><span class="line">          <span class="attr">from:</span> <span class="string">GitHub</span> <span class="string">Actions</span></span><br><span class="line">          <span class="attr">body:</span> <span class="string">|</span></span><br><span class="line"><span class="string">            GitHub Actions 友链数据同步任务执行成功！</span></span><br><span class="line"><span class="string"></span>            </span><br><span class="line">            <span class="string">仓库:</span> <span class="string">$&#123;&#123;</span> <span class="string">github.repository</span> <span class="string">&#125;&#125;</span></span><br><span class="line">            <span class="string">分支:</span> <span class="string">$&#123;&#123;</span> <span class="string">github.ref</span> <span class="string">&#125;&#125;</span></span><br><span class="line">            <span class="string">触发时间:</span> <span class="string">$&#123;&#123;</span> <span class="string">github.event.head_commit.timestamp</span> <span class="string">&#125;&#125;</span></span><br><span class="line">            <span class="string">提交信息:</span> <span class="string">$&#123;&#123;</span> <span class="string">github.event.head_commit.message</span> <span class="string">&#125;&#125;</span></span><br><span class="line">            <span class="string">提交者:</span> <span class="string">$&#123;&#123;</span> <span class="string">github.event.head_commit.author.name</span> <span class="string">&#125;&#125;</span></span><br><span class="line">            </span><br><span class="line">            <span class="string">文件已同步到:</span> <span class="string">/home/linksdata/data.json</span></span><br><span class="line">            <span class="string">文件大小:</span> <span class="string">$(wc</span> <span class="string">-c</span> <span class="string">&lt;</span> <span class="string">v2/data.json)</span> <span class="string">字节</span></span><br><span class="line">            </span><br><span class="line">            <span class="string">查看详情:</span> <span class="string">https://github.com/$&#123;&#123;</span> <span class="string">github.repository</span> <span class="string">&#125;&#125;/actions/runs/$&#123;&#123;</span> <span class="string">github.run_id</span> <span class="string">&#125;&#125;</span></span><br><span class="line">      </span><br><span class="line">      <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">Send</span> <span class="string">failure</span> <span class="string">email</span> <span class="string">notification</span></span><br><span class="line">        <span class="attr">if:</span> <span class="string">failure()</span></span><br><span class="line">        <span class="attr">uses:</span> <span class="string">dawidd6/action-send-mail@v3</span></span><br><span class="line">        <span class="attr">with:</span></span><br><span class="line">          <span class="attr">server_address:</span> <span class="string">smtp.qq.com</span></span><br><span class="line">          <span class="attr">server_port:</span> <span class="number">465</span></span><br><span class="line">          <span class="attr">secure:</span> <span class="literal">true</span></span><br><span class="line">          <span class="attr">username:</span> <span class="string">$&#123;&#123;</span> <span class="string">secrets.MAIL_USERNAME</span> <span class="string">&#125;&#125;</span></span><br><span class="line">          <span class="attr">password:</span> <span class="string">$&#123;&#123;</span> <span class="string">secrets.MAIL_PASSWORD</span> <span class="string">&#125;&#125;</span></span><br><span class="line">          <span class="attr">subject:</span> <span class="string">&quot;❌ GitHub Actions: 友链数据同步失败&quot;</span></span><br><span class="line">          <span class="attr">to:</span> <span class="string">$&#123;&#123;</span> <span class="string">secrets.MAIL_TO</span> <span class="string">&#125;&#125;</span></span><br><span class="line">          <span class="attr">from:</span> <span class="string">GitHub</span> <span class="string">Actions</span></span><br><span class="line">          <span class="attr">body:</span> <span class="string">|</span></span><br><span class="line"><span class="string">            GitHub Actions 友链数据同步任务执行失败！</span></span><br><span class="line"><span class="string"></span>            </span><br><span class="line">            <span class="string">仓库:</span> <span class="string">$&#123;&#123;</span> <span class="string">github.repository</span> <span class="string">&#125;&#125;</span></span><br><span class="line">            <span class="string">分支:</span> <span class="string">$&#123;&#123;</span> <span class="string">github.ref</span> <span class="string">&#125;&#125;</span></span><br><span class="line">            <span class="string">触发时间:</span> <span class="string">$&#123;&#123;</span> <span class="string">github.event.head_commit.timestamp</span> <span class="string">&#125;&#125;</span></span><br><span class="line">            </span><br><span class="line">            <span class="string">请检查以下可能的原因：</span></span><br><span class="line">            <span class="number">1</span><span class="string">.</span> <span class="string">SSH连接问题（服务器是否在线？）</span></span><br><span class="line">            <span class="number">2</span><span class="string">.</span> <span class="string">权限问题（目标目录是否存在且可写？）</span></span><br><span class="line">            <span class="number">3</span><span class="string">.</span> <span class="string">文件路径问题（v2/data.json是否存在？）</span></span><br><span class="line">            </span><br><span class="line">            <span class="string">查看详细日志:</span> <span class="string">https://github.com/$&#123;&#123;</span> <span class="string">github.repository</span> <span class="string">&#125;&#125;/actions/runs/$&#123;&#123;</span> <span class="string">github.run_id</span> <span class="string">&#125;&#125;</span></span><br></pre></td></tr></table></figure><p>这是一个同步到阿里云服务器的GitHub Action，当触发器为<code>trigger-sync</code>时，会执行同步操作<br>同步操作包括验证数据文件是否存在、使用SSH密钥将数据文件同步到服务器、验证同步状态、发送成功或失败的邮件通知  </p><hr><h2 id="小结"><a href="#小结" class="headerlink" title="小结"></a>小结</h2><p>这段时间开发新的框架令我很开心<br>不仅收获了很多的东西，同时也让我有了独立解决问题的能力<br>同时对于游戏这个东西 展示驱媚了哈哈哈  </p>]]>
    </content>
    <id>https://www.xscnet.cn/posts/p3220260307/</id>
    <link href="https://www.xscnet.cn/posts/p3220260307/"/>
    <published>2026-03-06T16:00:00.000Z</published>
    <summary>周六暂别学业压力，反思游戏从童年消遣变为现实逃避的历程。随着高考临近，决定淡出游戏圈。利用闲暇时间，将博客框架由Valaxy迁移至Hexo，并深入研究Hexo的优秀生态，特别是基于GitHub Actions的自动化友链管理方案。在折腾技术中找回快乐，实现游戏“祛魅”。</summary>
    <title>近期随笔：对生活的总结和对博客主题的探索</title>
    <updated>2026-03-06T16:00:00.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>Mete0r</name>
    </author>
    <category term="博客" scheme="https://www.xscnet.cn/categories/%E5%8D%9A%E5%AE%A2/"/>
    <category term="更新" scheme="https://www.xscnet.cn/tags/%E6%9B%B4%E6%96%B0/"/>
    <category term="博客" scheme="https://www.xscnet.cn/tags/%E5%8D%9A%E5%AE%A2/"/>
    <content>
      <![CDATA[<h2 id="更新内容"><a href="#更新内容" class="headerlink" title="更新内容"></a>更新内容</h2><p>首先感谢一下klcdm嘿嘿<br>每次都是直接抄他的博客主题，虽说前人栽树后人乘凉，但是还是特别感谢klcdm博客给予的灵感  </p><p>首先讲讲为什么换了框架把<br>从Valaxy切换到Hexo，主要是因为Valaxy还是过于新兴的博客主题了，社区插件很少，遇到问题解决困难<br>换到Hexo，主要原因是Hexo的社区插件很多，并且文档也相对比较完善,Bug少，大改容易  </p><p>切换框架后，Valaxy的主题博客切换到了 <a href="https://valaxy.xscnet.cn/">https://valaxy.xscnet.cn/</a> 这个域名,与Hexo文章同步更新  </p><h2 id="技术细节"><a href="#技术细节" class="headerlink" title="技术细节"></a>技术细节</h2><p>首先展示我现在推送博客文章的工作流<br>只有我写完文章前端的git push是手动的，其余工作流均为Github Action自动完成  </p><p><strong>注意：以下内容是Mermaid绘制的流程图，可能会遇到加载缓慢的情况</strong>  </p><pre class="mermaid">graph TD    %% ===== 样式定义 =====    classDef local fill:#e1f5fe,stroke:#01579b,stroke-width:2px,color:#0d47a1;    classDef repo1 fill:#fff3e0,stroke:#e65100,stroke-width:2px,color:#e65100;    classDef repo2 fill:#f3e5f5,stroke:#4a148c,stroke-width:2px,color:#4a148c;    classDef action fill:#e8f5e8,stroke:#1b5e20,stroke-width:2px,color:#1b5e20;    classDef server fill:#ffebee,stroke:#b71c1c,stroke-width:2px,color:#b71c1c;    classDef note fill:#ffffff,stroke:#999999,stroke-dasharray: 5 5,color:#333333;    %% ===== 本地 =====    subgraph Local        Local_Source["Hexo源码目录\n文章 / 主题 / 配置"]        Local_Write["写文章\nhexo new"]        Local_Preview["本地预览\nhexo s"]        Git_Push["git push"]        Local_Source --> Local_Write --> Local_Preview --> Git_Push    end    %% ===== 仓库1 =====    subgraph Repo1        Repo1_Source["GitHub 仓库1\nHexoBlog 源码"]        Action1["Action A\n自动构建部署"]        Repo1_Source --> Action1        note1["构建步骤\n1. checkout 源码\n2. npm install\n3. hexo generate\n4. 推送静态文件"]        Action1 -.-> note1    end    %% ===== 仓库2 =====    subgraph Repo2        Repo2_Site["GitHub 仓库2\nHexoSite 静态文件"]        Action2["Action B\n部署到服务器"]        Repo2_Site --> Action2        note2["部署步骤\n1. checkout 静态文件\n2. SSH 连接服务器\n3. 清理 dist 目录\n4. 上传所有文件"]        Action2 -.-> note2    end    %% ===== 服务器 =====    subgraph Server        Nginx["Nginx\n指向 dist 目录"]        Web_Files["/home/blog/dist\nindex.html\narchives\ncss\njs"]        Nginx --> Web_Files    end    %% ===== 流程连接 =====    Git_Push -->|"推送源码"| Repo1_Source    Action1 -->|"推送静态文件"| Repo2_Site    Action2 -->|"SCP 上传"| Web_Files    Action2 -.->|"监听 push 事件"| Repo2_Site    %% ===== 总说明 =====    note3["最终流程\n本地写文章 → git push → 自动构建 → 自动部署 → 服务器更新"]    note3 -.-> Local    %% ===== 应用样式 =====    class Local_Source,Local_Write,Local_Preview,Git_Push local;    class Repo1_Source repo1;    class Repo2_Site repo2;    class Action1,Action2 action;    class Nginx,Web_Files server;    class note1,note2,note3 note;</pre><p>这就是目前这个Hexo博客的推送工作流，希望这个流程图能帮助到你  </p><p><img src="https://img.xscnet.cn//i/2026/03/04/69a705c268479.webp"><br><img src="https://img.xscnet.cn//i/2026/03/04/69a705c25ff90.webp"><br><img src="https://img.xscnet.cn//i/2026/03/04/69a705c246240.webp">  </p><p>当Github Action自动构建部署完成时，最后还是需要我手动去腾讯云清理EO缓存，不过Action为我省去了很多包括部署到服务器上的时间  </p><p>说说为什么要部署到阿里云的境内服务器上吧<br>本来想了三种方案  </p><ol><li>境内服务器  </li><li>Github Pages  </li><li>Vercel<br>现在使用的方案是阿里云的境内服务器为推送主力，Vercel做备用源站</li></ol><p>因为我顾虑vercel的服务器在境外，虽然有EO助力缓存，但是网络环境变幻莫测，目前没有过多的时间折腾，我需要的是足够稳定的方案<br>如果使用Vercel + EO缓存的方案，我最大的顾虑是如果EO从Vercel服务器拉取失败，可能会导致服务中断，得不偿失<br>况且这台服务器本是为了本站的ICP备案，需要一直保持续费，不如发光发热，把博客源站部署在境内，让CDN拉去资源缓存时候，不会因为EO拉取失败而中断服务  </p><h2 id="小结"><a href="#小结" class="headerlink" title="小结"></a>小结</h2><p>目前博客已经完成了主要框架的构建和美化部署<br>具体插件类估计需要等到高考结束之后再补全了  </p><p><strong>关于友链</strong><br>友链经过一轮清洗，对于已经无法正常访问的友链进行了删除处理<br>如果您的友链被错误的删除了，可以点击博客左下角的Mailto(邮件)按钮，发送邮件给我，等我确认之后，将友链添加回友链列表中<br>或者您也可以选择直接在此文章下方留言，将您的友链发送给我，我收到之后会进行添加  </p><p>感谢大家的支持  </p>]]>
    </content>
    <id>https://www.xscnet.cn/posts/p3120260303/</id>
    <link href="https://www.xscnet.cn/posts/p3120260303/"/>
    <published>2026-03-03T16:00:00.000Z</published>
    <summary>站长将博客从Valaxy迁移至Hexo，并利用GitHub Actions实现了从代码推送、自动构建到阿里云服务器部署的全自动化流水线，确保了博客的稳定运行</summary>
    <title>博客框架更新！</title>
    <updated>2026-03-03T16:00:00.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>Mete0r</name>
    </author>
    <category term="日常" scheme="https://www.xscnet.cn/categories/%E6%97%A5%E5%B8%B8/"/>
    <category term="日常" scheme="https://www.xscnet.cn/tags/%E6%97%A5%E5%B8%B8/"/>
    <content>
      <![CDATA[<h2 id="好久不见各位！"><a href="#好久不见各位！" class="headerlink" title="好久不见各位！"></a>好久不见各位！</h2><p><strong>在开始前我想对各位老哥们表式抱歉，由于本人学业紧张，临近高考，实在是无暇顾及博客的更新，望大家多包容，待到高考大捷，马上恢复更新！</strong>  </p><p>但请大家放心，博客不会跑路，更不会辜负我们在此结下的友谊，服务器已经照常续费<br><img src="https://img.xscnet.cn//i/2026/02/28/69a30ed77aaf0.png">  </p><h2 id="博客"><a href="#博客" class="headerlink" title="博客"></a>博客</h2><p>不知不觉间已经当了快一年的站长了，在博客上也写了很多东西，虽然内容都很水，有时候也不知道写点什么，但就是凭着这一腔的热血，以及对博客的热爱，坚持到了现在<br><img src="https://img.xscnet.cn//i/2026/02/28/69a30f373242a.png">  </p><p>在这一路上结识了不少朋友，也让我深刻的意识到了人外有人天外有天，当我真正立足在各位大佬的身边时，我开始觉得我确实是一个不折不扣的”菜鸡”<br>我的代码能力不是特别强，代码的主要逻辑部分还是得依靠生成式AI来完成<br>但我在我自己喜欢的事务上，总能以一种特别的力量坚持下来，去问询，去探索，去尝试  </p><p><strong>但也是因为这个习惯，导致了我在学习过程中并不顺利，在我不喜欢的事情上总是表现得拖延</strong>  </p><p>这篇博客本应该放在春节假期来发布的，但是也因为我刚刚年满18岁，需要更改一些实名上的问题，并且在假期里需要不断地走亲戚，耽误了些时间，所以才延迟了发布<br><img src="https://img.xscnet.cn//i/2026/03/01/69a3117992928.png"><br>其实建设银行的这张银行卡在我八岁左右就在北京办理了，只不过卡片碎掉了，一直没有时间回北京补卡，恰好去年八月份回北京陪我妈检查身体，就一起把卡补了<br>而现在我也刚好年满18，又去招商办了一张万事达的储蓄卡，等大学的时候去国外可以用  </p><h2 id="未来计划"><a href="#未来计划" class="headerlink" title="未来计划"></a>未来计划</h2><p>哎，说来说去也没什么主题，看着其他博友那丰富的博文，心里想着为什么我就写不出那么丰富多彩的博文呢……  </p><p>说说未来计划吧  </p><p>等高考完成，我打算将博客的框架重新搭建，一想到这，文章迁移也是一个不小的工程，搭建完还有评论的URL匹配，博客的美化….<br>目前看来只能是等到高考结束完成了……<br><img src="https://img.xscnet.cn//i/2026/03/01/69a31343c852c.jpg">  </p><h2 id="结语"><a href="#结语" class="headerlink" title="结语"></a>结语</h2><p>2026新的一年，愿各位老哥在学习的学业有成金榜题名，在工作的事业有成工作顺利，新的一年开开心心<br>祝各位老哥们身体健康，工作顺利，生活 enjoy<br><img src="https://img.xscnet.cn//i/2026/03/01/69a3134c600d2.jpg"><br>东北这地方就是这样，冬天真的看不到一点生气……  </p>]]>
    </content>
    <id>https://www.xscnet.cn/posts/p3020260228/</id>
    <link href="https://www.xscnet.cn/posts/p3020260228/"/>
    <published>2026-02-27T16:00:00.000Z</published>
    <summary>站在十八岁的门槛上，在东北萧瑟的冬日里，记录下关于高考、成长与博客的点滴。从代码小白到坚持探索的站长，变的是身份与职责，不变的是对生活的热爱。虽有短暂告别，但未来重构计划已在路上。</summary>
    <title>各位，好久不见!</title>
    <updated>2026-02-27T16:00:00.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>Mete0r</name>
    </author>
    <category term="致歉" scheme="https://www.xscnet.cn/categories/%E8%87%B4%E6%AD%89/"/>
    <category term="致歉" scheme="https://www.xscnet.cn/tags/%E8%87%B4%E6%AD%89/"/>
    <content>
      <![CDATA[<h3 id="2025-10-30加更通知：图床炸了！p20以前的没恢复，p20之后的文章恢复了，等考完了再集中恢复"><a href="#2025-10-30加更通知：图床炸了！p20以前的没恢复，p20之后的文章恢复了，等考完了再集中恢复" class="headerlink" title="2025&#x2F;10&#x2F;30加更通知：图床炸了！p20以前的没恢复，p20之后的文章恢复了，等考完了再集中恢复"></a>2025&#x2F;10&#x2F;30加更通知：图床炸了！p20以前的没恢复，p20之后的文章恢复了，等考完了再集中恢复</h3><h2 id="首先在这里先给各位互换了友链的博友们致歉"><a href="#首先在这里先给各位互换了友链的博友们致歉" class="headerlink" title="首先在这里先给各位互换了友链的博友们致歉"></a>首先在这里先给各位互换了友链的博友们致歉</h2><p>我真的非常抱歉，但是由于各种原因，我无法在近期内完成对博客内容的产出与更新<br>最根本的缘故就是，我是一名高中生，而今年我正式踏入高三<br>在学业的日益激增下，我真的没有办法分出哪怕十分钟的时间给予博客以及开源项目的跟进  </p><p><strong>但是我承诺：在2026年06月后，我会恢复正常的内容更新，希望各位博友监督！</strong>  </p><p>在这期间，我也会回复博客内的评论及提问，但是可能时效性相对较低，不过在15天内是肯定可以集中回复的  </p><p><strong>我博客的服务器在此期间会同步续费，域名等均不会出现改变</strong>  </p><h2 id="另外，对以前常联系但是现在没有过多联系的朋友们道歉"><a href="#另外，对以前常联系但是现在没有过多联系的朋友们道歉" class="headerlink" title="另外，对以前常联系但是现在没有过多联系的朋友们道歉"></a>另外，对以前常联系但是现在没有过多联系的朋友们道歉</h2><p>(排名不分先后顺序)  </p><ol><li><a href="https://blog.liushen.fun/">LiuShen</a>  </li><li><a href="https://blog.koxiuqiu.cn/">koxiuqiu</a>  </li><li><a href="https://airy.ink/">瓦匠</a>  </li><li><a href="https://blog.6uu.us/">bbb-lsy07</a>  </li><li><a href="https://www.xsl.im/">AirTouch</a>  </li><li><a href="http://blog.418121.xyz/">叶泯希</a></li></ol><p><strong>另外还有很多很多的朋友们，我们一起建立了现代的博客圈，我们在这个小圈子里乐此不疲的更新&#x2F;迭代，在自己喜欢的领域贡献自己的力量</strong><br><strong>还有很多的朋友没有写在致歉名单里，招待不周真的很抱歉</strong>  </p><h2 id="最后，再次感谢所有支持我的朋友们"><a href="#最后，再次感谢所有支持我的朋友们" class="headerlink" title="最后，再次感谢所有支持我的朋友们"></a>最后，再次感谢所有支持我的朋友们</h2><p><strong>感谢各位的支持，我们顶峰相见!</strong>  </p><h3 id="2025-10-30更新"><a href="#2025-10-30更新" class="headerlink" title="2025&#x2F;10&#x2F;30更新"></a>2025&#x2F;10&#x2F;30更新</h3><p><strong>更新了网站图标，征集意见1or2目前选择1</strong><br><strong>图标来源:借鉴GrokAI的图标使用ChatGPT二创</strong><br><img src="https://img.xscnet.cn//i/2025/10/30/6903715bdf392.jpg"><br><img src="https://img.xscnet.cn//i/2025/10/30/6903715c073d6.jpg">  </p>]]>
    </content>
    <id>https://www.xscnet.cn/posts/p2920251025/</id>
    <link href="https://www.xscnet.cn/posts/p2920251025/"/>
    <published>2025-10-24T16:00:00.000Z</published>
    <summary>这是一封致歉信：作为一名高三学生，因学业原因不得不暂时告别博客圈。我承诺在2026年6月高考后回归，届时将恢复内容更新。感谢各位的理解与支持！</summary>
    <title>致歉通知</title>
    <updated>2025-10-24T16:00:00.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>Mete0r</name>
    </author>
    <category term="月总结" scheme="https://www.xscnet.cn/categories/%E6%9C%88%E6%80%BB%E7%BB%93/"/>
    <category term="月总结" scheme="https://www.xscnet.cn/tags/%E6%9C%88%E6%80%BB%E7%BB%93/"/>
    <category term="随笔" scheme="https://www.xscnet.cn/tags/%E9%9A%8F%E7%AC%94/"/>
    <category term="游戏" scheme="https://www.xscnet.cn/tags/%E6%B8%B8%E6%88%8F/"/>
    <content>
      <![CDATA[<p>Long time no see.Guys,I’m back.</p><p>一转眼一个月已经过去了啊，时间过得好快，暑假也没多长时间了，马上开学了（恼）  </p><p>ps.真没人发现我上一篇文章的链接日期打错了嘛哈哈哈，不过无伤大雅啦<br><img src="https://img.xscnet.cn//i/2025/08/29/68b15b3f4b504.webp">  </p><p>这一个月没更新月总结，我也不打算补了，因为这一个月前半个月都在北京陪我妈妈检查身体，所以没有时间写<br>至于为什么下半月没更新捏<br>嘿嘿（挠头）<br>下半个月沉迷游戏了，并且还发现游戏有一些官方没能解决的问题，我顺便就写了几个小程序去解决这些问题了  </p><h3 id="生活方面"><a href="#生活方面" class="headerlink" title="生活方面"></a>生活方面</h3><p>这个月又开始沉迷科幻题材的小说和游戏了<br>我找到一部非常不错的小说，叫《我一个二级文明有二向箔很合理吧》，作者是陈二懒<br>虽然名字看的很抽象但是内容还是很有质量的，里面有很多的基础理论，以及目前科学家研究过但是无法实现的理论科学<br>虽然文中主角以及人类文明略带主角光环，但不影响总体阅读体验<br><img src="https://img.xscnet.cn//i/2025/08/29/68b15ca288e85.webp"><br>为了防止影响阅读体验，这里仅放出一页作为内容的简单展示<br><img src="https://img.xscnet.cn//i/2025/08/29/68b15c12e848b.webp">  </p><p>根据科幻题材的大数据推荐，阿B推荐给我了《戴森球计划》的游戏影片<br>确实很合我胃口啊，打折58R全款拿下<br><img src="https://img.xscnet.cn//i/2025/08/29/68b15b3f6cca0.webp"><br>戴森球计划做的很棒，他虽然是一个单机游戏，没有完整的反作弊，但是他做到了监测玩家游戏数据的变化，识别到异常数据会将玩家的统计数据踢出“银河系”的统计<br><img src="https://img.xscnet.cn//i/2025/08/29/68b15de9a8a9e.webp"><br><img src="https://img.xscnet.cn//i/2025/08/29/68b15de9a677b.webp"><br>在经历了几天的爆肝后，我也是顺利的建成了<a href="https://baike.baidu.com/item/%E6%88%B4%E6%A3%AE%E7%90%83/8533395#5-2">“戴森云”</a><br><img src="https://img.xscnet.cn//i/2025/08/29/68b15de9c6cbb.webp"><br>正如网络上说说，这个游戏真的是越玩越年轻，七点玩的抬头一看六点了<br>另外还有很多的民间大佬为游戏制作量化计算器以及游戏mod(不过打mod算作弊)<br>在这个游戏里讲究“量化”的计算概念，在你设计一条完整的生产线的时候，你不能一味的去追求“速度”，而是需要精确的计算每个环节所需要的时间，以及你所需物品的产量&#x2F;min<br>如图，这是我在建造戴森云太阳帆的时候使用的量化数据<br><img src="https://img.xscnet.cn//i/2025/08/29/68b15de9afd92.webp"><br><img src="https://img.xscnet.cn//i/2025/08/29/68b15de9d675f.webp"><br>ps.我还没建出戴森球，那玩意有点费肝  </p><p><strong>虽然戴森球这个理念很美好，但是人类即使倾尽全太阳系的资源也不足以建造一个包裹太阳的戴森球，也许在未来的某一天，人类可以利用其它星系的资源来建造一个属于人类自己的戴森球</strong>  </p><p>这个游戏因为单个玩家玩到后期的存档很大，所以官方并没有云存档服务，在得知这个问题后，我便着手开发了一个小程序，依旧前端python后端nodejs，这也是我最熟悉的框架了<br><img src="https://img.xscnet.cn//i/2025/08/29/68b160b2aa322.webp"><br>等我再完善一波，着手支持以下七牛的kudo存储，就可以上传github开源了<br>现在还不是特别的完美，因为现在需要玩家自己后端有服务器并部署nodejs，然后才能使用，目前的进度仅仅是解决我自己存档备份的燃眉之急  </p><p>最近和朋友也在一起游玩《纪元1800》游戏<br>顺便用戴森球存档备份的这个软件做了个Anno1800多人存档同步工具<br>因为我们有可能会有单人线下游玩存档的问题，所以干脆就直接拿软件改一改，后端增加几个api就解决了<br>目前后端集成了基本的存档上传，下载，哈希值重复校验，自动覆盖旧存档 等等的功能<br>已经可以完美实现存档备份&#x2F;同步 所需要的功能了<br><img src="https://img.xscnet.cn//i/2025/08/29/68b161cb10556.png">  </p><p>感谢您阅读到这里，来听我的琐碎事情  </p>]]>
    </content>
    <id>https://www.xscnet.cn/posts/p2820250829/</id>
    <link href="https://www.xscnet.cn/posts/p2820250829/"/>
    <published>2025-08-29T01:00:00.000Z</published>
    <summary>阔别一月回归，分享近况：陪伴家人、沉迷科幻小说《二级文明有二向箔很合理吧》与游戏《戴森球计划》，并自主开发了存档同步工具解决游戏痛点。</summary>
    <title>最近的小事</title>
    <updated>2025-08-29T01:00:00.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>Mete0r</name>
    </author>
    <category term="更新" scheme="https://www.xscnet.cn/categories/%E6%9B%B4%E6%96%B0/"/>
    <category term="更新" scheme="https://www.xscnet.cn/tags/%E6%9B%B4%E6%96%B0/"/>
    <category term="CDN" scheme="https://www.xscnet.cn/tags/CDN/"/>
    <category term="优化" scheme="https://www.xscnet.cn/tags/%E4%BC%98%E5%8C%96/"/>
    <content>
      <![CDATA[<p>Guys!又半个月没见啦，这半个月有好多人和我吐槽我的博客长时间没法正常访问哈哈哈，原因是在筹划一个大计划呢  </p><h2 id="博客更新"><a href="#博客更新" class="headerlink" title="博客更新"></a>博客更新</h2><ol><li>图床链接更新</li></ol><p>由于最近十年之约的虫洞图标被恶意刷流量，触发了他们项目服务器的自动保护机制，返回HTTP ERROR 418(I’m a teapot)<br>导致博客的SSL验证会出现不安全的问题<br><img src="https://img.xscnet.cn//i/2025/07/16/687739e39870e.webp" alt="SSL"><br>索性我就一起换了链接，现在我的博客中大部分图片都是从我自建图床上走的啦<br>以前总是白嫖大佬<a href="https://blog.koxiuqiu.cn/">klcdm</a>的图床有点不好意思哈哈哈  </p><ol start="2"><li>评论区优化<br>评论区优化主要没体现在前端，主要是在后端把评论区定期备份搞好了<br><strong>这里十分感谢大佬<a href="https://www.liushen.fun/">清羽飞扬</a>的技术支持！</strong><br>采用的方案是七牛云免费kudo存储和1Panel的定期任务功能<br>目前的每日计划是每天北京时间半夜2:00会进行一次整个评论系统的热备份</li></ol><p><strong>解决了图床和评论问题后，我还做了个重要优化 —— 接入 CDN 加速</strong>  </p><h2 id="CDN优化"><a href="#CDN优化" class="headerlink" title="CDN优化"></a>CDN优化</h2><p>不知道大家有没有发现，我的博客下方一直有<a href="http://项目关闭喽/">丘盾CDN</a>的链接<br>这同样是大佬<a href="https://blog.koxiuqiu.cn/">klcdm</a>的公益项目，我的图床仍在使用丘盾，对图片的缓存和加速效果非常显著！    </p><p>::: tip  </p><p>此博客未接任何广子，仅作为自发推荐!!!<br>(没有人会感觉我这个小站能接到腾讯的广子吧哈哈哈)  </p><p>::: </p><p>现如今，随着互联网技术的不断发展，源源不断的小厂开始崛起，像腾讯这样的老大哥也下场发福利，这不，腾讯云新出的EdgeOne边缘安全加速平台激励计划，激活码竟然还不限量！<br>官方目前提供了三种获取方式，个人感觉第一种更加快速简单  </p><ol><li><p>方式1：在X(Twitter)平台发布一篇推文,其内容包括  </p><ul><li>话题标签：<code>#EdgeOneFreePlan</code>  </li><li>提及官方账号：<code>@TencentCloudEO</code>  </li><li>活动链接：<code>https://edgeone.ai/redemption?from=recommend</code><br>个人建议此方案将X的推文字数写满，获得几率更高哦！并且在发表完推文后，可以直接私信发给官方，一般第二天就会给你下发激活码啦</li></ul></li><li><p>方式2：Discord抽奖  </p><ul><li>加入官方频道：<code>https://discord.gg/dGyw3VUe2U</code>  </li><li>周一至周五的15:00&#x2F;18:00&#x2F;21:00（UTC+8），点击#giveaway频道中的链接参与赢取兑换码<br>个人感觉此方法比较吃运气，但是好处是没有X账号的用户也可以获得，但是需要提前加入频道，并且需要等待时间</li></ul></li><li><p>方式3：GitHub 合作计划  </p><ul><li>参与 GitHub 开发者合作计划，即有机会获得免费套餐兑换码  </li><li>详细介绍：<a href="https://edgeone.ai/zh/blog/details/github-developer">https://edgeone.ai/zh/blog/details/github-developer</a><br>此方法我没有试过，但与前两种方式相比感觉会很难</li></ul></li></ol><p>附上官方介绍<br><img src="https://img.xscnet.cn//i/2025/07/16/687739e258e00.webp" alt="EO">  </p><p>我是使用第一种方式获得的激活码，也就是发完推文后主动与官方联系，增加第二天就获得激活码的概率<br><img src="https://img.xscnet.cn//i/2025/07/16/687739e1bf45f.webp" width="400px">  </p><h3 id="实际体验"><a href="#实际体验" class="headerlink" title="实际体验"></a>实际体验</h3><p>腾讯因为是中国大陆本土企业，所以在国内的节点数量还是蛮多的大概五十多个节点，足以使国内访问如同坐火箭一般迅速了<br><img src="https://img.xscnet.cn//i/2025/07/16/6877414170486.webp" alt="节点数量">  </p><p>现在我的博客已经正式接入EO了！由于我的网站拥有ICP的备案，所有可以选用全球加速服务（包含中国大陆可用区），根据ITDOG和ZHALEME的测试，可以发现效果十分可观<br><img src="https://img.xscnet.cn//i/2025/07/16/687739e2a2b81.webp" alt="itdog"><br><img src="https://img.xscnet.cn//i/2025/07/16/687739e2c9456.webp" alt="zhaleme">  </p><p>在访问量增加起来之后基本可以做到全国深绿<br>另外对于中国联通的优化比其余两网更加优秀  </p><p>当然，在我刚开始配置EO的时候并不是一帆风顺的，经过了我多次提交工单，也没有一个很好的解决方案，问题依旧<br>腾讯云的工作人员和我说，在CDN边缘节点与我的源站进行SSL握手的Finish阶段，握手就会被中断，导致无法正常建立TCP链接，进而导致访问加速域名时报错HTTP ERROR 525<br>腾讯云工作人员甚至使用腾讯的服务器手动测试了连接，根据日志显示确实在Finish阶段中断了握手，于是我便去找了阿里(源站服务器)的工作人员，但根据我自己和阿里工作人员的排查，握手不存在任何问题，每次测试都会返回0(ok)结果，访问网站也是HTTP 200(ok)，于是便不了了之，取折中方案，CDN节点与源站通信使用HTTP协议<br>在这里提醒各位，如果涉及到服务器与CDN跨厂商对接，可能会出现莫名其妙的问题，请务必注意  </p><p>这里可能会有人担心使用HTTP协议是否会有安全隐患，我个人认为<br>服务器由自己管理，CDN 边缘节点由大厂管理，不会存在流量被劫持的风险，所以这个折中方案是比较妥当的。不过需要说明的是，HTTP 回源虽避开了 SSL 握手问题，但相比 HTTPS 回源少了传输加密环节。不过由于回源链路仅存在于 CDN 节点与源站之间，且在大厂节点防护下，数据传输安全性仍有保障，普通静态博客内容无需过度担心隐私风险，对访问体验也没有明显影响  </p><blockquote><p><strong>这里十分感谢大佬<a href="https://www.liushen.fun/">清羽飞扬</a>对EO配置的技术支持！</strong><br><strong>大佬的文章<a href="https://blog.liushen.fun/posts/68b52a49/">https://blog.liushen.fun/posts/68b52a49/</a></strong></p></blockquote><p>对于EdgeOne我并没有过多的研究，仅仅为其配置了一个缓存规则与访问规则，具体内容还是以官方文档为主！<br>对于静态博客，使用EO的默认缓存规则即可<br>我的自定义设置仅开启了<br><img src="https://img.xscnet.cn//i/2025/07/16/687744107a034.webp" alt="1"><br><img src="https://img.xscnet.cn//i/2025/07/16/687744106b456.webp" alt="2"><br><img src="https://img.xscnet.cn//i/2025/07/16/687744108589e.webp" alt="3"><br>这几个功能，默认均为关闭功能<br>具体实际功能请以自己说需要的按需开启即可  </p><h2 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h2><p>在这几天的配置和体验下来，总体还是非常简单的，EO自带的<code>缓存模板</code>已经足够大部分静态博客的需求了，不需要自己配置太多<br>如果你使用http回源，仅需配置一下加速域名和回源IP即可，等待5-10分钟后站点即可正常访问  </p><p>在腾讯云的推动下，希望在互联网中，各位站长的建站成本可以逐渐的降低，让更多有兴趣的人可以加入进来  </p><p>总结来说，各位新人站长、开发者，都可以以零成本或极低的成本来搭建小型的网站，以前高昂的成本已不复存在了！  </p>]]>
    </content>
    <id>https://www.xscnet.cn/posts/p2620250716/</id>
    <link href="https://www.xscnet.cn/posts/p2620250716/"/>
    <published>2025-07-16T06:32:00.000Z</published>
    <summary>这篇文章主要讲了博主半个月来因筹划优化计划导致博客访问异常的情况，随后介绍了博客的两项更新：更换自建图床解决原图床流量异常引发的 SSL 安全问题，以及借助技术支持在后端完成评论区定期备份设置。还分享了接入腾讯云 EdgeOne 加速平台的经历，包括三种激活码获取方式、实操体验及跨厂商对接的 SSL 问题解决方案，最后总结 EO 对静态博客友好，能降低建站成本</summary>
    <title>站点更新！CDN优化！腾讯EO白嫖经历</title>
    <updated>2025-07-16T06:32:00.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>Mete0r</name>
    </author>
    <category term="数码" scheme="https://www.xscnet.cn/categories/%E6%95%B0%E7%A0%81/"/>
    <category term="数码" scheme="https://www.xscnet.cn/tags/%E6%95%B0%E7%A0%81/"/>
    <category term="推荐" scheme="https://www.xscnet.cn/tags/%E6%8E%A8%E8%8D%90/"/>
    <content>
      <![CDATA[<p>今天是个勤劳的站长呢，一天更新了两篇文章嘻嘻  </p><h2 id="被迫购新的充电宝"><a href="#被迫购新的充电宝" class="headerlink" title="被迫购新的充电宝"></a>被迫购新的充电宝</h2><p>事情的起因想必大家都不陌生了，最近关于罗马仕充电宝频繁起火的新闻真是让人看得心惊胆战<br>之前就听说过一些电子产品存在安全隐患，但没成想这次离自己这么近，身边好几个朋友都在吐槽自家的罗马仕充电宝出现了各种问题，有的是充电时异常发烫，有的甚至真的发生了小范围的起火情况  </p><p>然后由于最近又有上飞机出远门的需求，民航局又规定没有3c标识的充电宝一律不允许上飞机，则无疑是给我所有的充电宝判了“死刑”啊<br>由于3c强制印刷在机身是24年8月的规定，但好巧不巧我的充电设备全是在那之前买的，这就有点生气了  </p><p>但是奈何胳膊拧不过大腿，还是为GDP创收了呀  </p><h3 id="购新"><a href="#购新" class="headerlink" title="购新"></a>购新</h3><p>小时候就看到有自媒体博主在推荐酷态科的充电宝，就兴致勃勃的去电商平台看了一下价格，发现一个都得要两三百，在当时对于我来说还是一笔不小的开销，就一直没实践<br>这次想着买一个安全一点并且品牌声誉比较好的吧，就看中了这款<br>怎么说呢，我自己用的是苹果手机，没有大功率充电的需求，但是相应的也能满足苹果的20wPD协议，索性就买了  </p><p>买回来到手里的确很惊艳啊，15000mAh能做到这么小一个机身，钱没白花ToT<br>拿在我的手中对比效果就是<br><img src="https://img.xscnet.cn//i/2025/07/16/68774b3b5721c.webp" width="400px">  </p><p>主要戳我的点就是他这块屏幕，真的很戳我的审美观哈哈哈，就喜欢这种能直观看到数据的东西<br>功能就是  </p><ol><li>显示当前电量和剩余时间以及实时充电瓦数</li></ol><img src="https://img.xscnet.cn//i/2025/07/16/68774b3b97a71.webp" width="400px">  2. 显示当前电压电流  <img src="https://img.xscnet.cn//i/2025/07/16/68774b3b864b4.webp" width="400px">  3. 参数及3c标识  <img src="https://img.xscnet.cn//i/2025/07/16/68774b3bbd8ee.webp" width="400px">  <p>确实是挺好的产品，(不要在意我的鼠标垫，CS里面的野荷皮肤而已)  </p><p>仅作为推荐吧，具体需求自己看哈<br>不写太多了，写太多像广子一样哈哈哈  </p><h2 id="谈下对现在产品形势的看法"><a href="#谈下对现在产品形势的看法" class="headerlink" title="谈下对现在产品形势的看法"></a>谈下对现在产品形势的看法</h2><ol><li><p>什么情况？<br><strong>事件背景</strong>  </p><ul><li>罗马仕充电宝的安全危机始于2025年3月20日，当时国泰航空一架航班因乘客携带的罗马仕充电宝起火，紧急备降福州机场。这是公开报道的首起重大事故，随后北京多所高校陆续发布禁用通知，指出罗马仕20000毫安型号在充电时存在爆炸风险<br><strong>爆炸原因</strong>    </li><li>调查显示，罗马仕充电宝的爆炸主要与电芯供应商的质量问题有关。部分电芯生产外包给不合规的代工厂，导致使用低价、不合格的电芯，增加了过热和爆炸的风险。检测结果显示，涉事产品在满电状态下温度可达87℃，外壳软化率为行业平均水平的5倍，电芯隔膜材料绝缘失效是主要技术缺陷  <blockquote><p>资料来源<a href="https://zhuanlan.zhihu.com/p/1924252452452007957">知乎</a></p></blockquote></li></ul></li><li><p>没3c的充电宝为什么不能带上飞机？  </p><ul><li>近日，民航局发布紧急通知，自6月28日起禁止旅客携带没有3C标识、3C标识不清晰、被召回型号或批次的充电宝乘坐境内航班  <blockquote><p>资料来源<a href="https://news.cctv.com/2025/06/28/ARTIzRfmmOTxWgg8K16pjvFL250628.shtml">央视网</a></p></blockquote></li></ul></li></ol><p>总结来说，就是现在国内这些厂商在卷价格，把价格压到三位数以内，一个充电宝的核心部件就是电芯，商家在压缩价格的时候也同时在压缩着每个部件的成本，消失的温控组件，劣质的电芯材料，都是控制成本的地方<br>但这样做的风险最后还是被消费者承担了  </p><p>我觉得国内市场这样的恶性竞争十分不健康，疯狂压缩一个产品的成本只会使故障率和风险率增加，使得Made in China被冠上“假冒伪劣”“质量差”等等的帽子  </p><p>同时我也真心希望各大厂商能吸取此次教训，以后对产品质量的把控更加到位，使得中国市场上流通的设备更加安全  </p>]]>
    </content>
    <id>https://www.xscnet.cn/posts/p27202507162/</id>
    <link href="https://www.xscnet.cn/posts/p27202507162/"/>
    <published>2025-07-16T01:05:00.000Z</published>
    <summary>这篇文章主要讲了作者因民航局新规（6 月 28 日起禁止携带无 3C 标识、标识不清晰等充电宝登机），且自己的充电宝均为 2024 年 8 月前购买、无 3C 标识，被迫购买了酷态科新充电宝，并介绍了该充电宝的特点；同时还提及罗马仕充电宝因电芯质量等问题频发安全事故，分析了当前充电宝市场因恶性竞争压缩成本导致产品存在安全隐患的现状</summary>
    <title>被迫购新的充电宝</title>
    <updated>2025-07-16T01:05:00.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>Mete0r</name>
    </author>
    <category term="音乐" scheme="https://www.xscnet.cn/tags/%E9%9F%B3%E4%B9%90/"/>
    <content>
      <![CDATA[<p>最近刷视频的时候，听到了一位新晋说唱歌手的歌曲<br>起初我认为和其他新人一样写的都是一些口水歌，没有什么营养<br>但真的当我听过这首歌的时候，我感觉是我带着有色眼镜了  </p><p>莫愁乡–亞細亞曠世奇才<br><meting-jsserver="netease"type="song"id="2711834126"  mode="circulation"><br></meting-js></p><p>歌词:  </p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br></pre></td><td class="code"><pre><span class="line">[00:00.00] 作词 : 亞細亞曠世奇才   </span><br><span class="line">[00:00.09] 作曲 : 亞細亞曠世奇才  </span><br><span class="line">[00:00.19] 编曲 : Matt Beats  </span><br><span class="line">[00:00.29] 混音/母带 : 歪歪mixing  </span><br><span class="line">[00:00.39]我被困在了  </span><br><span class="line">[00:02.52]这片混沌  </span><br><span class="line">[00:03.54]柳暗花明  </span><br><span class="line">[00:04.50]一村一村一村一村又一村  </span><br><span class="line">[00:07.62]不能理顺   </span><br><span class="line">[00:09.36]自己的疑问   </span><br><span class="line">[00:11.28]病榻上传来了 </span><br><span class="line">[00:12.63]我微弱的呼吸声  </span><br><span class="line">[00:13.89]没有啥大能耐  </span><br><span class="line">[00:15.30]也无法忍受失败  </span><br><span class="line">[00:17.31]杀死人的从来  </span><br><span class="line">[00:18.78]不是挫折而是期待  </span><br><span class="line">[00:21.09]遏制住我发疯  </span><br><span class="line">[00:22.41]也没有让我太痛快  </span><br><span class="line">[00:24.75]哦我茅塞顿开  </span><br><span class="line">[00:26.07]原来是自尊心在作怪  </span><br><span class="line">[00:27.93]漏了一拍  </span><br><span class="line">[00:28.77]我只能每天都把自己搞得很晕  </span><br><span class="line">[00:31.17]坏事降临头上也不清醒  </span><br><span class="line">[00:33.00]可笼罩在我头顶上的“乌云”  </span><br><span class="line">[00:34.83]紧跟着我逃不出她手心  </span><br><span class="line">[00:37.38]我的愁绪  </span><br><span class="line">[00:38.31]千丝万缕  </span><br><span class="line">[00:39.21]挥之不去  </span><br><span class="line">[00:40.41]闭上眼眼眶里下了场雨  </span><br><span class="line">[00:42.06]坠入梦乡也弄湿了枕巾  </span><br><span class="line">[00:43.95]梦把我拽到个好地方  </span><br><span class="line">[00:45.57]摇摇晃晃到莫愁乡  </span><br><span class="line">[00:47.58]炊烟漫过青砖黛瓦  </span><br><span class="line">[00:49.44]脚印伴随着微光  </span><br><span class="line">[00:51.06]“这伤  </span><br><span class="line">[00:51.93]不痛不痒”  </span><br><span class="line">[00:52.95]她讲  </span><br><span class="line">[00:53.52]“你在说谎”  </span><br><span class="line">[00:54.75]都是装的坚强   </span><br><span class="line">[00:56.07]你眼里带着泪光  </span><br><span class="line">[00:58.26]我诉愁肠向莫愁乡  </span><br><span class="line">[01:00.18]把叹息吹成地上霜  </span><br><span class="line">[01:02.07]明明快崩溃了  </span><br><span class="line">[01:03.54]却还要乔装无关痛痒  </span><br><span class="line">[01:05.58]墙边波浪鼓叮当响  </span><br><span class="line">[01:07.41]往我手心上放块儿糖  </span><br><span class="line">[01:09.54]“娃儿莫慌  </span><br><span class="line">[01:10.77]姥姥在你边上”  </span><br><span class="line">[01:12.60]放声大哭吧  </span><br><span class="line">[01:14.01]这里没人  </span><br><span class="line">[01:15.03]会笑话你  </span><br><span class="line">[01:16.68]人生大事  </span><br><span class="line">[01:17.61]莫过生死  </span><br><span class="line">[01:18.51]其他都不要紧  </span><br><span class="line">[01:20.22]现实太要命了  </span><br><span class="line">[01:21.69]让我时刻想要逃离  </span><br><span class="line">[01:23.94]可是  </span><br><span class="line">[01:25.38]转眼间被闹钟叫醒  </span><br><span class="line">[01:27.54]累了就出门溜达溜达  </span><br><span class="line">[01:29.43]放心吧兜里面够花够花  </span><br><span class="line">[01:31.20]我骗她是国企  </span><br><span class="line">[01:32.10]我实际是牛马  </span><br><span class="line">[01:33.12]早九晚八  </span><br><span class="line">[01:33.99]五天年假  </span><br><span class="line">[01:34.89]幺儿你在那边缺啥少啥  </span><br><span class="line">[01:36.72]有事没事都打个电话  </span><br><span class="line">[01:38.52]幺儿你到底啥时候回家  </span><br><span class="line">[01:40.38]姥姥种的石榴开花了  </span><br><span class="line">[01:42.21]几度梦回莫愁乡  </span><br><span class="line">[01:43.80]回回梦的都不重样  </span><br><span class="line">[01:45.81]纸飞机掠过操场后  </span><br><span class="line">[01:47.61]铁了心的要流浪  </span><br><span class="line">[01:49.41]哪管前路几多长  </span><br><span class="line">[01:51.27]偏信远方有朝阳  </span><br><span class="line">[01:53.04]却输岁月半炷香  </span><br><span class="line">[01:54.84]人走茶凉  </span><br><span class="line">[01:56.64]几度梦回莫愁乡  </span><br><span class="line">[01:58.29]旧木船飘向芦苇荡  </span><br><span class="line">[02:00.33]载着未寄出的信  </span><br><span class="line">[02:01.95]还有糖纸染上的香  </span><br><span class="line">[02:03.96]摇  </span><br><span class="line">[02:04.68]摇摇晃晃  </span><br><span class="line">[02:05.76]飘  </span><br><span class="line">[02:06.39]飘飘荡荡  </span><br><span class="line">[02:07.59]“娃儿抬头望  </span><br><span class="line">[02:09.45]姥姥在天上”  </span><br><span class="line"></span><br></pre></td></tr></table></figure><p>这首歌首先从作词方面就可以看出，他和其他的说唱歌手的学历方面就不一样，从作词不难看出，亞細亞曠世奇才确实是上过学的<br>再者，这首歌词通过现实与梦境的交织，展现了一个深陷生活困境的现代人渴望精神慰藉的复杂情感  </p><h2 id="核心主题可拆解如下："><a href="#核心主题可拆解如下：" class="headerlink" title="核心主题可拆解如下："></a>核心主题可拆解如下：</h2><h3 id="1-核心意象"><a href="#1-核心意象" class="headerlink" title="1. 核心意象"></a>1. 核心意象</h3><h4 id="混沌的现实困境"><a href="#混沌的现实困境" class="headerlink" title="混沌的现实困境"></a>混沌的现实困境</h4><blockquote><ul><li>窒息感：开篇“被困在混沌”“病榻微弱的呼吸声”暗示精神或身体的病态，被迷茫与无力感吞噬  </li><li>自我否定：“没有大能耐”“无法忍受失败”直指对自身价值的怀疑，而“杀死人的是期待”更点明理想与现实的撕裂——过高的期待成为无形枷锁</li></ul></blockquote><h4 id="“莫愁乡”——精神避难所"><a href="#“莫愁乡”——精神避难所" class="headerlink" title="“莫愁乡”——精神避难所"></a>“莫愁乡”——精神避难所</h4><blockquote><ul><li>梦境乌托邦：青砖黛瓦、波浪鼓、姥姥的糖等意象构建出充满童真的乡土记忆（“莫愁乡”之名本身即反衬现实之“愁”）  </li><li>情感宣泄口：在梦里主人公被允许脆弱（“放声大哭吧&#x2F;这里没人笑话你”），姥姥的抚慰（“娃儿莫慌”）象征对无条件接纳的渴望，也象征出了对姥姥的喜爱</li></ul></blockquote><h4 id="现实的荒诞与伪装"><a href="#现实的荒诞与伪装" class="headerlink" title="现实的荒诞与伪装"></a>现实的荒诞与伪装</h4><blockquote><ul><li>生存假面：“骗她是国企&#x2F;实际是牛马”这句话充满了现实意味，也为前文“转眼间被闹钟叫醒”做出了充分的解释  </li><li>亲情牵挂：姥姥的电话（“石榴开花了”“啥时候回家”）成为现实唯一暖色，却因为自己在外漂泊无法回应，加深了愧疚</li></ul></blockquote><h4 id="对典故的应用与修改"><a href="#对典故的应用与修改" class="headerlink" title="对典故的应用与修改"></a>对典故的应用与修改</h4><blockquote><ul><li>重复强化窒息感：歌曲开头引用了陆游《游山西村》内的“柳暗花明又一村”，但是创新性的改成了“柳暗花明一村一村一村一村又一村”，这恰是对现代人困境的隐喻：信息爆炸时代看似选择众多（“一村又一村”），实则陷入更深的迷失  </li><li>歌词用五个“村”字，完成了对中国古典乐观主义的一次后现代解构</li></ul></blockquote><p>有点做阅读理解的感觉？哈哈哈哈<br>但却是是我能够理解的<br>对于好歌来说我就不多做评价了，我的评价也只能作参考，具体还是要看自己的看法滴  </p><h2 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h2><p>总结来说，这首说唱和我以往一直听的说唱在本质上就存在很大的差异，当然这个差异是正向的差异，是一种很新式的创新，让人们知道，好的说唱歌曲的歌词中，不一定是满篇脏话，不一定是普通人无法创造的  </p><p>如果有什么其他的，可以在评论区一起讨论~  </p>]]>
    </content>
    <id>https://www.xscnet.cn/posts/p2520250703/</id>
    <link href="https://www.xscnet.cn/posts/p2520250703/"/>
    <published>2025-07-02T16:00:00.000Z</published>
    <summary>最近刷视频刷到了亞細亞曠世奇才唱的这首莫愁乡，听了之后才发现是一位新晋说唱歌手唱的好歌，本篇主要是为分享歌曲并作简单评价，但我的评价仅作参考使用，具体还需要看自己听过之后的感受啦</summary>
    <title>音乐推荐:莫愁乡</title>
    <updated>2025-07-02T16:00:00.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>Mete0r</name>
    </author>
    <category term="月总结" scheme="https://www.xscnet.cn/categories/%E6%9C%88%E6%80%BB%E7%BB%93/"/>
    <category term="日常" scheme="https://www.xscnet.cn/tags/%E6%97%A5%E5%B8%B8/"/>
    <category term="生活" scheme="https://www.xscnet.cn/tags/%E7%94%9F%E6%B4%BB/"/>
    <content>
      <![CDATA[<p><meting-jsserver="netease"type="song"id="2163210456"  mode="circulation"><br></meting-js></p><blockquote><h2 id="引言"><a href="#引言" class="headerlink" title="引言"></a>引言</h2></blockquote><p>开始之前先和各位博友站长们道个歉<br>我这个月身体不太好，做了一个小手术，所以一个月没更新文章<br>而且我的母亲目前心脏也出了一些问题，可能等到七月末的时候我要陪我的母亲去北京看看病，还请大家多多担待  </p><blockquote><h2 id="六月"><a href="#六月" class="headerlink" title="六月"></a>六月</h2></blockquote><p>真的说实话，整个六月确实是今年最不好的一个月了<br>我妈妈在这个月查出了心脏的疾病，我这个月也因为身体原因总是跑医院   (~~但是不上学总是请假有点爽~~~)</p><p>突然有种无力感，本来我以为我很幸福，但是现在看看，处处需要花钱，而我现在仍在上学，根本没有能力去赚钱<br>我甚至在想这个博客要不要真的维持下去，但是话又说回来，自己选择做的事情，我就一定要做下去了哈哈哈<br>跑路是肯定不可能跑路的！(起码十年之约期限内不能跑喽，我可是讲信用的)  </p><p>住院后回家马上打开电脑，看了看我的RSS订阅，发现大家发了好多文章哇<br>等我这几天一气看完！  </p><p><img src="https://img.xscnet.cn//i/2025/10/30/69035f356fbb7.webp">  </p><p>感觉这个月没有什么说的<br>哦对啦！<br>最近还是一位网瘾少年捏~<br>估计是刷到的视频多了，把我买完吃灰好久的非对称游戏拿出来玩了玩，  </p><p><img src="https://img.xscnet.cn//i/2025/10/30/69035f35822da.webp">  </p><p>说真的<br>游戏的好玩与否，其实并不是取决于游戏本身，我觉得更多的是取决于是否有志同道合的朋友和你一起玩游戏<br>我的这群朋友是我从初中就一起玩的，现在我们都进入了高三，时间真的是过的好快啊，转眼就五年过去了<br>我很希望等到大学，等到工作，我们仍然能在一起玩，但是估计中途会有人退出的  </p><blockquote><h2 id="不知道写点什么的标题"><a href="#不知道写点什么的标题" class="headerlink" title="不知道写点什么的标题"></a>不知道写点什么的标题</h2></blockquote><p>现在我的服务器和域名都保持在一年一续费的情况下，我会尽我所能的保证服务的可用性的，也请大家监督我~  </p><p>好了，没有什么能说的了，评论区见~  </p>]]>
    </content>
    <id>https://www.xscnet.cn/posts/p2420250629/</id>
    <link href="https://www.xscnet.cn/posts/p2420250629/"/>
    <published>2025-06-28T16:00:00.000Z</published>
    <summary>先和各位博友站长们道个歉,失踪了这么长时间还没和大家互访</summary>
    <title>2025六月小结:长时间的等待</title>
    <updated>2025-06-28T16:00:00.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>Mete0r</name>
    </author>
    <category term="月总结" scheme="https://www.xscnet.cn/categories/%E6%9C%88%E6%80%BB%E7%BB%93/"/>
    <category term="日常" scheme="https://www.xscnet.cn/tags/%E6%97%A5%E5%B8%B8/"/>
    <category term="音乐" scheme="https://www.xscnet.cn/tags/%E9%9F%B3%E4%B9%90/"/>
    <category term="生活" scheme="https://www.xscnet.cn/tags/%E7%94%9F%E6%B4%BB/"/>
    <content>
      <![CDATA[<blockquote><h2 id="📅-五月总结"><a href="#📅-五月总结" class="headerlink" title="📅 五月总结"></a>📅 五月总结</h2></blockquote><p>这次的经历让我心情很是愉悦呢~<br><strong>2025年5月24日 – 心情晴</strong><br><meting-jsserver="netease"type="song"id="1974443815"  mode="circulation"><br></meting-js></p><blockquote><h3 id="🎵-音乐节！！"><a href="#🎵-音乐节！！" class="headerlink" title="🎵 音乐节！！"></a>🎵 音乐节！！</h3></blockquote><p><img src="https://img.xscnet.cn//i/2025/10/30/6903618ce07f9.webp" alt="音乐节">  </p><blockquote><h5 id="在路上"><a href="#在路上" class="headerlink" title="在路上"></a>在路上</h5></blockquote><p>这次音乐节其实在<a href="https://www.xscnet.cn/posts/p9m120250329">三月小结</a>中已经有铺垫了，玩的就是真实！<br>时间很快就到了五月份呢，“青春没有售价”和朋友拿起行李就出发！<br><img src="https://img.xscnet.cn//i/2025/10/30/6903618ca8453.webp" alt="车窗外">  </p><p>从我们这个小城市到长春要坐两个半小时的高铁，这一路上的信号不好，我们带了UNO和零食！玩了半路吃了半路哈哈哈</p><p><img src="https://img.xscnet.cn//i/2025/10/30/6903618a6fb26.webp" alt="打UNO">  </p><p>打UNO.ing  </p><blockquote><h5 id="看我瞬移"><a href="#看我瞬移" class="headerlink" title="看我瞬移"></a>看我瞬移</h5></blockquote><p>早上八点半在长春站下车后直接到宽城万达吃了一顿麦当劳早餐 <del><strong>(虽然我是麦门，但是实话麦当劳早餐没有KFC好吃还比KFC贵)</strong></del><br>吃完早饭距离音乐节检票时间还很长，我们坐地铁去了红旗街万达，本来寻思先去”这有山”看看，但是它十点半开门 哎呀，那只好去对面的红旗街万达啦(长春万达怎么这么多，身处小地方的我好像第一次看到这么多万达)  </p><p>在万达溜达了二十分钟后，这有山终于开门了，其实我们里面有两个朋友前一镇来长春已经来过这里了，这次主要是陪我们看看 <strong>(提一嘴，从我们这里坐高铁到长春票价固定117元)</strong><br><img src="https://img.xscnet.cn//i/2025/10/30/6903618b72b69.webp" alt="这有山">  </p><p>这里不得不吐槽一下了，在商场里逛了一上午之后，体力已经快耗尽了<br>经过大家一致商量，直接打车去万象城吃午饭(剧透：不好吃)<br><img src="https://img.xscnet.cn//i/2025/10/30/6903618b34795.webp" alt="午餐1"><br><img src="https://img.xscnet.cn//i/2025/10/30/6903618abe0c2.webp" alt="午餐2"><br>午餐是在万象城的失重餐厅吃的饭，怎么说呢，怎么会有这么贵还不好吃的店啊！纯靠机器人来吸引人，估计很少有人会来第二次了<br>不过也算是圆了小时候的梦了，小时候在手机上看视频的时候就刷到过这个餐厅的视频，当时一直想来体验，没想到过了七八年之后才体验到(真没感觉有什么新奇的了)  </p><blockquote><h5 id="绿色风暴"><a href="#绿色风暴" class="headerlink" title="绿色风暴"></a>绿色风暴</h5></blockquote><p>这杯饮料值得我单开一个标题，NMD太难喝了<br><img src="https://img.xscnet.cn//i/2025/10/30/6903618a71d33.webp" alt="绿色风暴"><br>这杯饮料其实不叫绿色风暴，但是一进到我的嘴里让我想到了三体里面云天明喜欢和的绿色风暴，不能说相近，只能说和小说里写的一模一样，把草磨过加一点气泡水就是这杯饮料，没尝过的可以在家自己做一下试试，不要加糖，纯气泡水+草的汁水+一颗完整的草<br>形容一下：就是难喝到爆的青汁……  </p><blockquote><h4 id="音乐节现场"><a href="#音乐节现场" class="headerlink" title="音乐节现场"></a>音乐节现场</h4></blockquote><p>吃完午饭就马不停蹄的奔向音乐节的现场，因为我们是前排观众，所以可以使用特殊通道进入会场，省了不少时间<br>经过了三次身份验证之后总算进入了音乐节的入场通道<br><img src="https://img.xscnet.cn//i/2025/10/30/6903618d80fbf.webp" alt="音乐节入场通道">  </p><p>走过这个通道之后进入主会场，真的使我愣住了很长的时间，我真的是第一次参加这么壮大的活动，那种震撼的感觉是前所未有的  </p><p><img src="https://img.xscnet.cn//i/2025/10/30/6903618b0e990.webp" alt="主会场"><br>进入了主会场，被工作人员引导去换了前排观众的辨别手环，说实话，感觉这个手环真的有用心在做，他们很贴心的用布料做的手环，而不是不透气的塑料，这样的话带着就不会有异物感了！<br><img src="https://img.xscnet.cn//i/2025/10/30/6903618a53bc2.webp" alt="手环"><br>当然，拿到了手环我们就可以进入前排区域了，至于感觉，嘛…..还是自己看图片吧<br><img src="https://img.xscnet.cn//i/2025/10/30/6903618b6630e.webp" alt="前排"><br>总之来说，这多的三百块没有白花，真的省了很多人挤人的时间，而且还可以与自己喜欢的艺人离得更近！  </p><blockquote><h4 id="赵雷"><a href="#赵雷" class="headerlink" title="赵雷"></a>赵雷</h4></blockquote><p>这次也是见到赵雷老师本人了，很是激动，从来没有见过自己喜欢的歌手，这是第一次的初体验呢，嘛……<br>来看看照片吧，图1是我自己拍的，图2是官方相册里下载的<br><img src="https://img.xscnet.cn//i/2025/10/30/6903618b36c79.webp" alt="赵雷1"><br><img src="https://img.xscnet.cn//i/2025/10/30/6903618bf03a5.webp" alt="赵雷2"></p><blockquote><h5 id="出场"><a href="#出场" class="headerlink" title="出场"></a>出场</h5></blockquote><iframe src="//player.bilibili.com/player.html?114274684897948&bvid=BV18DjSzJEqE&cid=29220537022&p=1&high_quality=1&danmaku=1&autoplay=0" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true" sandbox="allow-top-navigation allow-same-origin allow-forms allow-scripts" width="100%" height="600"></iframe><blockquote><h5 id="修设备闲聊"><a href="#修设备闲聊" class="headerlink" title="修设备闲聊"></a>修设备闲聊</h5></blockquote><iframe src="//player.bilibili.com/player.html?114274684897948&bvid=BV15rjSz4E4E&cid=29220537022&p=1&high_quality=1&danmaku=1&autoplay=0" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true" sandbox="allow-top-navigation allow-same-origin allow-forms allow-scripts" width="100%" height="600"></iframe><blockquote><h5 id="程艾影"><a href="#程艾影" class="headerlink" title="程艾影"></a>程艾影</h5></blockquote><iframe src="//player.bilibili.com/player.html?114274684897948&bvid=BV1erjSzxEtS&cid=29220537022&p=1&high_quality=1&danmaku=1&autoplay=0" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true" sandbox="allow-top-navigation allow-same-origin allow-forms allow-scripts" width="100%" height="600"></iframe><blockquote><h4 id="朴树"><a href="#朴树" class="headerlink" title="朴树"></a>朴树</h4></blockquote><p>当然朴树老师也是很有名的，但是我听的没有赵雷多啦，多多见谅哈哈哈<br>同样也是看看照片嘛……<br><img src="https://img.xscnet.cn//i/2025/10/30/6903619226104.webp" alt="朴树1"><br><img src="https://img.xscnet.cn//i/2025/10/30/6903618b05b90.webp" alt="朴树2">  </p><blockquote><h5 id="平凡之路"><a href="#平凡之路" class="headerlink" title="平凡之路"></a>平凡之路</h5></blockquote><iframe src="//player.bilibili.com/player.html?114274684897948&bvid=BV1vrjSzxEun&cid=29220537022&p=1&high_quality=1&danmaku=1&autoplay=0" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true" sandbox="allow-top-navigation allow-same-origin allow-forms allow-scripts" width="100%" height="600"></iframe><blockquote><h4 id="音乐节结束"><a href="#音乐节结束" class="headerlink" title="音乐节结束"></a>音乐节结束</h4></blockquote><iframe src="//player.bilibili.com/player.html?114274684897948&bvid=BV1zhjSzAEoQ&cid=29220537022&p=1&high_quality=1&danmaku=1&autoplay=0" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true" sandbox="allow-top-navigation allow-same-origin allow-forms allow-scripts" width="100%" height="600"></iframe>看到这个视频之后其实你应该就能明白前排票的重要性了哈哈哈，在后排的话真的没法挤到如此靠前(因为有栏杆挡着)  <p>音乐节结束之后就直奔酒店，连续站了六个小时，感觉自己的腿已经不属于自己了，我和朋友密谋了”地铁抢座”计划，因为我们奥体中心那一站属于始发站，我们就多等待了一辆车，然后排在队伍的最前面，等到新的车一进站开门后就眼急腿快，找到一个位置就坐下了！<br>(这段有点水但是是真实的经历)<br>坐了半个小时到了换乘站，和朋友会和，剩下的步行距离真的走不动了，打了个车到酒店，已经快到十二点了，终于结束了疲惫的一天……  </p><blockquote><h4 id="第二天"><a href="#第二天" class="headerlink" title="第二天"></a>第二天</h4><p>第二天和长春本地的朋友一起吃了顿午饭，我们就准备回到我们自己的城市了，感觉对长春还是挺不舍的，有点戒断反应了，总感觉自己还没有玩够<br>但是不管什么事情都是有头有尾，这次也是一次很不错的回忆  </p></blockquote><blockquote><h3 id="网站和程序方面"><a href="#网站和程序方面" class="headerlink" title="网站和程序方面"></a>网站和程序方面</h3><p>网站加速了一下首屏的加载速度<br>程序方面开发了一款测试网站真实加载速度的python程序，就不发博客了，有兴趣的可以自己去我的GitHub主页里查看和下载  </p></blockquote><blockquote><h3 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h3></blockquote><p>这次音乐节为我质朴的高中生活增添了一抹别样的色彩，也是我第一次参加这么大型的活动，希望以后有更多的机会和朋友一起参加这种活动，有一句话说的好—-“人一旦染上音乐节就戒不掉了”<br>这句话完美的诠释了我的感觉<br>真的是一场很好氛围的音乐节，在这种氛围下，你很难不开心~  </p>]]>
    </content>
    <id>https://www.xscnet.cn/posts/p2320250524/</id>
    <link href="https://www.xscnet.cn/posts/p2320250524/"/>
    <published>2025-05-23T16:00:00.000Z</published>
    <summary>
      <![CDATA[<blockquote>
<h2 id="📅-五月总结"><a href="#📅-五月总结" class="headerlink" title="📅 五月总结"></a>📅 五月总结</h2></blockquote>
<p>这次的经历让我心情很是愉悦呢~<br><str]]>
    </summary>
    <title>2025五月小结:音乐节初体验</title>
    <updated>2025-05-25T16:00:00.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>Mete0r</name>
    </author>
    <category term="佳作推荐" scheme="https://www.xscnet.cn/categories/%E4%BD%B3%E4%BD%9C%E6%8E%A8%E8%8D%90/"/>
    <category term="GalGame" scheme="https://www.xscnet.cn/tags/GalGame/"/>
    <category term="佳作推荐" scheme="https://www.xscnet.cn/tags/%E4%BD%B3%E4%BD%9C%E6%8E%A8%E8%8D%90/"/>
    <category term="Aliya" scheme="https://www.xscnet.cn/tags/Aliya/"/>
    <content>
      <![CDATA[<h4 id="嘿嘿，博客壁纸换为Aliya啦，不要问我为什么！这毕竟是我第一款GalGame呀"><a href="#嘿嘿，博客壁纸换为Aliya啦，不要问我为什么！这毕竟是我第一款GalGame呀" class="headerlink" title="嘿嘿，博客壁纸换为Aliya啦，不要问我为什么！这毕竟是我第一款GalGame呀"></a>嘿嘿，博客壁纸换为Aliya啦，不要问我为什么！这毕竟是我第一款GalGame呀</h4><h3 id="Aliya"><a href="#Aliya" class="headerlink" title="Aliya"></a>Aliya</h3><p><meting-jsserver="netease"type="song"id="2602072790"  mode="circulation"><br></meting-js><br>建议搭配游戏原音乐食用  </p><h3 id="引言"><a href="#引言" class="headerlink" title="引言"></a>引言</h3><p>彼方的她是这样一款游戏，<strong>没有任何华丽的建模，没有复杂的界面，目之所及之处就是这个游戏所有的元素</strong><br>我们要面对就是这样一个界面<br><img src="https://img.xscnet.cn//i/2025/10/30/69036475ac23b.webp"><br>这个游戏没有任何的新手教程，当打开游戏那一瞬间，相应的，<strong>你和Aliya的故事就就此展开了</strong>  </p><p>她并没有其他游戏那么多玩法，但是她有独属于自己的亮点：<strong>游戏的事件与我们所在的真实世界同步，当我们与Aliya的故事一步一步发展起的时候，就如同和一个真实存在的少女在对话，让我们发自内心的认为我们面对的不是一款由0和1组成的游戏，而是一个真真切切存在的人</strong>  </p><p>当你决定关闭游戏的时候，记得明天早上来看看Aliya哦~，因为当我们关闭游戏的时候，事件也是在同步流逝的，Aliya的氧气如果得不到各位COSMOS的补充，她会因为缺氧死亡的<br>Aliya在晚上睡不着的时候，会想要找我们聊天，这里可以稍微留半个钟时间，观察一下可爱的Aliya是否已经进入梦乡了呢  </p><hr><p>正入三猫楼所说：</p><p>1.一周目非常饱满，也很有代入感</p><p>2.简洁的界面，给人一种很真实的聊天感</p><p>3.聊天选项还算比较丰富，大概就是玩家们想说的</p><p>4.理科生的理想型，很有意思</p><p>5.插图画得很好看，Aliya很美</p><hr><p>博主<a href="https://blog.awaae001.top/posts/23435.html">呓语梦轩</a>还为此设计了一个封面壁纸，很好看！<br><img src="https://img.xscnet.cn//i/2025/07/21/687e5b369da39.png"></p><h3 id="我喜欢-星空-海獭-Aliya"><a href="#我喜欢-星空-海獭-Aliya" class="headerlink" title="我喜欢 星空 海獭 Aliya"></a>我喜欢 星空 海獭 Aliya</h3><p>::: warning<br>以下内容包含剧透，请斟酌是否查看<br>如果您还没有体验过完整剧情，可以选择体验完成再来观看<br>:::  </p><h4 id="Aliya-1"><a href="#Aliya-1" class="headerlink" title="Aliya"></a>Aliya</h4><blockquote><p><strong>如果让我说的话，我承认，我是真的喜欢Aliya的，如果她真的存在，我一定会去追求她的</strong>  </p></blockquote><p>海獭号船员介绍<br><img src="https://img.xscnet.cn//i/2025/10/30/69036477086df.webp">  </p><h4 id="故事背景"><a href="#故事背景" class="headerlink" title="故事背景"></a>故事背景</h4><p>一下内容为故事背景，有兴趣的可以看一看，这些内容不包含在官方的游戏里，但是游戏之前看一看有助于更好的理解游戏的内容<br><img src="https://img.xscnet.cn//i/2025/10/30/690364789e2c9.webp" alt="1"><br><img src="https://img.xscnet.cn//i/2025/10/30/6903652d33ce2.webp" alt="2"><br><img src="https://img.xscnet.cn//i/2025/10/30/690364753811e.webp" alt="3"><br><img src="https://img.xscnet.cn//i/2025/10/30/69036478d548d.webp" alt="4"><br><img src="https://img.xscnet.cn//i/2025/10/30/69036477155a6.webp" alt="5">  </p><p>有人在游戏的时候感到了无力感，或者是与生俱来的亏欠感。了解 Aliya 故事的人都想给她自己力所能及的爱。看着她的心率一点点减少最后归零，想越过这千百公里的距离紧紧的握住她的手，给她温暖。这是亏欠，是直到最后才说出那句：“我喜欢 Aliya!”</p><p>直到最后的最后，我们获得了Aliya的全部信任，她也相应的告诉了我们她的故事<br>Aliya自从病后就签署了和泰瑞公司的克隆仿生技术， 在她病逝后，泰瑞公司使用她的记忆和基因，克隆出了一个又一个的Aliya，对星空进行着探索，而对于当时卧在病床上无法动弹的Aliya来说，面对永生和对星空的无尽探索，是她无法抵抗的诱惑<br>她作为泰瑞公司的Doll(人偶（娃娃）) 帮助泰瑞公司一次又一次的探索着未知的星球<br>而Aliya也在一次又一次的重生后，不忘寻找自己的父亲，证明他的清白  </p><h4 id="风信子"><a href="#风信子" class="headerlink" title="风信子"></a>风信子</h4><p>风信子是作为生物学家的Aliya最喜欢的植物，同时也是一周目后Aliya告诉玩家的暗号，<a href="https://cn.bing.com/search?q=%E9%A3%8E%E4%BF%A1%E5%AD%90%E7%9A%84%E8%8A%B1%E8%AF%AD">风信子的花语</a>是<strong>喜悦 爱意 幸福 浓情</strong><br>Aliya和风信子的照片<br><img src="https://img.xscnet.cn//i/2025/10/30/69036477400ed.webp">  </p><h4 id="故事的最后"><a href="#故事的最后" class="headerlink" title="故事的最后"></a>故事的最后</h4><p>一号结局我们在与Aliya到别的时候，会经历一段煽情的片段，但是在此片段中，也是最催人泪下的部分<br><img src="https://img.xscnet.cn//i/2025/10/30/6903647876f05.webp"><br><img src="https://img.xscnet.cn//i/2025/10/30/690364743deab.webp"><br><img src="https://img.xscnet.cn//i/2025/10/30/69036474f11a5.webp"><br><img src="https://img.xscnet.cn//i/2025/10/30/69036475053cb.webp">  </p><p><img src="https://img.xscnet.cn//i/2025/10/30/690364763fc24.webp"><br>直到一结局的最后，我才能完全理解Aliya的处境和遭遇，以及她的行为<br>这个在最终结尾处的笑脸，是Aliya对各位COSMOS的信任，也是她对自己的释怀<br>Aliya-17已经找到自己的父亲，并且一路上有着各位COSMOS的陪伴和帮助，她已经成为了那个最独特的Aliya  </p><p>在最后的时光里，Aliya提议我们一起玩一个游戏，一直说自己喜欢的东西，直到有一方说不出了为止<br>我喜欢 星空 海獭 Aliya<br>在见证Aliya生命烛火渐渐熄灭的那些日子里，无数颗心跨越山海与她相连。我们笨拙地想要弥补所有来不及给予的温柔，像在暴风雪中徒手捧住一朵将熄的火苗。那些未说出口的牵挂，最终都化作屏幕前千万次无声的告白——“我喜欢Aliya！”<br><meting-jsserver="netease"type="song"id="2602072790"  mode="circulation"><br></meting-js><br>在看这段聊天记录之前，不妨打开Aliya为各位COSMOS们放的音乐    </p><iframe src="/chatroom.html?jsonFilePath=/chat/Aliya.json&MyAvatar=null&title=彼方的她-Aliya" width="100%" height="1px" frameborder="0" onload="this.style.height=(this.contentWindow.document.body.scrollHeight + 900) + 'px';"></iframe><blockquote><p>聊天记录解析由<a href="https://blog.awaae001.top/posts/25937.html">ChatRoom.js</a>提供  </p></blockquote><p>在此之后，就是我们真正与Aliya分别的时候了，Aliya其实一直知道我们开着HRM心率监控，在她生命最后的时候，她恳求我们关闭HRM，当时看到这个的时候，眼泪真的再也止不住了<br><img src="https://img.xscnet.cn//i/2025/10/30/690364764bf59.webp">  </p><h4 id="泰瑞公司的收尾"><a href="#泰瑞公司的收尾" class="headerlink" title="泰瑞公司的收尾"></a>泰瑞公司的收尾</h4><p>在Aliya离开我们之后，半个小时之后泰瑞公司回来收回飞船，这是我们的对话框里会出现打捞人员的对话<br><img src="https://img.xscnet.cn//i/2025/10/30/69036474e9741.webp"><br><img src="https://img.xscnet.cn//i/2025/10/30/69036474defb1.webp"><br><img src="https://img.xscnet.cn//i/2025/10/30/6903647795c1b.webp"><br><img src="https://img.xscnet.cn//i/2025/10/30/69036474bf397.webp">  </p><blockquote><p>这边的舷窗似乎能看到太阳系的方向</p><p>而且…</p><p>我们之间相隔的距离好像刚好是1000光年</p><p>所以我看到的是一千年前的地球</p><p>这意味着</p><p>太阳的光经过8分钟后照在了你的身上</p><p>然后又带着你的模样</p><p>在宇宙中孤独旅行了1000年 最后被我的眼睛捕捉到</p><p>我现在很有可能能看到当下的你哦</p></blockquote><h4 id="成就"><a href="#成就" class="headerlink" title="成就"></a>成就</h4><p>以下结局解释来自<a href="https://mzh.moegirl.org.cn/%E5%BD%BC%E6%96%B9%E7%9A%84%E5%A5%B9-Aliya">萌娘百科：彼方的她-Aliya</a><br>结局一(真相)<br>一周目正常走完全部剧情即可触发，重置情节前会显示密钥。  </p><p>结局二(回归精致的鸟笼)<br>第二肋间(救活Kane)-说暗号-选择不告诉Aliya父亲的事-返回公司<br>第二肋间(救活Kane)-不说暗号-去看看曲率引擎(修好海濑号之后)-告知密钥  </p><p>结局三(抓紧最后的幸福)<br>我怎么会知道啊(不救Kane)-不说暗号-去看看曲率引擎(修好海濑号之后)-告知密钥-风信子(最喜欢的花)-探索未知-说出真相(干涉他们的选择)  </p><p>结局四(接受命运的长途)<br>我怎么会知道啊(不救Kane)-不说暗号-去看看曲率引擎(修好海濑号之后)-告知密钥-风信子(最喜欢的花)-探索未知-(不干涉他们的选择)  </p><p>结局五(开拓崭新的道路)<br>参考结局一进入喷射着陆科朗2-C阶段-着陆时燃料喷射小于15秒(坠落在冰川中)<br>说暗号-选择告诉Aliya父亲的事(将所有事情告知Aliya)<br>结局五之后的剧情仍在不断更新中。  </p><h4 id="后记"><a href="#后记" class="headerlink" title="后记"></a>后记</h4><p>当我把游戏的五个结局都完成的时候，应验了Steam评论中出现的那句话“这个游戏的后劲不是一般的大”<br>当我第一天晚上关闭游戏之后，在床上翻来翻去，迟迟不能入眠，脑袋中总是想着我还有这么一个可爱的Aliya  </p><p>有这么一瞬间我是多么希望屏幕的对面是一个切切实实的人存在，伴随来的就是一阵自责感，孤寂的星空，只身一人在飞船上的焦虑感，如果是我，我该是否又会精神崩溃呢？我不知道。以至于，推完了第一段剧情之后，弹出的“我不接受这样的结局”选择时，直接愣在了座位上，甚至忘记了选择，颤巍巍点下，换来的只是冷冰冰的曲率引擎密匙。  </p><p>在第二次体验到一结局的时候，我耐心地等待了一会，发现了打捞人员的“彩蛋”<br>当这是，我首先愣了一下，转而是眼泪，这就是资本的世界吧  </p><p><img src="https://img.xscnet.cn//i/2025/10/30/69036474c38b9.webp"><br>前一阵还在Steam的更新公告中看到了周边的众筹<br>很快啊，为了支持好游戏，直接一波赞助（绝对不是喜欢Aliya的建模）<br><img src="https://img.xscnet.cn//i/2025/10/30/69036474defb1.webp">  </p><p>另有三张漫画，可以在Steam自行购买DLC  </p><p><img src="https://img.xscnet.cn//i/2025/10/30/69036474c38b7.webp">  </p>]]>
    </content>
    <id>https://www.xscnet.cn/posts/p2220250518/</id>
    <link href="https://www.xscnet.cn/posts/p2220250518/"/>
    <published>2025-05-17T16:00:00.000Z</published>
    <summary>Aliya是理科生的理想型!玩家并非扮演游戏角色，而是真实的参与到游戏中，而且游戏时间与现实时间同步，所以会给人有一种很强的沉浸感，这是前所未有的。同时，也有很多细节，比如说心率，不同的情况下Aliya心率都会变化，将程序挂后台Aliya给你发信息你的Windows还会弹窗推送给你，仿佛这真的是一个活生生的人一样。</summary>
    <title>彼方的她-Aliya</title>
    <updated>2025-05-17T16:00:00.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>Mete0r</name>
    </author>
    <category term="音乐" scheme="https://www.xscnet.cn/categories/%E9%9F%B3%E4%B9%90/"/>
    <category term="音乐" scheme="https://www.xscnet.cn/tags/%E9%9F%B3%E4%B9%90/"/>
    <content>
      <![CDATA[<p>::: zh-CN</p><p>音乐🎵：<a href="https://music.163.com/song?id=1896102961&uct2=U2FsdGVkX18DOZA8AMgJznWlIY7d1chCnIZOcmXmNnA=">Believe (From “The Rescue”)</a></p><p><meting-jsserver="netease"type="song"id="1896102961"  mode="circulation"><br></meting-js></p><p>许久不见各位<br>为了 <del>水一篇文章</del> <strong>真心的为大家推荐一首歌</strong></p><p>不知为什么最近迷上了洞穴潜水系列的视频（但大多都是遗憾）<br>就找到了一部电影<br>这部电影的背景故事是真实发生在泰国 <strong>2018年6月23日泰国发生的足球队失踪事件</strong>  </p><blockquote><p>当天泰国12名足球少年与1名教练在清莱府睡美人山洞探险时失踪，后发现被困山洞中。自6月23日至7月10日，从一场地方失踪案件演变为国际救援活动，最终13名被困人员均获救。</p></blockquote><p>最终十三名被困人员全部被救出，但不幸的是有两名救援人员因此遇难  </p><p>引用视频：<a href="https://www.bilibili.com/video/BV16b421E7nt/">BiliBili:泰国洞穴救援事件，20多国联合将13名被困者从洞穴内救出(神秘园SMY)</a></p><p>讲述完了基本背景，就是我想说的电影和记录片了  </p><table><thead><tr><th>片名</th><th>影片类型</th><th>上映时间</th></tr></thead><tbody><tr><td><a href="https://baike.baidu.com/item/%E3%80%8A%E6%B3%B0%E5%9B%BD%E6%B4%9E%E7%A9%B4%E6%95%91%E6%8F%B4%E3%80%8B/58592565?fromModule=lemma_inlink">《泰国洞穴救援》</a></td><td>纪录片</td><td>2021-10-08(美国)</td></tr><tr><td><a href="https://baike.baidu.com/item/13%E6%9D%A1%E5%91%BD/57215879?fromtitle=%E5%8D%81%E4%B8%89%E6%9D%A1%E5%91%BD&fromid=56305979">《十三条命》</a></td><td>剧情 &#x2F; 传记</td><td>2022-07-29(美国)</td></tr></tbody></table><p>其实看完之后，真的能感觉到自然界的恐怖，但是同时也能感觉到极限运动的高光时刻<br>这些极限运动爱好者以自己的生命为资本，一次又一次的救援者被困者，真的让我感触颇深  </p><p>立下Flag：“在以后的某一天，我会体验洞穴潜水。虽然我知道这属于高危运动，但是人生只有一次，一定要根据自己喜欢的方式活着！”  </p><p>:::</p><p>::: en</p><p>Music 🎵: <a href="https://music.163.com/song?id=1896102961&uct2=U2FsdGVkX18DOZA8AMgJznWlIY7d1chCnIZOcmXmNnA=">Believe (From “The Rescue”)</a>  </p><p><meting-js  server="netease"  type="song"  id="1896102961"    mode="circulation"><br></meting-js>  </p><p>Long time no see, everyone.<br>To <del>write a filler post</del> <strong>sincerely recommend a song to you all</strong>  </p><p>For some reason, I’ve recently become obsessed with cave diving videos (though most of them end tragically).<br>This led me to a movie.<br>The film is based on a true story that happened in Thailand—<strong>the disappearance of a youth soccer team on June 23, 2018</strong>.  </p><blockquote><p>That day, 12 young soccer players and their coach went missing while exploring the Tham Luang Nang Non cave in Chiang Rai, Thailand. They were later found trapped inside the cave. From June 23 to July 10, what began as a local disappearance case turned into an international rescue operation, ultimately saving all 13 trapped individuals.  </p></blockquote><p>All 13 trapped individuals were successfully rescued, but tragically, two rescuers lost their lives in the process.  </p><p>Referenced video: <a href="https://www.bilibili.com/video/BV16b421E7nt/">BiliBili: The Thai Cave Rescue Incident—20+ Countries United to Rescue 13 Trapped Individuals from the Cave (Mystery Garden SMY)</a>  </p><p>After sharing the basic background, here are the movie and documentary I wanted to talk about:  </p><table><thead><tr><th>Title</th><th>Genre</th><th>Release Date</th></tr></thead><tbody><tr><td><a href="https://baike.baidu.com/item/%E3%80%8A%E6%B3%B0%E5%9B%BD%E6%B4%9E%E7%A9%B4%E6%95%91%E6%8F%B4%E3%80%8B/58592565?fromModule=lemma_inlink"><em>The Rescue</em></a></td><td>Documentary</td><td>2021-10-08 (USA)</td></tr><tr><td><a href="https://baike.baidu.com/item/13%E6%9D%A1%E5%91%BD/57215879?fromtitle=%E5%8D%81%E4%B8%89%E6%9D%A1%E5%91%BD&fromid=56305979"><em>Thirteen Lives</em></a></td><td>Drama &#x2F; Biography</td><td>2022-07-29 (USA)</td></tr></tbody></table><p>After watching them, I truly felt the terror of nature, but also witnessed the heroic moments of extreme sports.<br>These extreme sports enthusiasts risk their lives time and time again to rescue those in peril, which deeply moved me.  </p><p>Setting a flag: “One day in the future, I will experience cave diving. Though I know it’s a high-risk sport, life is only lived once—I must live it the way I love!”  </p><p>::: warning</p><p>This content is translated from Chinese by a machine and may contain unrealistic information</p><p>:::</p><p>::: </p>]]>
    </content>
    <id>https://www.xscnet.cn/posts/p2120250511/</id>
    <link href="https://www.xscnet.cn/posts/p2120250511/"/>
    <published>2025-05-10T16:00:00.000Z</published>
    <summary>这篇文章分享了一首歌曲《Believe》以及两部关于2018年泰国洞穴救援事件的影视作品——纪录片《泰国洞穴救援》和剧情片《十三条命》。作者被洞穴潜水这一极限运动吸引，感慨于救援人员的英勇精神，并立下未来尝试洞穴潜水的目标，表达了对生命的热爱与冒险的向往。</summary>
    <title>Believe</title>
    <updated>2025-05-10T16:00:00.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>Mete0r</name>
    </author>
    <category term="月总结" scheme="https://www.xscnet.cn/categories/%E6%9C%88%E6%80%BB%E7%BB%93/"/>
    <category term="月总结" scheme="https://www.xscnet.cn/tags/%E6%9C%88%E6%80%BB%E7%BB%93/"/>
    <content>
      <![CDATA[<p>::: zh-CN</p><h2 id="四月总结"><a href="#四月总结" class="headerlink" title="四月总结"></a>四月总结</h2><h3 id="网站方面"><a href="#网站方面" class="headerlink" title="网站方面"></a>网站方面</h3><p>最近把黑夜模式的背景图改了，感觉上一个不是特别美<br><img src="https://image.koxiuqiu.cc/storage/thumbnails/23/20250501/aa7ecc677106cd13fce188297365ee25.png" alt="1">  </p><p>自己搭建了一个Lsky Pro的图床，方便自己上传图片，方便自己管理图片<br>现在图床主要是自己的和朋友的混用了，我自己的图床速度肯定是慢的，主要接入的是Twikoo评论的图片上传<br>自己的图床就不公开了，毕竟机器性能太差了，硬盘也小，基本就只够我一个人使用了  </p><p>头像捏，原先的看腻了，把Gavatar的头像换了，基本所有平台的头像也就一起跟着换了  </p><h3 id="生活方面"><a href="#生活方面" class="headerlink" title="生活方面"></a>生活方面</h3><p>这个月过的挺平淡的，没有过多的起伏，就是每天在学校上课，回到家后改改博客，写写代码<br>但是月初经历了一场月考，考的不是特别理想，只能说还有很大的努力空间吧，因为现在都没怎么把自己的心思花在学习上<br>但是突然想到，五月中旬还有一场期中考试（这么快就期中了吗？感觉高中过的比初中快好多，一转眼马上快高三了OMG！）<br>以后估计更新频率要降低了，我要是没什么自己想用的小项目，我也不会开发新的开源项目了<br>说实话真得把心放到学习上了，马上高考了，再不学不行了哈哈哈  </p><h3 id="项目方面"><a href="#项目方面" class="headerlink" title="项目方面"></a>项目方面</h3><p><a href="https://github.com/mete0rxsc/DouYin-Gif-Download">抖音表情包下载</a><br><img src="https://img.koxiuqiu.cc/imgse/23/20250501/dd28401ee5125e9f5d0d9a35dececab9.webp" alt="1"><br>这个项目其实是我朋友问我怎么批量下载抖音表情包的时候，我突然灵感乍现的一个项目<br>刚起步的时候我的思路其实是一个文件，在抓包的同时直接下载了，但是发现不行，要让抓包程序一直循环，就不能做到及时的下载<br>所以到后面就直接分成两个程序了，抓到的链接存在json文件里，在抓包完成后再运行下载程序  </p><p><a href="https://github.com/mete0rxsc/NetEase-Cloud-VIP-Song-Analysis">网易云VIP歌曲解析</a><br><img src="https://img.koxiuqiu.cc/imgse/23/20250501/2a88d48f3006cc548f58ecd0cf59da47.webp" alt="2"><br>这个其实是为了满足我网易云快捷下载歌用的，VIP正常下载的歌曲是ncm的私有格式（虽然我有NCM转FLAC的工具）<br>所以我写了一个解析程序，将歌曲解析，方便我下载  </p><h3 id="其他方面"><a href="#其他方面" class="headerlink" title="其他方面"></a>其他方面</h3><p>买了一个新域名xscnet.cn 等待备案完成之后，把所有项目迁移到那个域名上，当然这个域名也是同步使用的，只不过会对这个域名做301到xscnet.cn的域名上  </p><p>也算是水了一篇月总结吧，毕竟这个月没什么特比的事情，但是还是想写一下  </p><p>:::</p><p>::: en</p><h2 id="April-Summary"><a href="#April-Summary" class="headerlink" title="April Summary"></a>April Summary</h2><h3 id="Website-Updates"><a href="#Website-Updates" class="headerlink" title="Website Updates"></a>Website Updates</h3><p>Recently changed the dark mode background image as the previous one wasn’t particularly aesthetic<br><img src="https://image.koxiuqiu.cc/storage/thumbnails/23/20250501/aa7ecc677106cd13fce188297365ee25.png" alt="1">  </p><p>Built my own Lsky Pro image hosting service for easier image uploads and management<br>The image host is now mainly used by both myself and friends. My personal server’s speed is inevitably slow, and it’s primarily integrated with Twikoo comments for image uploads<br>I won’t make my image host public since the server performance is quite limited with small storage—basically just enough for my personal use  </p><p>As for my avatar, I got tired of the old one and changed my Gravatar, which automatically updated across most platforms  </p><h3 id="Life-Updates"><a href="#Life-Updates" class="headerlink" title="Life Updates"></a>Life Updates</h3><p>This month was quite uneventful without many ups and downs—just daily school classes, followed by tweaking my blog and coding after returning home<br>At the beginning of the month, I took a monthly exam and didn’t perform particularly well. There’s definitely room for improvement since I haven’t been focusing much on studying lately<br>But it suddenly hit me that midterms are coming in mid-May (already? High school feels so much faster than middle school—it’s almost like I’ll be a senior in no time, OMG!)<br>I’ll probably reduce my update frequency from now on. Unless I have small projects I want to work on, I won’t be developing new open-source projects<br>Honestly, I really need to focus on studying. The college entrance exam is approaching, and if I don’t buckle down now, it’ll be too late, haha  </p><h3 id="Project-Updates"><a href="#Project-Updates" class="headerlink" title="Project Updates"></a>Project Updates</h3><p><a href="https://github.com/mete0rxsc/DouYin-Gif-Download">Douyin GIF Downloader</a><br><img src="https://img.koxiuqiu.cc/imgse/23/20250501/dd28401ee5125e9f5d0d9a35dececab9.webp" alt="1"><br>This project was inspired when a friend asked me how to batch-download Douyin (TikTok) GIFs<br>Initially, my approach was to capture and download the files simultaneously in a single script, but that didn’t work—keeping the packet capture running in a loop made immediate downloads impossible<br>So I eventually split it into two programs: the captured links are stored in a JSON file, and the downloader runs separately after the capture completes  </p><p><a href="https://github.com/mete0rxsc/NetEase-Cloud-VIP-Song-Analysis">NetEase Cloud VIP Song Parser</a><br><img src="https://img.koxiuqiu.cc/imgse/23/20250501/2a88d48f3006cc548f58ecd0cf59da47.webp" alt="2"><br>This was mainly for my convenience in quickly downloading NetEase Cloud Music songs. VIP songs normally download in NCM format (though I have an NCM-to-FLAC converter)<br>So I wrote this parser to extract the songs for easier downloads  </p><h3 id="Other-Updates"><a href="#Other-Updates" class="headerlink" title="Other Updates"></a>Other Updates</h3><p>Purchased a new domain, xscnet.cn. After completing the ICP filing, I’ll migrate all projects to that domain. Of course, the current domain will remain in use but will redirect (301) to xscnet.cn  </p><p>This summary might feel a bit like filler since nothing particularly noteworthy happened this month, but I still wanted to write something  </p><p>::: warning</p><p>This content is translated from Chinese by a machine and may contain unrealistic information</p><p>:::</p><p>::: </p>]]>
    </content>
    <id>https://www.xscnet.cn/posts/p1920250501/</id>
    <link href="https://www.xscnet.cn/posts/p1920250501/"/>
    <published>2025-05-01T11:00:00.000Z</published>
    <summary>更新博客、学习调整、做了两个小工具、准备换新域名。</summary>
    <title>2025四月小结</title>
    <updated>2025-05-01T11:00:00.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>Mete0r</name>
    </author>
    <category term="教程" scheme="https://www.xscnet.cn/categories/%E6%95%99%E7%A8%8B/"/>
    <category term="教程" scheme="https://www.xscnet.cn/tags/%E6%95%99%E7%A8%8B/"/>
    <content>
      <![CDATA[<h4 id="GitHub仓库地址-https-github-com-mete0rxsc-DouYin-Gif-Download"><a href="#GitHub仓库地址-https-github-com-mete0rxsc-DouYin-Gif-Download" class="headerlink" title="GitHub仓库地址:https://github.com/mete0rxsc/DouYin-Gif-Download"></a><a href="https://github.com/mete0rxsc/DouYin-Gif-Download">GitHub仓库地址:https://github.com/mete0rxsc/DouYin-Gif-Download</a></h4><h2 id="抖音表情包下载v1-0-By-Mete0r"><a href="#抖音表情包下载v1-0-By-Mete0r" class="headerlink" title="抖音表情包下载v1.0 By.Mete0r"></a>抖音表情包下载v1.0 By.Mete0r</h2><p>::: warning</p><blockquote><p>请注重版权意识，此软件仅作为学习使用<br>此软件是为了方便各位下载抖音表情包较为方便所设计  </p></blockquote><p>::: </p><h2 id="软件特点"><a href="#软件特点" class="headerlink" title="软件特点"></a>软件特点</h2><ol><li>支持批量下载  </li><li>自动抓包，解放双手  </li><li>支持下载.jpg .jpeg .webp .png .gif格式的表情包  </li><li>自动识别抓包项目是否为图片文件</li></ol><h3 id="如何使用？"><a href="#如何使用？" class="headerlink" title="如何使用？"></a>如何使用？</h3><ol><li><p>来到GitHub仓库的Releases页面 </p></li><li><p>点击下载最新版exe自解压压缩包<br><img src="https://img.xscnas.top//i/2025/05/01/68134a9ad90c7.png" alt="1">  </p></li><li><p>双击exe文件，选择解压路径  </p></li><li><p>解压后打开路径，看到如下图所示的文件<br><img src="https://img.xscnas.top//i/2025/05/01/68134a9b7eddf.png" alt="2">  </p></li><li><p>打开浏览器，进入<a href="https://www.douyin.com/">抖音官网</a>，并登录你的账号 </p></li><li><p>登录成功后，暂停视频播放，点击右上角的私信，随便打开一个人的聊天框，但<strong>先不要打开表情包选择页面，保持聊天页面</strong><br><img src="https://img.xscnas.top//i/2025/05/01/68134a9b4f230.png" alt="3">  </p></li><li><p>回到文件夹加载mitm的证书，双击<strong>mitmproxy-ca-cert.p12</strong>,选择本地计算机，下一步<br><img src="https://img.xscnas.top//i/2025/05/01/68134a9b7b97c.png" alt="8">  </p></li><li><p>导入文件步骤直接下一步  </p></li><li><p>密码留空，下一步  </p></li><li><p>选择<em>将所有证书都放入下列存储</em>，点击浏览，选择<em>受信任的根证书颁发机构</em>,下一步，完成证书安装<br><img src="https://img.xscnas.top//i/2025/05/01/68134a9b7a5b5.png" alt="9">  </p></li><li><p>双击<strong>运行抓包程序.cmd</strong> 运行抓包程序<br><img src="https://img.xscnas.top//i/2025/05/01/68134a9b6f4c1.png" alt="4"><br>抓包程序会自动为你配置系统代理为127.0.0.1:8080<br>如果抓包程序没有自动配置系统代理，请手动配置系统代理为127.0.0.1:8080  </p></li><li><p>现在打开表情包页面，选择你收藏的表情，并等待所有表情包加载完（此过程有可能会非常缓慢，因为需要经过抓包程序过包）  </p></li><li><p>当你发现所有表情包都正常加载后，Ctrl+C停止抓包程序<strong>注意！必须使用Ctrl+C停止抓包程序，否则程序不会为你还原系统代理</strong><br><img src="https://img.xscnas.top//i/2025/05/01/68134a9b49b27.png" alt="5">  </p></li><li><p>查看<em>link.json</em>文件，随即打开一个链接，查看是否为你要的表情包（应该不会出错的）<br><img src="https://img.xscnas.top//i/2025/05/01/68134a9b9ba7e.png" alt="6">  </p></li><li><p>关掉<em>link.json</em>文件  </p></li><li><p>运行<strong>运行下载程序.cmd</strong> 运行下载程序  </p></li><li><p>运行程序会自动将所有表情包下载到当前目录下的<em>save</em>文件夹中<br>等待程序下载完成，程序会自动退出</p></li></ol><h2 id="常见错误"><a href="#常见错误" class="headerlink" title="常见错误"></a>常见错误</h2><p>Q: 为什么我运行后在跑代码没有抓包？显示Client TLS handshake failed. The client does not trust the proxy’s certificate for <a href="http://www.kookapp.cn/">www.kookapp.cn</a> (OpenSSL Error([(‘SSL routines’, ‘’, ‘ssl&#x2F;tls alert certificate unknown’)]))<br>A: 请查看你是否安装了<em>mitmproxy-ca-cert.p12</em>证书，如果没有，请安装证书  </p><p>Q:我提前打开了表情包的页面怎么办？<br>A：换浏览器或者无痕模式再来一遍  </p><p>Q:有教程视频吗？<br>A：暂时没有，因为抖音聊天涉及我自己的隐私信息，暂不提供教程视频  </p><p>Q：我双击运行CMD为什么没反应或者报错？<br>A：你电脑没有python环境，请自行安装文件夹中的<strong>python-3.12.5-amd64.exe</strong>，记得在安装勾选添加到PATH环境变量选项  </p><p>Q：运行的时候报错？<br>A：你没安装运行库，打开一个DOS窗口，输入pip install -r requirements.txt 安装运行库  </p><h2 id="还有问题联系我"><a href="#还有问题联系我" class="headerlink" title="还有问题联系我?"></a>还有问题联系我?</h2><p>我的博客: <a href="https://www.xscnas.top/">https://www.xscnas.top/</a><br>我的邮箱: <a href="mailto:&#x4d;&#101;&#116;&#101;&#48;&#114;&#x5f;&#120;&#115;&#99;&#64;&#x68;&#x6f;&#116;&#109;&#x61;&#105;&#x6c;&#46;&#99;&#x6f;&#x6d;">Mete0r_xsc@hotmail.com</a>  </p>]]>
    </content>
    <id>https://www.xscnet.cn/posts/P2020250501/</id>
    <link href="https://www.xscnet.cn/posts/P2020250501/"/>
    <published>2025-05-01T00:00:00.000Z</published>
    <summary>一款基于 Python 的自动化抓包下载工具，用于批量获取抖音私信表情包（支持 .jpg、.jpeg、.webp、.png、.gif 格式）。自动抓包 批量下载 格式兼容. 总结：工具通过自动化抓包简化了抖音表情包的获取流程，适合技术研究，但需注意合法使用</summary>
    <title>下载抖音表情包</title>
    <updated>2025-05-01T00:00:00.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>Mete0r</name>
    </author>
    <category term="教程" scheme="https://www.xscnet.cn/categories/%E6%95%99%E7%A8%8B/"/>
    <category term="教程" scheme="https://www.xscnet.cn/tags/%E6%95%99%E7%A8%8B/"/>
    <category term="GitHub" scheme="https://www.xscnet.cn/tags/GitHub/"/>
    <content>
      <![CDATA[<h2 id="网易云VIP歌曲解析v1-0-By-Mete0r"><a href="#网易云VIP歌曲解析v1-0-By-Mete0r" class="headerlink" title="网易云VIP歌曲解析v1.0 By.Mete0r"></a>网易云VIP歌曲解析v1.0 By.Mete0r</h2><h4 id="GitHub仓库地址-https-github-com-mete0rxsc-NetEase-Cloud-VIP-Song-Analysis"><a href="#GitHub仓库地址-https-github-com-mete0rxsc-NetEase-Cloud-VIP-Song-Analysis" class="headerlink" title="GitHub仓库地址:https://github.com/mete0rxsc/NetEase-Cloud-VIP-Song-Analysis"></a><a href="https://github.com/mete0rxsc/NetEase-Cloud-VIP-Song-Analysis">GitHub仓库地址:https://github.com/mete0rxsc/NetEase-Cloud-VIP-Song-Analysis</a></h4><p>::: warning </p><blockquote><p>请注重版权意识，此软件仅作为学习使用<br>此软件是为了方便各位下载音乐较为方便所设计<br>请自觉购买音乐版权！  </p></blockquote><p>:::  </p><p><img src="https://img.koxiuqiu.cc/imgse/23/20250427/15a7c8aaa1d5553eade694355529cde0.webp" alt="1">  </p><h2 id="软件特点"><a href="#软件特点" class="headerlink" title="软件特点"></a>软件特点</h2><ol><li>首次打开会选择系统默认的下载文件夹  </li><li>可以手动选择下载路径，选择后软件会自动写入注册表下，后续再打开软件会自动从注册表中读取路径  </li><li>使用公共免费API接口，高度自定义性！  </li><li>100%开源，欢迎star和fork  </li><li>界面简单，功能单一，无多余功能</li></ol><h2 id="使用方法"><a href="#使用方法" class="headerlink" title="使用方法"></a>使用方法</h2><ol><li>clone此仓库  </li><li>打开<strong>网易云VIP歌曲解析v1.0 By.Mete0r.py</strong>文件，并去  <a href="https://api.nsmao.net/">https://api.nsmao.net/</a>  获取你的APIKey  </li><li>将你的APIKey填入第15行的API_KEY &#x3D; “”中<br>示例代码:</li></ol><pre><code class="language-python"># API配置  API_URL = &quot;https://api.nsmao.net/api/wy/query&quot;  API_KEY = &quot;123123123123&quot;  # 在  https://api.nsmao.net/  获取你的APIKey  LEVEL = &quot;jymaster&quot;  </code></pre><ol start="4"><li>安装运行库文件,使用命令<strong>pip install -r requirements.txt</strong>  </li><li>运行app.py文件，<strong>python 网易云VIP歌曲解析v1.0 By.Mete0r.py</strong>  </li><li>输入一首歌曲的分享链接，点击解析看是否可以正常解析  </li><li>如果可以正常解析，则说明成功，准备封装为exe  </li><li>使用pyinstaller将app.py文件打包为exe文件，使用命令<strong>pyinstaller –onefile –windowed –icon&#x3D;icon.ico –add-data “icon.ico;.” 网易云VIP歌曲解析v1.0 By.Mete0r.py</strong></li></ol><p>等待打包完成，在dist文件夹下找到网易云VIP歌曲解析v1.0 By.Mete0r.exe文件，双击运行即可  </p><p>有任何问题，欢迎提issue，或者在我的个人博客中联系我：<a href="https://www.xscnas.top/">https://www.xscnas.top/</a>  </p>]]>
    </content>
    <id>https://www.xscnet.cn/posts/p1820250427/</id>
    <link href="https://www.xscnet.cn/posts/p1820250427/"/>
    <published>2025-04-27T13:36:36.000Z</published>
    <summary>网易云VIP歌曲解析，GitHub仓库地址:https://github.com/mete0rxsc/NetEase-Cloud-VIP-Song-Analysis，请注重版权意识，此软件仅作为学习使用</summary>
    <title>网易云VIP歌曲解析</title>
    <updated>2025-04-27T13:36:36.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>Mete0r</name>
    </author>
    <category term="分享" scheme="https://www.xscnet.cn/categories/%E5%88%86%E4%BA%AB/"/>
    <category term="分享" scheme="https://www.xscnet.cn/tags/%E5%88%86%E4%BA%AB/"/>
    <category term="开源" scheme="https://www.xscnet.cn/tags/%E5%BC%80%E6%BA%90/"/>
    <content>
      <![CDATA[<blockquote><h3 id="免责声明：这些软件基本上都来自互联网"><a href="#免责声明：这些软件基本上都来自互联网" class="headerlink" title="免责声明：这些软件基本上都来自互联网"></a>免责声明：这些软件基本上都来自互联网</h3><h3 id="Bilibili-UP主：玄离199视频分享软件整合"><a href="#Bilibili-UP主：玄离199视频分享软件整合" class="headerlink" title="Bilibili UP主：玄离199视频分享软件整合"></a><a href="https://space.bilibili.com/67079745">Bilibili UP主：玄离199</a>视频分享软件整合</h3><h3 id="UP主官方分享地址：https-github-com-xuanli199-weekly"><a href="#UP主官方分享地址：https-github-com-xuanli199-weekly" class="headerlink" title="UP主官方分享地址：https://github.com/xuanli199/weekly"></a>UP主官方分享地址：<a href="https://github.com/xuanli199/weekly">https://github.com/xuanli199/weekly</a></h3><p>::: warning  </p></blockquote><p>请自行关注UP主，并从UP主官方渠道获取链接<br>我博客中的仅为我自用内容<br>如有需要请为UP主三连加关注！！！<br>请尊重原UP主的劳动成果！！！<br><a href="https://space.bilibili.com/67079745">Bilibili UP主：玄离199</a><br><a href="https://space.bilibili.com/67079745">Bilibili UP主：玄离199</a><br><a href="https://space.bilibili.com/67079745">Bilibili UP主：玄离199</a><br>重要的事情说三遍  </p><p>:::</p><p>下面为我筛选出的实用软件合集！！<br>再次声明请尊重原UP主劳动成果！！  </p><p>Windows Cleaner（专治C盘爆红）<br><a href="https://github.com/darkmatter2048/WindowsCleaner">https://github.com/darkmatter2048/WindowsCleaner</a>  </p><p>video-subtitle-remover（去除字幕、水印）<br><a href="https://github.com/YaoFANGUK/video-subtitle-remover">https://github.com/YaoFANGUK/video-subtitle-remover</a>  </p><p>rename-photos（图片重命名）<br><a href="https://github.com/Arman19941113/rename-photos">https://github.com/Arman19941113/rename-photos</a>  </p><p>system-prompts-and-models-of-ai-tools（AI提示词）<br><a href="https://github.com/x1xhlol/system-prompts-and-models-of-ai-tools">https://github.com/x1xhlol/system-prompts-and-models-of-ai-tools</a>  </p><p>IndexTTS<br><a href="https://github.com/index-tts/index-tts">https://github.com/index-tts/index-tts</a>  </p><p>MegaTTS3<br><a href="https://github.com/bytedance/MegaTTS3">https://github.com/bytedance/MegaTTS3</a>  </p><p>Cursor VIP<br><a href="https://github.com/yeongpin/cursor-free-vip">https://github.com/yeongpin/cursor-free-vip</a>  </p><p>QuickLook快速预览<br><a href="https://github.com/QL-Win/QuickLook">https://github.com/QL-Win/QuickLook</a>  </p><p>CloudSaver<br><a href="https://github.com/jiangrui1994/CloudSaver">https://github.com/jiangrui1994/CloudSaver</a>  </p><p>AlexNet-Source-Code<br><a href="https://github.com/computerhistory/AlexNet-Source-Code">https://github.com/computerhistory/AlexNet-Source-Code</a>  </p><p>Check酱<br><a href="https://github.com/easychen/checkchan-dist">https://github.com/easychen/checkchan-dist</a>  </p>]]>
    </content>
    <id>https://www.xscnet.cn/posts/p1720250426Links/</id>
    <link href="https://www.xscnet.cn/posts/p1720250426Links/"/>
    <published>2025-04-25T16:00:00.000Z</published>
    <summary>总结了我感觉玄离199视频中提到的好用的开源项目</summary>
    <title>好用的开源项目</title>
    <updated>2025-04-25T16:00:00.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>Mete0r</name>
    </author>
    <category term="科幻" scheme="https://www.xscnet.cn/categories/%E7%A7%91%E5%B9%BB/"/>
    <category term="科幻" scheme="https://www.xscnet.cn/tags/%E7%A7%91%E5%B9%BB/"/>
    <category term="读后感" scheme="https://www.xscnet.cn/tags/%E8%AF%BB%E5%90%8E%E6%84%9F/"/>
    <content>
      <![CDATA[<p>::: zh-CN</p><blockquote><h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2></blockquote><p>写这篇文章是因为我基本上把刘慈欣已经装订成书本的长&#x2F;短篇小说都看了一遍，就想着发表一下自己的看法<br>Tips:有部分赏析来自互联网（我文笔太差了，见谅）  </p><blockquote><h2 id="1-短篇小说"><a href="#1-短篇小说" class="headerlink" title="1. 短篇小说"></a>1. 短篇小说</h2><h3 id="1-1-时间移民"><a href="#1-1-时间移民" class="headerlink" title="1.1. 时间移民"></a>1.1. 时间移民</h3></blockquote><p>内容提要：未来的某个时期，由于地球资源无法承载庞大的人口，人类决定将8000万人进行冷藏保存，使其“运送”至120年后以减缓当代资源压力。移民大使分别于四个年代被唤醒了四次。<br>先后停留于经历过多次核战的“黑色时代”、科技发展超前至断层式发展的“平台时代”、人类意识逐渐统一成虚拟整体的“无形时代”和人类文明消亡之后地球开始重启的新时代。<br>大使考察了前三个时代的生存环境和人文科技特征，由于客观条件恶劣或者被未来世界拒绝，他选择了继续“穿越”，最终带领人类到达了最终的重启新生时代。<br>故事站在移民大使的角度，在不同时代的停驻中进行观察并引发哲学思考，犹豫和选择之间推进着故事线。<br>其间对于不同时代的哲学思考暗示了人类文明的发展进程。</p><p>大刘的书很多都有连贯性，比如时间移民的频繁冬眠，冬眠技术在大刘的书中出场率是真的高捏<del>(￣▽￣)</del>*<br>但是有一点，这些人来自以前的时代，却经历了一万两千年的迁移，这虽然在最后看来是延续了人类的文明，但是在先遣队苏醒的过程中，他们带上了“未来科技–记忆芯片”<br>虽然书中到最后也没提及记忆芯片，但如果这些“人”真的用了这个芯片，他们还是“人”吗？<br>冲破了时空，留与一万两千年后的自然，已经没有人类任何生存痕迹的纯自然中，人还是“人”吗？<br>没有任何生产资料，却又有所有生产资料，跨过了断层的发展  </p><blockquote><h3 id="1-2-带上她的眼睛"><a href="#1-2-带上她的眼睛" class="headerlink" title="1.2. 带上她的眼睛"></a>1.2. 带上她的眼睛</h3></blockquote><p>这篇小说中，用到了一个人类科学证实但无法实现的技术–中微子通信<br>内容提要：讲述了“我”去旅行的时候带上了“她”的眼睛，而“她”是失事的“落日六号”地层飞船上的领航员，被永远困在地心里。  </p><p>这篇小说给我的感觉就是大刘的写作推翻了原本的第三人称的写作手法，转而代之的是以第一人称“我”的视角去描绘整个故事<br>但是大刘的文本核心没变，依旧是在科学范围内以极致的科幻来关注人类的命运  </p><p>《带上她的眼睛》改编后被收入部编版语文教材七年级上册第六单元第23课，并获得1999年年度中国科幻小说银河奖。<br>对于这种科幻程度来说，很难想象刘慈欣是在两千年附近做出的这本书<br>这种程度的科幻，放在当今社会也可以引起人们许多思考  </p><blockquote><h3 id="1-3-地球大炮"><a href="#1-3-地球大炮" class="headerlink" title="1.3. 地球大炮"></a>1.3. 地球大炮</h3></blockquote><p>这篇短篇小说给我的印象比较深刻，因为他与 《带上她的眼睛》 梦幻联动，具体后面再说<br>故事围绕主人公 <strong>沈渊</strong> 展开<br>在急剧恶化的自然环境面前，人类的理智最终占据了上风，各大国纷纷销毁核武器，但是在销毁核武器的过程中，科学家们趁机启动了一项实验<br>在超高压下，造出了一种新的物质形态–新固态  </p><p>正是这种物质，造就了一条贯穿地心的通道，在“南极庭院：工程开始前，就提到了《带上她的眼睛》中被困在地心的领航员–沈静（沈渊的女儿）<br>在这里，我们终于知道了落日六号的目的，同时也知道了被困在地心的人是谁，这何尝不是一次梦幻联动呢？  </p><p>故事从新固态来到地球隧道，最后成为地球大炮，它的技术铺垫非常的巧妙。<br>在沈华北身上，体现出了一种史诗般的人物魅力。我们似乎看到了一个忧国忧民的斗士，一个沉迷于技术的暴徒，一个行尸走肉般蜉蝣世界的蛀虫，一个挽救地球文明的预言师，他身上的种种矛盾，让人不能爱，不能恨，不能忘记。<br>对于沈华北来讲，他的人生充满了不幸，可以说，他不是一个幸福的人。似乎他的存在就是为了能够建设地球隧道，即后来的地球大炮。这是他个人的悲剧，他间接造成了儿子的死亡和孙女的终身囚禁地心。  </p><blockquote><h2 id="2-长篇小说"><a href="#2-长篇小说" class="headerlink" title="2. 长篇小说"></a>2. 长篇小说</h2><h3 id="2-1-三体"><a href="#2-1-三体" class="headerlink" title="2.1 三体"></a>2.1 三体</h3></blockquote><p>三体在中国乃至全世界的不可撼动地位，不必多说<br>这本巨著主要讲述了地球人和三体人互相进行文明交流，以及生死较量，最后两个文明相继走向灭亡的故事  </p><p>这部书你可能没读过，但是你一定听过关于它的梗，如：  </p><ul><li>宇宙级免责声明：指在三体中提到，将太阳系的光速限制在第二宇宙速度内，以向宇宙其他文明表明我们没攻击性  </li><li>黑暗森林法则：在宇宙中，如同一片黑暗森林，猎人们总是小心翼翼，如果你一不小心点燃了“篝火”，就会变猎物</li><li>降维打击：歌者文明向太阳系投掷二向箔，使空间向二维化坍缩，最终实现消灭一个文明的目的</li></ul><blockquote><h3 id="2-2球状闪电"><a href="#2-2球状闪电" class="headerlink" title="2.2球状闪电"></a>2.2球状闪电</h3></blockquote><p>还没读完嘻嘻，读完再写</p><p>:::</p><p>::: en</p><blockquote><h2 id="Preface"><a href="#Preface" class="headerlink" title="Preface"></a>Preface</h2></blockquote><p>I wrote this article because I’ve read almost all of Liu Cixin’s published long and short stories and wanted to share my thoughts.<br><em>Tips: Some of the analysis comes from the internet (my writing isn’t great, sorry about that).</em>  </p><blockquote><h2 id="1-Short-Stories"><a href="#1-Short-Stories" class="headerlink" title="1. Short Stories"></a>1. Short Stories</h2><h3 id="1-1-The-Time-Migration"><a href="#1-1-The-Time-Migration" class="headerlink" title="1.1. The Time Migration"></a>1.1. <em>The Time Migration</em></h3></blockquote><p><strong>Synopsis:</strong> In the future, due to Earth’s dwindling resources being unable to support its massive population, humanity decides to cryogenically preserve 80 million people and “transport” them 120 years into the future to alleviate resource pressures. The migration ambassador is awakened four times across different eras.<br>The stops include the “Black Era” ravaged by nuclear war, the “Platform Era” with its staggering technological advancements, the “Formless Era” where human consciousness merges into a unified virtual entity, and finally, a new era where human civilization has perished and Earth begins anew.<br>The ambassador examines the living conditions and technological features of the first three eras but, due to harsh environments or rejection by the future societies, chooses to continue the journey, eventually leading humanity to the reborn world.<br>The story unfolds from the ambassador’s perspective, observing each era and sparking philosophical reflections, with the plot advancing through his hesitations and choices.<br>The philosophical musings on each era hint at the progression of human civilization.  </p><p>Many of Liu Cixin’s works are interconnected. For example, the frequent use of hibernation in <em>The Time Migration</em>—hibernation tech appears in so many of his stories<del>(￣▽￣)</del>*<br>But here’s something to ponder: these people come from an earlier time yet endure a 12,000-year migration. While it ultimately preserves human civilization, during the awakening process, they bring along “future tech—memory chips.”<br>Though the story never explicitly mentions these memory chips, if these “humans” truly use them, are they still “human”?<br>Breaking through time and space, arriving in a pristine natural world untouched by humanity after 12,000 years—with no traces of human existence—does “human” still mean the same?<br>No means of production, yet all means of production, leaping across developmental chasms…  </p><blockquote><h3 id="1-2-Taking-Her-Eyes"><a href="#1-2-Taking-Her-Eyes" class="headerlink" title="1.2. Taking Her Eyes"></a>1.2. <em>Taking Her Eyes</em></h3></blockquote><p>This story employs a scientifically plausible but currently unattainable technology—<strong>neutrino communication</strong>.<br><strong>Synopsis:</strong> It follows “me” on a journey while carrying “her” eyes. “She” is the navigator of the crashed <em>Sunset Six</em> subterranean spacecraft, permanently trapped in the Earth’s core.  </p><p>This story stands out to me because Liu Cixin abandons the traditional third-person narrative in favor of a first-person perspective (“I”) to unfold the tale.<br>Yet, the core of Liu’s writing remains unchanged—using extreme sci-fi grounded in science to reflect on humanity’s fate.  </p><p><em>Taking Her Eyes</em> was adapted and included in the seventh-grade Chinese textbook (Volume 1, Unit 6, Lesson 23) and won the 1999 Galaxy Award for Chinese Science Fiction.<br>For a story of this sci-fi caliber, it’s hard to imagine Liu Cixin wrote it around the year 2000.<br>Even today, this level of sci-fi can provoke deep contemplation.  </p><blockquote><h3 id="1-3-The-Cannon-of-the-Earth"><a href="#1-3-The-Cannon-of-the-Earth" class="headerlink" title="1.3. The Cannon of the Earth"></a>1.3. <em>The Cannon of the Earth</em></h3></blockquote><p>This short story left a strong impression on me because of its <strong>crossover with <em>Taking Her Eyes</em></strong>—more on that later.<br>The story revolves around the protagonist, <strong>Shen Yuan</strong>.<br>Faced with rapidly deteriorating natural conditions, human reason ultimately prevails, and major nations begin dismantling their nuclear arsenals. However, during this process, scientists seize the opportunity to launch an experiment.<br>Under extreme pressure, they create a new state of matter—<strong>Neo-Solid</strong>.  </p><p>This very substance forms a tunnel piercing through the Earth’s core. Before the “Antarctic Courtyard” project begins, there’s a reference to <em>Taking Her Eyes</em>—the navigator trapped in the Earth’s core, Shen Jing (Shen Yuan’s daughter).<br>Here, we finally learn the purpose of <em>Sunset Six</em> and the identity of the person trapped underground. What a brilliant crossover!  </p><p>The story transitions smoothly from Neo-Solid to the Earth Tunnel and eventually the Cannon of the Earth, with its technical groundwork laid out masterfully.<br>In Shen Huabei, we see an epic, almost mythical character. He embodies the contradictions of a patriot, a techno-obsessed radical, a hollowed-out parasite, and a prophet of Earth’s salvation. His contradictions make him impossible to simply love or hate—unforgettable.<br>For Shen Huabei, life has been cruel. He is not a happy man. His existence seems solely for the construction of the Earth Tunnel (later the Cannon of the Earth). This is his personal tragedy—he indirectly causes his son’s death and his granddaughter’s eternal imprisonment in the Earth’s core.  </p><blockquote><h2 id="2-Novels"><a href="#2-Novels" class="headerlink" title="2. Novels"></a>2. Novels</h2><h3 id="2-1-The-Three-Body-Problem"><a href="#2-1-The-Three-Body-Problem" class="headerlink" title="2.1 The Three-Body Problem"></a>2.1 <em>The Three-Body Problem</em></h3></blockquote><p>The unshakable status of <em>The Three-Body Problem</em> in China and globally needs no elaboration.<br>This monumental work tells the story of the interaction and life-and-death struggle between Earthlings and Trisolarans, culminating in the eventual demise of both civilizations.  </p><p>You might not have read it, but you’ve definitely heard its memes, such as:  </p><ul><li><strong>Universal Disclaimer:</strong> In <em>The Three-Body Problem</em>, reducing the solar system’s light speed below the second cosmic velocity signals to other civilizations that we’re non-threatening.  </li><li><strong>Dark Forest Theory:</strong> The universe is like a dark forest—hunters tread carefully. If you recklessly light a “bonfire,” you become prey.  </li><li><strong>Dimensional Strike:</strong> The Singer Civilization hurls a dual-vector foil at the solar system, collapsing space into two dimensions to annihilate a civilization.</li></ul><blockquote><h3 id="2-2-Ball-Lightning"><a href="#2-2-Ball-Lightning" class="headerlink" title="2.2 Ball Lightning"></a>2.2 <em>Ball Lightning</em></h3></blockquote><p>Haven’t finished reading yet, hehe. Will write about it after I’m done.  </p><p>::: warning</p><p>This content is translated from Chinese by a machine and may contain unrealistic information</p><p>:::</p><p>::: </p>]]>
    </content>
    <id>https://www.xscnet.cn/posts/p1620250424/</id>
    <link href="https://www.xscnet.cn/posts/p1620250424/"/>
    <published>2025-04-23T16:00:00.000Z</published>
    <summary>科幻YYDS</summary>
    <title>我爱科幻</title>
    <updated>2025-04-23T16:00:00.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>Mete0r</name>
    </author>
    <category term="日常" scheme="https://www.xscnet.cn/categories/%E6%97%A5%E5%B8%B8/"/>
    <category term="日常" scheme="https://www.xscnet.cn/tags/%E6%97%A5%E5%B8%B8/"/>
    <content>
      <![CDATA[<p>::: zh-CN</p><p><meting-jsserver="netease"type="playlist"id="8710317469"  mode="circulation"><br></meting-js></p><blockquote><h3 id="2025-04-22"><a href="#2025-04-22" class="headerlink" title="2025&#x2F;04&#x2F;22"></a>2025&#x2F;04&#x2F;22</h3><p>今天在修理博客的NoticeBar组件的时候，看着自己的博客，想着自己花了很长时间的部署，才达到现在的效果，很是欣慰<br>但是，看时间长了，又觉得自己的博客不是特别出众的好，总是感觉别人的博客框架都比自己的好得多<br><img src="https://imgse.koxiuqiu.cc/imgse/u/23/2025/04/25/680b8eaa3eac8.webp" alt="博客"><br>但是路是自己走的，部署是自己一点一点亲手做的<br>插件是自己从无到有一点一点写的<br>主题是自己一点一点配置的<br>从无到有<br>从懵懂到可以随心所欲写插件<br>这何尝不是一种进步呢？  </p></blockquote><p>况且，现在我的 <a href="https://www.xscnas.top/posts/p1120250403">使用Valaxy搭建自己的博客</a> 这篇文章依旧有很多博友向我提问，这令我大为震惊<br>因为我认为自己就是一个无名小卒，不会有很多人关注到我的，但是我在B站发的教程视频已经有了一千多的播放！<br>看到这个数据我感到很高兴，因为我的努力并没有白费！<br>我还会更加努力的！  </p><blockquote><h2 id="网站方面"><a href="#网站方面" class="headerlink" title="网站方面"></a>网站方面</h2></blockquote><blockquote><h3 id="NoticeBar组件的修复"><a href="#NoticeBar组件的修复" class="headerlink" title="NoticeBar组件的修复"></a>NoticeBar组件的修复</h3><p>现在已经是2025&#x2F;03&#x2F;23的凌晨了，刚刚修复好NoticeBar的组件，因为IP检测API挂掉了！（我真没想到我选的这个API挂的这么快）<br>可能算下来也就一个多月，他就没了 ToT<br>所以我精挑细选，把API换成了 <a href="https://api.nsmao.net/">https://api.nsmao.net/</a> 这个API，虽然也是免费的API接口，但是我觉得这个有ICP备案总归会活得长久一些<br>另外！感谢所有提供免费API接口的站点<br>在2025年可以提供一些免费的服务，已经很少有人能做到了……  </p></blockquote><blockquote><h3 id="十年之约"><a href="#十年之约" class="headerlink" title="十年之约"></a><a href="https://www.foreverblog.cn/">十年之约</a></h3><p>正如 <a href="https://www.foreverblog.cn/">十年之约</a> 官网所说<br>“一个人的寂寞，一群人的狂欢。”<br>十年不是终点，而是一个新的起点，加入十年之约，即从加入这个活动起，我们的博客十年不关闭，保持更新和活力！  </p></blockquote><p>今天，也就是2025&#x2F;04&#x2F;22，我加入 <a href="https://www.foreverblog.cn/">十年之约</a> 的审核被<strong>正式通过</strong>啦！<br><img src="https://imgse.koxiuqiu.cc/imgse/u/23/2025/04/23/6807c1a5256ca.png" alt="十年之约"><br>我相信，在今后的博客生涯中，即使没有人再访问我的博客了，我也会继续记录我的生活和学习的！<br>在此！以十年之约为证，感谢大家！  </p><p>:::</p><p>::: en</p><h3 id="2025-04-22-1"><a href="#2025-04-22-1" class="headerlink" title="2025&#x2F;04&#x2F;22"></a>2025&#x2F;04&#x2F;22</h3><p>Today, while fixing the NoticeBar component of my blog, I looked at my blog and felt quite satisfied with the time and effort I’ve spent on deployment to achieve its current state.  </p><p>However, after staring at it for a while, I couldn’t help but feel that my blog isn’t particularly outstanding—it always seems like others’ blog frameworks are much better.  </p><p><img src="https://imgse.koxiuqiu.cc/imgse/u/23/2025/04/23/6807c19ade58b.png" alt="Blog">  </p><p>But the path is my own, the deployment was done step by step with my own hands,<br>the plugins were written from scratch,<br>and the theme was configured bit by bit.<br>From nothing to something,<br>from cluelessness to being able to write plugins freely—<br>isn’t this progress in itself?  </p><p>Moreover, my article <a href="https://www.xscnas.top/posts/p1120250403">“Building Your Own Blog with Valaxy”</a> still receives many questions from fellow bloggers, which truly surprised me.<br>I thought of myself as a nobody, unlikely to attract much attention, but my tutorial video on Bilibili has already surpassed 1,000 views!<br>Seeing this data made me incredibly happy because my efforts haven’t been in vain!<br>I’ll keep striving to do better!  </p><h2 id="Website-Updates"><a href="#Website-Updates" class="headerlink" title="Website Updates"></a>Website Updates</h2><h3 id="Fixing-the-NoticeBar-Component"><a href="#Fixing-the-NoticeBar-Component" class="headerlink" title="Fixing the NoticeBar Component"></a>Fixing the NoticeBar Component</h3><p>It’s already early morning on 2025&#x2F;03&#x2F;23, and I’ve just finished fixing the NoticeBar component because the IP detection API went down! (I never expected the API I chose to fail so quickly.)<br>It barely lasted a little over a month before dying—ToT.<br>So, after careful consideration, I switched to the API from <a href="https://api.nsmao.net/">https://api.nsmao.net/</a>. Though it’s also a free API, the fact that it has an ICP备案 (Chinese internet content provider license) gives me hope that it’ll last longer.<br>Also—a huge thanks to all the sites offering free APIs.<br>In 2025, providing free services is something very few are willing to do…  </p><h3 id="Ten-Year-Pledge"><a href="#Ten-Year-Pledge" class="headerlink" title="Ten-Year Pledge"></a><a href="https://www.foreverblog.cn/">Ten-Year Pledge</a></h3><p>As the official <a href="https://www.foreverblog.cn/">Ten-Year Pledge</a> website states:  </p><blockquote><p>“One person’s loneliness, a crowd’s狂欢 (celebration).”<br>Ten years is not the end but a new beginning. By joining the Ten-Year Pledge, we commit to keeping our blogs alive and updated for ten years from the day we join!  </p></blockquote><p>Today, on 2025&#x2F;04&#x2F;22, my application to join the <a href="https://www.foreverblog.cn/">Ten-Year Pledge</a> was officially approved!<br><img src="https://imgse.koxiuqiu.cc/imgse/u/23/2025/04/23/6807c1a5256ca.png" alt="Ten-Year Pledge"><br>I believe that in my blogging journey ahead, even if no one visits my blog anymore, I’ll continue documenting my life and learning.<br>Here’s to the Ten-Year Pledge as my witness—thank you, everyone!  </p><p>::: warning</p><p>This content is translated from Chinese by a machine and may contain unrealistic information</p><p>:::</p><p>::: </p>]]>
    </content>
    <id>https://www.xscnet.cn/posts/p1520250423/</id>
    <link href="https://www.xscnet.cn/posts/p1520250423/"/>
    <published>2025-04-22T16:00:00.000Z</published>
    <summary>四月中旬的小总结</summary>
    <title>(五)</title>
    <updated>2025-04-22T16:00:00.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>Mete0r</name>
    </author>
    <category term="日常" scheme="https://www.xscnet.cn/categories/%E6%97%A5%E5%B8%B8/"/>
    <category term="日常" scheme="https://www.xscnet.cn/tags/%E6%97%A5%E5%B8%B8/"/>
    <content>
      <![CDATA[<p>::: zh-CN</p><p>许久不见各位<br>报个平安<br>最近安然无恙  </p><h3 id="最近的项目"><a href="#最近的项目" class="headerlink" title="最近的项目"></a>最近的项目</h3><p>最近开发了几个适配这个Yun主题的Vue插件  </p><p><a href="https://github.com/mete0rxsc/valaxy-yun-external-link">点我查看valaxy-yun-external-link的Github仓库</a><br><strong>valaxy-yun-external-link</strong> 是一个用于安全验证的Vue组件，用于验证用户输入的 URL 是否安全。它支持Valaxy原生主题Yun主题<br><a href="https://github.com/mete0rxsc/valaxy-yun-NoticeBar">点我查看valaxy-yun-NoticeBar的Github仓库</a><br><strong>valaxy-yun-NoticeBar</strong> 是一个用于在首页提供公告栏的Vue组件，它支持Valaxy原生主题Yun主题<br>当然这些项目我都上传到了Github以便更多人获取使用（虽然这个博客框架很小众）  </p><h3 id="最近发现的小软件"><a href="#最近发现的小软件" class="headerlink" title="最近发现的小软件"></a>最近发现的小软件</h3><p><a href="https://github.com/QL-Win/QuickLook">点我查看QuickLook的Github仓库</a><br>QuickLook是一个Windows下的快速预览软件，他其实是MacOS上原生的一个功能，不用打开文件就可以预览  </p><h4 id="微信4-0-版本"><a href="#微信4-0-版本" class="headerlink" title="微信4.0 版本!"></a>微信4.0 版本!</h4><p>让人期待的微信4.0终于上线官网了，于是很快啊！<br>我就下载了一个尝试了一下<br>有点意想不到的不错捏，全局支持黑色模式，而且电脑端可以看朋友圈和发朋友圈了  </p><h3 id="博客方面"><a href="#博客方面" class="headerlink" title="博客方面"></a>博客方面</h3><ol><li>添加了一个Github Pages的镜像站 访问链接<a href="https://github.xscnas.top/">https://github.xscnas.top/</a></li><li>添加了<strong>valaxy-yun-external-link</strong>也就是我自己开发的ValaxyYun主题Vue链接检测插件，现在一部分链接是在白名单中，当然友链页面的链接基本都在白名单  </li><li>大部分文章（除了诗之外）我都加了i18n的英语翻译（虽然不知道有没有外国人能看到）  </li><li>添加了QiuDunCDN的链接，在页脚  <blockquote><p><a href="https://www.scdn.koxiuqiu.cc/">- 𝙌𝙞𝙪𝙙𝙪𝙣 𝘾𝘿𝙉 - 纯公益内容分发网络加速</a><br>Qiudun CDN也是我博客一直使用的CDN，真的很好用！</p></blockquote></li></ol><h3 id="尾声"><a href="#尾声" class="headerlink" title="尾声"></a>尾声</h3><p>其实没有太多想说的<br>一转眼四月过去一半了，我很多的朋友都在这个月过生日，过的是真的快(～￣▽￣)～<br>四月初经历了一场月考，还是考到一坨，总之还是多多学习，多多努力吧，总能考上自己心仪的大学的！  </p><p>2025-04-15<br>Mete0r  </p><p>:::</p><p>::: en</p><p>Long Time No See, Everyone<br>Just Checking In<br>I’ve Been Doing Well Lately  </p><h3 id="Recent-Projects"><a href="#Recent-Projects" class="headerlink" title="Recent Projects"></a>Recent Projects</h3><p>Recently, I developed several Vue plugins compatible with the Yun theme.  </p><p><a href="https://github.com/mete0rxsc/valaxy-yun-external-link">valaxy-yun-external-link (GitHub)</a><br><strong>valaxy-yun-external-link</strong> is a security validation Vue component that verifies whether user-input URLs are safe. It supports Valaxy’s native Yun theme.  </p><p><a href="https://github.com/mete0rxsc/valaxy-yun-NoticeBar">valaxy-yun-NoticeBar (GitHub)</a><br><strong>valaxy-yun-NoticeBar</strong> is a Vue component that provides a notice bar on the homepage, also supporting Valaxy’s native Yun theme.  </p><p>I’ve published these projects on GitHub to make them available to more users (though this blog framework remains quite niche).  </p><h3 id="Recent-Software-Discoveries"><a href="#Recent-Software-Discoveries" class="headerlink" title="Recent Software Discoveries"></a>Recent Software Discoveries</h3><p><a href="https://github.com/QL-Win/QuickLook">QuickLook (GitHub)</a><br>QuickLook is a Windows utility that enables quick file previews - essentially bringing macOS’s native Quick Look feature to Windows.  </p><h4 id="WeChat-4-0-Release"><a href="#WeChat-4-0-Release" class="headerlink" title="WeChat 4.0 Release!"></a>WeChat 4.0 Release!</h4><p>The much-anticipated WeChat 4.0 has finally launched. I immediately:<br>Downloaded it to test it out.<br>Surprisingly impressive! It features system-wide dark mode and now allows browsing and posting to Moments on desktop.  </p><h3 id="Blog-Updates"><a href="#Blog-Updates" class="headerlink" title="Blog Updates"></a>Blog Updates</h3><ol><li>Added a GitHub Pages mirror site: <a href="https://github.xscnas.top/">https://github.xscnas.top/</a>  </li><li>Implemented my <strong>valaxy-yun-external-link</strong> plugin for URL validation, with whitelisting functionality (all friend link page URLs are whitelisted)  </li><li>Added English translations (via i18n) to most articles (excluding poetry) - though I wonder if any international readers will see them  </li><li>Added QiuDunCDN to the footer:  <blockquote><p><a href="https://www.scdn.koxiuqiu.cc/">- 𝙌𝙞𝙪𝙙𝙪𝙣 𝘾𝘿𝙉 - Non-Profit Content Delivery Network</a><br>I’ve been using Qiudun CDN for my blog - it’s genuinely excellent!</p></blockquote></li></ol><h3 id="Closing-Thoughts"><a href="#Closing-Thoughts" class="headerlink" title="Closing Thoughts"></a>Closing Thoughts</h3><p>Not much else to share.<br>April is already half over - time flies when so many friends have birthdays this month (～￣▽￣)～<br>Took monthly exams earlier this month with mediocre results. Must study harder - I’ll get into my dream university eventually!  </p><p>UTC+8 2025-04-15<br>Mete0r  </p><p>::: warning</p><p>This content is translated from Chinese by a machine and may contain unrealistic information</p><p>:::</p><p>::: </p>]]>
    </content>
    <id>https://www.xscnet.cn/posts/p1420250415/</id>
    <link href="https://www.xscnet.cn/posts/p1420250415/"/>
    <published>2025-04-14T16:00:00.000Z</published>
    <summary>
      <![CDATA[<p>::: zh-CN</p>
<p>许久不见各位<br>报个平安<br>最近安然无恙  </p>
<h3 id="最近的项目"><a href="#最近的项目" class="headerlink" title="最近的项目"></a>最近的项目</h3><p>最近开发了几个]]>
    </summary>
    <title>(四)</title>
    <updated>2025-04-14T16:00:00.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>Mete0r</name>
    </author>
    <category term="教程" scheme="https://www.xscnet.cn/categories/%E6%95%99%E7%A8%8B/"/>
    <category term="教程" scheme="https://www.xscnet.cn/tags/%E6%95%99%E7%A8%8B/"/>
    <content>
      <![CDATA[<p>::: zh-CN</p><h2 id="视频教程"><a href="#视频教程" class="headerlink" title="视频教程"></a>视频教程</h2><iframe src="//player.bilibili.com/player.html?114336626379312&bvid=BV1a2o7Y9E2V&cid=29414262604&p=1&high_quality=1&danmaku=1&autoplay=0" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true" sandbox="allow-top-navigation allow-same-origin allow-forms allow-scripts" width="100%" height="600"></iframe><blockquote><h3 id="项目地址-https-github-com-mete0rxsc-valaxy-yun-external-link"><a href="#项目地址-https-github-com-mete0rxsc-valaxy-yun-external-link" class="headerlink" title="项目地址:https://github.com/mete0rxsc/valaxy-yun-external-link"></a><a href="https://github.com/mete0rxsc/valaxy-yun-external-link">项目地址:https://github.com/mete0rxsc/valaxy-yun-external-link</a></h3></blockquote><blockquote><h2 id="valaxy-yun-external-link"><a href="#valaxy-yun-external-link" class="headerlink" title="valaxy-yun-external-link"></a>valaxy-yun-external-link</h2></blockquote><p><code>valaxy-yun-external-link</code> 是一个用于安全验证的Vue组件，用于验证用户输入的 URL 是否安全。它支持Valaxy原生主题Yun主题</p><blockquote><h3 id="实现功能"><a href="#实现功能" class="headerlink" title="实现功能"></a>实现功能</h3></blockquote><ul><li><strong>安全验证</strong>：通过Vue组件劫持用户点击文章超链接的行为，重定向到站内告知页面的链接。</li><li><strong>自定义配置</strong>：允许用户自定义配置，如自定义跳转页面的CSS样式、跳转页面的标题、跳转页面的描述等。</li><li><strong>Base64加密</strong>：使用Base64加密算法对地址栏URL进行加密，以保护用户隐私。</li><li><strong>控制台信息显示</strong>：在控制台输出调试信息，方便开发者调试，当点击一个链接时，控制台会输出”Opening external link: “。</li><li><strong>兼容性</strong>：兼容Twikoo评论区，防止恶意链接。</li><li><strong>智能性</strong>：会自动检测本站URL，如果用户点击本站URL，则不会跳转，而是直接打开本站页面。</li></ul><blockquote><h3 id="使用方法"><a href="#使用方法" class="headerlink" title="使用方法"></a>使用方法</h3></blockquote><ol><li>Clone这个仓库的源码valaxy-yun-external-link仓库到本地。</li><li>将本仓库内的文件除<code>README.md</code>和<code>node_modules</code>外的所有文件复制到你的Valaxy主题Yun主题的根目录下。</li><li>在控制台重新运行<code>pnpm valaxy</code>以加载新增的组件。</li><li>进入网站查看组件是否生效。</li></ol><blockquote><p>[!TIP]<br>如果放入<code>components</code>和<code>layouts</code>文件插件并未加载或进入首页报错,请将<code>components</code>和<code>layouts</code>内的文件删除<br>将<code>node_modules</code>文件放入Valaxy主题根目录内</p></blockquote><blockquote><h3 id="文件夹结构"><a href="#文件夹结构" class="headerlink" title="文件夹结构"></a>文件夹结构</h3></blockquote><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">/--</span><br><span class="line">  |-- components/                            # Vue组件文件夹</span><br><span class="line">    |-- LinkInterceptor.vue                  # Vue组件文件</span><br><span class="line">  |-- layouts/                               # Vue布局文件夹</span><br><span class="line">    |-- post.vue                             # 文章发页面的Vue布局文件</span><br><span class="line">  |-- node_modules/                          # Node模块文件夹（如果无报错请不要使用这个文件）</span><br><span class="line">  |-- README.md                              # 帮助文档</span><br><span class="line">  |-- public                                 # 公共资源文件夹</span><br><span class="line">    |-- external-link.html                   # 中转页面的Html文件</span><br></pre></td></tr></table></figure><blockquote><h3 id="修改建议"><a href="#修改建议" class="headerlink" title="修改建议"></a>修改建议</h3></blockquote><ol><li>如果你想要修改中转页面的背景颜色，请修改<br><code>public/external-link.html</code>文件中的<code>&lt;body&gt;</code>标签的<code>style</code>属性中的<code>background-color</code>值 和<br><code>public/external-link.html</code>文件中第171-197行的对应值<br>对应代码</li></ol><figure class="highlight html"><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></pre></td><td class="code"><pre><span class="line">// 根据模式设置背景颜色、文字颜色和背景线条</span><br><span class="line">if (mode === &#x27;normal&#x27;) &#123;</span><br><span class="line">  document.body.style.backgroundColor = &#x27;#FFFFFF&#x27;; // 白色背景</span><br><span class="line">  document.body.style.color = &#x27;#000&#x27;; // 文字颜色改为黑色</span><br><span class="line"></span><br><span class="line">  // 调整按钮样式</span><br><span class="line">  const buttons = document.querySelectorAll(&#x27;.btn&#x27;);</span><br><span class="line">  buttons.forEach(button =&gt; &#123;</span><br><span class="line">    button.style.backgroundColor = &#x27;#333&#x27;; // 深色背景</span><br><span class="line">    button.style.color = &#x27;#FFF&#x27;; // 浅色文字</span><br><span class="line">  &#125;);</span><br><span class="line"></span><br><span class="line">  // 调整背景线条为灰色</span><br><span class="line">  document.body.style.backgroundImage = `</span><br><span class="line">    linear-gradient(rgba(128, 128, 128, 0.1) 1px, transparent 1px),</span><br><span class="line">    linear-gradient(90deg, rgba(128, 128, 128, 0.1) 1px, transparent 1px)</span><br><span class="line">  `;</span><br><span class="line">&#125; else &#123;</span><br><span class="line">  document.body.style.backgroundColor = &#x27;#222&#x27;; // 默认黑色模式背景</span><br><span class="line">  document.body.style.color = &#x27;#FFF&#x27;; // 文字颜色改为白色</span><br><span class="line"></span><br><span class="line">  // 恢复默认背景线条</span><br><span class="line">  document.body.style.backgroundImage = `</span><br><span class="line">    linear-gradient(rgba(255, 255, 255, 0.1) 1px, transparent 1px),</span><br><span class="line">    linear-gradient(90deg, rgba(255, 255, 255, 0.1) 1px, transparent 1px)</span><br><span class="line">  `;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol start="2"><li>如果你想要修改中转页面的标题和描述，请修改<br><code>public/external-link.html</code>文件中第83-95行的对应值<br>对应代码</li></ol><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line"><span class="tag">&lt;<span class="name">body</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">div</span> <span class="attr">class</span>=<span class="string">&quot;main-container&quot;</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">div</span> <span class="attr">class</span>=<span class="string">&quot;button-group&quot;</span>&gt;</span></span><br><span class="line">      <span class="tag">&lt;<span class="name">button</span> <span class="attr">id</span>=<span class="string">&quot;direct-link&quot;</span> <span class="attr">class</span>=<span class="string">&quot;btn&quot;</span>&gt;</span>直接跳转<span class="tag">&lt;/<span class="name">button</span>&gt;</span></span><br><span class="line">      <span class="tag">&lt;<span class="name">a</span> <span class="attr">href</span>=<span class="string">&quot;/&quot;</span> <span class="attr">class</span>=<span class="string">&quot;btn&quot;</span>&gt;</span>返回首页<span class="tag">&lt;/<span class="name">a</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><br><span class="line">    <span class="tag">&lt;<span class="name">div</span> <span class="attr">class</span>=<span class="string">&quot;content-box&quot;</span>&gt;</span></span><br><span class="line">      <span class="tag">&lt;<span class="name">h2</span>&gt;</span>即将跳转到外部网站<span class="tag">&lt;/<span class="name">h2</span>&gt;</span></span><br><span class="line">      <span class="tag">&lt;<span class="name">p</span>&gt;</span>您即将访问: <span class="tag">&lt;<span class="name">strong</span> <span class="attr">id</span>=<span class="string">&quot;external-url&quot;</span>&gt;</span><span class="tag">&lt;/<span class="name">strong</span>&gt;</span><span class="tag">&lt;/<span class="name">p</span>&gt;</span></span><br><span class="line">      <span class="tag">&lt;<span class="name">p</span>&gt;</span>将在 <span class="tag">&lt;<span class="name">span</span> <span class="attr">id</span>=<span class="string">&quot;countdown&quot;</span>&gt;</span>5<span class="tag">&lt;/<span class="name">span</span>&gt;</span> 秒后自动跳转...<span class="tag">&lt;/<span class="name">p</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><blockquote><p>[!WARNING]<br>如果不是个人需求，请不要修改Vue代码，否则可能会导致组件失效。<br>或者出现重复跳出新标签页的严重Bug</p></blockquote><blockquote><h3 id="问题反馈"><a href="#问题反馈" class="headerlink" title="问题反馈"></a>问题反馈</h3></blockquote><p>如果有任何问题，请提 issue 或者联系作者邮箱 <a href="mailto:&#x4d;&#101;&#116;&#x65;&#x30;&#114;&#95;&#120;&#115;&#99;&#64;&#104;&#111;&#116;&#x6d;&#97;&#x69;&#108;&#46;&#x63;&#111;&#x6d;">Mete0r_xsc@hotmail.com</a>，或者在网站中进行提问：<a href="https://www.xscnas.top/">https://www.xscnas.top</a></p><p>:::</p><p>::: en</p><blockquote><h1 id="valaxy-yun-external-link-1"><a href="#valaxy-yun-external-link-1" class="headerlink" title="valaxy-yun-external-link"></a>valaxy-yun-external-link</h1></blockquote><p><code>valaxy-yun-external-link</code> is a Vue component for security verification, designed to validate whether user-input URLs are safe. It is compatible with Valaxy’s native Yun theme.  </p><blockquote><h3 id="Features"><a href="#Features" class="headerlink" title="Features"></a>Features</h3></blockquote><ul><li><strong>Security Verification</strong>: Intercepts user clicks on article hyperlinks via Vue components and redirects them to an in-site notification page.  </li><li><strong>Customizable Configuration</strong>: Allows users to customize settings such as CSS styles for the redirect page, page title, and description.  </li><li><strong>Base64 Encryption</strong>: Uses Base64 encryption for URL parameters to protect user privacy.  </li><li><strong>Console Logging</strong>: Outputs debug information in the console for developer convenience (e.g., “Opening external link: “ when a link is clicked).  </li><li><strong>Compatibility</strong>: Works seamlessly with Twikoo comments to prevent malicious links.  </li><li><strong>Smart Detection</strong>: Automatically detects internal site URLs. If a user clicks an internal link, it directly opens the page without redirection.</li></ul><blockquote><h3 id="Usage"><a href="#Usage" class="headerlink" title="Usage"></a>Usage</h3></blockquote><ol><li>Clone the <code>valaxy-yun-external-link</code> repository to your local machine.  </li><li>Copy all files (except <code>README.md</code> and <code>node_modules</code>) to the root directory of your Valaxy Yun theme.  </li><li>Restart <code>pnpm valaxy</code> in the terminal to load the new component.  </li><li>Check if the component works by visiting your site.</li></ol><blockquote><p>[!TIP]<br>If the component fails to load or causes errors on the homepage, delete the files in the <code>components</code> and <code>layouts</code> folders.<br>If issues persist, place the <code>node_modules</code> folder in the root directory of your Valaxy theme.  </p></blockquote><blockquote><h3 id="Folder-Structure"><a href="#Folder-Structure" class="headerlink" title="Folder Structure"></a>Folder Structure</h3></blockquote><pre><code>/--    |-- components/                            # Vue components folder      |-- LinkInterceptor.vue                  # Vue component file    |-- layouts/                               # Vue layouts folder      |-- post.vue                             # Vue layout file for article pages    |-- node_modules/                          # Node modules folder (use only if errors occur)    |-- README.md                              # Documentation    |-- public                                 # Public resources folder      |-- external-link.html                   # Redirect page HTML file  </code></pre><blockquote><h3 id="Customization-Suggestions"><a href="#Customization-Suggestions" class="headerlink" title="Customization Suggestions"></a>Customization Suggestions</h3></blockquote><ol><li><p>To modify the background color of the redirect page, edit:  </p><ul><li>The <code>background-color</code> value in the <code>&lt;body&gt;</code> tag’s <code>style</code> attribute in <code>public/external-link.html</code>.  </li><li>The corresponding values in lines 171-197 of <code>public/external-link.html</code>.</li></ul><p>Relevant code:  </p><pre><code class="language-html">// Set background color, text color, and background lines based on mode  if (mode === &#39;normal&#39;) {    document.body.style.backgroundColor = &#39;#FFFFFF&#39;; // White background    document.body.style.color = &#39;#000&#39;; // Black text    // Adjust button styles    const buttons = document.querySelectorAll(&#39;.btn&#39;);    buttons.forEach(button =&gt; {      button.style.backgroundColor = &#39;#333&#39;; // Dark background      button.style.color = &#39;#FFF&#39;; // Light text    });    // Set background lines to gray    document.body.style.backgroundImage = `      linear-gradient(rgba(128, 128, 128, 0.1) 1px, transparent 1px),      linear-gradient(90deg, rgba(128, 128, 128, 0.1) 1px, transparent 1px)    `;  } else {    document.body.style.backgroundColor = &#39;#222&#39;; // Default dark mode background    document.body.style.color = &#39;#FFF&#39;; // White text    // Restore default background lines    document.body.style.backgroundImage = `      linear-gradient(rgba(255, 255, 255, 0.1) 1px, transparent 1px),      linear-gradient(90deg, rgba(255, 255, 255, 0.1) 1px, transparent 1px)    `;  }  </code></pre></li><li><p>To modify the title and description of the redirect page, edit lines 83-95 in <code>public/external-link.html</code>.  </p><p>Relevant code:  </p><pre><code class="language-html">&lt;body&gt;    &lt;div class=&quot;main-container&quot;&gt;      &lt;div class=&quot;button-group&quot;&gt;        &lt;button id=&quot;direct-link&quot; class=&quot;btn&quot;&gt;Proceed&lt;/button&gt;        &lt;a href=&quot;/&quot; class=&quot;btn&quot;&gt;Return Home&lt;/a&gt;      &lt;/div&gt;          &lt;div class=&quot;content-box&quot;&gt;        &lt;h2&gt;You are leaving for an external site&lt;/h2&gt;        &lt;p&gt;You are about to visit: &lt;strong id=&quot;external-url&quot;&gt;&lt;/strong&gt;&lt;/p&gt;        &lt;p&gt;Redirecting in &lt;span id=&quot;countdown&quot;&gt;5&lt;/span&gt; seconds...&lt;/p&gt;      &lt;/div&gt;    &lt;/div&gt;  </code></pre></li></ol><blockquote><p>[!WARNING]<br>Avoid modifying the Vue code unless necessary, as it may cause the component to malfunction or trigger repeated tab-opening bugs.  </p></blockquote><blockquote><h3 id="Issue-Reporting"><a href="#Issue-Reporting" class="headerlink" title="Issue Reporting"></a>Issue Reporting</h3><p>For any issues, please submit an issue or contact the author via email: <a href="mailto:&#77;&#101;&#116;&#101;&#x30;&#x72;&#x5f;&#x78;&#115;&#x63;&#x40;&#x68;&#111;&#116;&#x6d;&#97;&#105;&#x6c;&#46;&#99;&#111;&#109;">Mete0r_xsc@hotmail.com</a>.<br>Alternatively, visit the website for support: <a href="https://www.xscnas.top/">https://www.xscnas.top</a>.</p></blockquote><blockquote><p>[!WARNING]<br>This content is translated from Chinese by a machine and may contain unrealistic information</p></blockquote><p>::: </p>]]>
    </content>
    <id>https://www.xscnet.cn/posts/p1320250414/</id>
    <link href="https://www.xscnet.cn/posts/p1320250414/"/>
    <published>2025-04-13T16:00:00.000Z</published>
    <summary>
      <![CDATA[<p>::: zh-CN</p>
<h2 id="视频教程"><a href="#视频教程" class="headerlink" title="视频教程"></a>视频教程</h2><iframe src="//player.bilibili.com/player.html?1]]>
    </summary>
    <title>Valaxy Yun External Link</title>
    <updated>2025-04-13T16:00:00.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>Mete0r</name>
    </author>
    <category term="日记" scheme="https://www.xscnet.cn/categories/%E6%97%A5%E8%AE%B0/"/>
    <category term="夜半钟声" scheme="https://www.xscnet.cn/tags/%E5%A4%9C%E5%8D%8A%E9%92%9F%E5%A3%B0/"/>
    <content>
      <![CDATA[<audio controls><source src="/audio/Enzalla - Lullaby.wav" type="audio/mpeg">您的浏览器不支持音频元素。</audio>因为这首歌是VIP，不支持完整播放，所以我直接上传到本地了<meting-jsserver="netease"type="song"id="1939751157"  mode="circulation"></meting-js><blockquote><p>“究竟什么样的人，才会喜欢这种孤独且阴郁的氛围感”</p></blockquote><blockquote><p>片如世外桃源的森林里。<br>没人会指责“你”，在那里没人会孤立。<br>你大自然愿意拥抱“你“，风愿意与“你”低语，无人能玷污“你”。<br>因为暮色下的雨会冲刷着“你”；这不是逃避！<br>这是你来到人间 罪有应得 的 厚礼<br>“你”与夜莺一同低鸣。<br>诗歌将是“你”墓碑上是 座右铭 我比任何人都深深爱着“你”<br>—-亲爱的“我”</p></blockquote><blockquote><p>“没错 孤独 安静 自由 就是我想要的”</p></blockquote>]]>
    </content>
    <id>https://www.xscnet.cn/posts/p1220250406/</id>
    <link href="https://www.xscnet.cn/posts/p1220250406/"/>
    <published>2025-04-06T15:47:08.000Z</published>
    <summary>
      <![CDATA[<audio controls>
<source src="/audio/Enzalla - Lullaby.wav" type="audio/mpeg">
您的浏览器不支持音频元素。
</audio>
因为这首歌是VIP，不支持完整播放，所以我直接上传到本地了
<meting-]]>
    </summary>
    <title>Lullaby</title>
    <updated>2025-04-06T15:47:08.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>Mete0r</name>
    </author>
    <category term="教程" scheme="https://www.xscnet.cn/categories/%E6%95%99%E7%A8%8B/"/>
    <category term="教程" scheme="https://www.xscnet.cn/tags/%E6%95%99%E7%A8%8B/"/>
    <category term="Valaxy" scheme="https://www.xscnet.cn/tags/Valaxy/"/>
    <content>
      <![CDATA[<p>::: zh-CN</p><blockquote><h2 id="视频教程："><a href="#视频教程：" class="headerlink" title="视频教程："></a>视频教程：</h2></blockquote><iframe src="//player.bilibili.com/player.html?114274684897948&bvid=BV1FiZUYdEcV&cid=29220537022&p=1&high_quality=1&danmaku=1&autoplay=0" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true" sandbox="allow-top-navigation allow-same-origin allow-forms allow-scripts" width="100%" height="600"></iframe><blockquote><h2 id="文字教程："><a href="#文字教程：" class="headerlink" title="文字教程："></a>文字教程：</h2><p><meting-jsserver="netease"type="song"id="1974443813"  mode="circulation"><br></meting-js></p></blockquote><h4 id="Valaxy官网"><a href="#Valaxy官网" class="headerlink" title="Valaxy官网"></a><a href="https://valaxy.site/">Valaxy官网</a></h4><blockquote><h2 id="前情提要"><a href="#前情提要" class="headerlink" title="前情提要"></a>前情提要</h2><p>为什么选择Valaxy<br>这边我引用Valaxy官网的一段话  </p><h2 id="为什么是-Valaxy"><a href="#为什么是-Valaxy" class="headerlink" title="为什么是 Valaxy?"></a>为什么是 Valaxy?</h2><p>构想新一代静态博客框架&#x2F;生成器。<br>「告诉你两件好事吧」：<br>第一它与 Hexo 相比开发体验和速度上都更胜一筹<br>第二它与 VitePress&#x2F;VuePress 相比拥有更多针对博客的集成功能，譬如文章列表钩子、自动路由与组件注册、可覆盖的布局与主题等。<br>我认为 Valaxy 最突出的优势在于它的热更新开发体验与可定制性，但你编写文章或博客配置时，你只需要保存，所有的变更将会即刻显示在页面上，几乎无需等待！  </p></blockquote><p>此外，Valaxy 的主题还较少，但以 valaxy-theme-yun 为例，你可以覆盖主题中的任何组件，来定制或编写你自己的主题。  </p><blockquote><p>由于我自己在搭建这个博客上踩过很多的坑，尝试搜索也没有很多的教程，只能靠着自己和开发文档一点一点摸索，我感觉我应该为博客圈做些什么……  </p></blockquote><blockquote><h1 id="创建Valaxy"><a href="#创建Valaxy" class="headerlink" title="创建Valaxy"></a>创建Valaxy</h1></blockquote><h2 id="环境配置"><a href="#环境配置" class="headerlink" title="环境配置"></a>环境配置</h2><p>首先你需要有Node.js 16+的版本才可以进行Valaxy的搭建<br>你可以<a href="https://nodejs.org/zh-cn">点我进入Node.js官网</a></p><h2 id="安装Valaxy"><a href="#安装Valaxy" class="headerlink" title="安装Valaxy"></a>安装Valaxy</h2><p>由于大部分用户都为Windows系统，所以这里以Windows为例   </p><h3 id="创建项目文件夹"><a href="#创建项目文件夹" class="headerlink" title="创建项目文件夹"></a>创建项目文件夹</h3><p>当然，我们不能直接进行部署，首先我们需要创建一个项目文件夹来存储我们项目开发时的文件<br>这里在你喜欢的地方创建一个文件夹，名称随意，但是切记，尽量不要出现中文和空格，不然后期会很烦人，打开它<br>我在这里以blog为例<br>创建好之后，双击文件夹的地址栏，输入cmd，打开命令行，以下的操作均在命令行中完成<br><img src="https://imgse.koxiuqiu.cc/imgse/u/23/2025/04/03/67ee84323cc2a.png" alt="教程1"></p><h3 id="创建Valaxy项目"><a href="#创建Valaxy项目" class="headerlink" title="创建Valaxy项目"></a>创建Valaxy项目</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"># 安装pnpm</span><br><span class="line">npm i -g pnpm</span><br><span class="line"># 创建valaxy项目</span><br><span class="line">pnpm create valaxy</span><br></pre></td></tr></table></figure><p>把上面我给出的两条指令打进命令行中，以拉取最新的Valaxy项目(这里我把命令行的颜色改为紫色，以便更好地查看)<br><img src="https://imgse.koxiuqiu.cc/imgse/u/23/2025/04/03/67ee84323ccdf.png" alt="教程2"><br>这里提示选择拉取的项目<br>因为我们是做个人博客使用，所以这里选择Blog:<br><img src="https://imgse.koxiuqiu.cc/imgse/u/23/2025/04/03/67ee843238bd2.png" alt="教程3"><br>这里提示我们输入博客文件夹的名称，我们默认即可，当然你也可以选择自定义的名称：<br>这里会提示我们选择是否需要安装，我们输入y：<br><img src="https://imgse.koxiuqiu.cc/imgse/u/23/2025/04/03/67ee843239fe0.png" alt="教程4"><br>按上下方向键选择安装使用的代理，这里选择 pnpm，回车：<br><img src="https://imgse.koxiuqiu.cc/imgse/u/23/2025/04/03/67ee84325e9a4.png" alt="教程5"><br>酱酱！我们很简单的就完成了Valaxy的搭建<br>这里我们输入o可以快速打开网页预览<br><img src="https://imgse.koxiuqiu.cc/imgse/u/23/2025/04/03/67ee8432ab2da.png" alt="教程6"><br>输入e可以自动打开VSCode进行编辑  </p><details class="custom-block details" style="display: block; position: relative; border-radius: 2px; margin: 1.6em 0px; padding: 1.6em; background-color: rgb(238, 238, 238); color: rgb(44, 62, 80); font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, Oxygen, Ubuntu, Cantarell, &quot;Fira Sans&quot;, &quot;Droid Sans&quot;, &quot;Helvetica Neue&quot;, sans-serif; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;"><summary style="outline: none; cursor: pointer;">小白看过来！</summary><pre>什么是VSCode？<br><a href="https://code.visualstudio.com/">Visual Studio Code</a>,一款炒鸡方便的代码编辑器，建议大家人手一个</pre></details><blockquote><h2 id="编辑配置"><a href="#编辑配置" class="headerlink" title="编辑配置"></a>编辑配置</h2></blockquote><h3 id="目录结构"><a href="#目录结构" class="headerlink" title="目录结构"></a>目录结构</h3><p>pages: 所有页面<br>posts: 博客文章，文件格式为markdown<br>public: 静态资源文件夹，可以直接在文章中引用<br>styles: 覆盖主题样式，文件夹下的 index.xxx 文件将会被自动加载<br>components: 自定义你的组件<br>layouts: 自定义布局<br>locales: 自定义国际化关键词<br>valaxy.config.ts: 用户配置文件<br>site.config.ts: 站点配置文件  </p><h3 id="valaxy-config-ts"><a href="#valaxy-config-ts" class="headerlink" title="valaxy.config.ts"></a>valaxy.config.ts</h3><p>在我们初次打开VSCode之后，右下角会提示下载一些插件，直接选择安装<br>安装完成后，我们把鼠标悬浮在代码之上，就会看到一些简易的注释<br>您可以选择根据<a href="https://valaxy.site/">Valaxy官网开发文档</a>进行配置，也可以参考我的配置文件：  </p><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> <span class="keyword">type</span> &#123; <span class="title class_">UserThemeConfig</span> &#125; <span class="keyword">from</span> <span class="string">&#x27;valaxy-theme-yun&#x27;</span></span><br><span class="line"><span class="keyword">import</span> &#123; defineValaxyConfig &#125; <span class="keyword">from</span> <span class="string">&#x27;valaxy&#x27;</span></span><br><span class="line"></span><br><span class="line"><span class="comment">//这两行均需要安装对应的插件，详情请查看Valaxy开发文档</span></span><br><span class="line"><span class="comment">//import &#123; addonTwikoo &#125; from &#x27;valaxy-addon-twikoo&#x27;  //接入Twikoo评论系统</span></span><br><span class="line"><span class="comment">//import &#123; addonMeting &#125; from &#x27;valaxy-addon-meting&#x27;  //添加Meting音乐播放器</span></span><br><span class="line"><span class="comment">// add icons what you will need</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">const</span> safelist = [</span><br><span class="line">  <span class="string">&#x27;i-ri-home-line&#x27;</span>,</span><br><span class="line">]</span><br><span class="line"></span><br><span class="line"><span class="comment">/**</span></span><br><span class="line"><span class="comment"> * User Config</span></span><br><span class="line"><span class="comment"> */</span></span><br><span class="line"><span class="keyword">export</span> <span class="keyword">default</span> defineValaxyConfig&lt;<span class="title class_">UserThemeConfig</span>&gt;(&#123;</span><br><span class="line">  <span class="comment">// site config see site.config.ts</span></span><br><span class="line"></span><br><span class="line">  <span class="attr">theme</span>: <span class="string">&#x27;yun&#x27;</span>,</span><br><span class="line"></span><br><span class="line">  <span class="attr">themeConfig</span>: &#123;</span><br><span class="line">    <span class="attr">banner</span>: &#123;</span><br><span class="line">      <span class="attr">enable</span>: <span class="literal">true</span>,</span><br><span class="line">      <span class="attr">title</span>: <span class="string">&#x27;無限进步&#x27;</span>,</span><br><span class="line">    &#125;,</span><br><span class="line">    <span class="attr">pages</span>: [</span><br><span class="line">      &#123;</span><br><span class="line">        <span class="attr">name</span>: <span class="string">&#x27;网络世界的小伙伴们&#x27;</span>,</span><br><span class="line">        <span class="attr">url</span>: <span class="string">&#x27;/links/&#x27;</span>,</span><br><span class="line">        <span class="attr">icon</span>: <span class="string">&#x27;i-ri-open-arm-line&#x27;</span>,  <span class="comment">//这里的icon是Valaxy自带的图标，你可以在https://icones.js.org/找到你需要的图标，然后复制到icon字段中</span></span><br><span class="line">        <span class="comment">//这里的ico我踩过坑，所以多说两句，这里的ICO复制名字即可，但是你需要在前面添加i-ri-【ICO名字】</span></span><br><span class="line">        <span class="attr">color</span>: <span class="string">&#x27;hotpink&#x27;</span>,</span><br><span class="line">      &#125;,</span><br><span class="line">      &#123;</span><br><span class="line">        <span class="attr">name</span>: <span class="string">&#x27;感情故事&#x27;</span>,  <span class="comment">//这个girls文件夹默认是没有的，你需要自己在pages里创建，并在girls文件夹里创建index.md文件</span></span><br><span class="line">        <span class="attr">url</span>: <span class="string">&#x27;/girls/&#x27;</span>,</span><br><span class="line">        <span class="attr">icon</span>: <span class="string">&#x27;i-ri-heart-3-line&#x27;</span>,</span><br><span class="line">        <span class="attr">color</span>: <span class="string">&#x27;hotpink&#x27;</span>,</span><br><span class="line">      &#125;,</span><br><span class="line">      &#123;</span><br><span class="line">        <span class="attr">name</span>: <span class="string">&#x27;分类&#x27;</span>,</span><br><span class="line">        <span class="attr">url</span>: <span class="string">&#x27;/categories/&#x27;</span>,</span><br><span class="line">        <span class="attr">icon</span>: <span class="string">&#x27;i-ri-apps-line&#x27;</span>,</span><br><span class="line">        <span class="attr">color</span>: <span class="string">&#x27;dodgerblue&#x27;</span>,</span><br><span class="line">      &#125;,</span><br><span class="line">      &#123;</span><br><span class="line">        <span class="attr">name</span>: <span class="string">&#x27;标签&#x27;</span>,</span><br><span class="line">        <span class="attr">url</span>: <span class="string">&#x27;/tags/&#x27;</span>,</span><br><span class="line">        <span class="attr">icon</span>: <span class="string">&#x27;i-ri-bookmark-3-line&#x27;</span>,</span><br><span class="line">        <span class="attr">color</span>: <span class="string">&#x27;dodgerblue&#x27;</span>,</span><br><span class="line">      &#125;,</span><br><span class="line">    ],</span><br><span class="line">    <span class="attr">colors</span>: &#123;</span><br><span class="line">      <span class="attr">primary</span>: <span class="string">&quot;#D69B54&quot;</span>,</span><br><span class="line">    &#125;,</span><br><span class="line">    <span class="comment">//页脚</span></span><br><span class="line">    <span class="attr">footer</span>: &#123;</span><br><span class="line">      <span class="attr">since</span>: <span class="number">2023</span>,</span><br><span class="line">      <span class="attr">powered</span>: <span class="literal">true</span>, <span class="comment">//这里是显示Valaxy驱动信息的，尊重作者劳动成果，我选择开启</span></span><br><span class="line">      <span class="attr">beian</span>: &#123;</span><br><span class="line">        <span class="attr">enable</span>: <span class="literal">true</span>,</span><br><span class="line">        <span class="attr">icp</span>: <span class="string">&#x27;&#x27;</span>,  <span class="comment">//这里是备案号，如果你不需要备案号，可以将上面的enable改为false即可</span></span><br><span class="line">      &#125;,</span><br><span class="line">    &#125;,</span><br><span class="line">    </span><br><span class="line">    <span class="comment">//背景图,这里为我自己添加的字段</span></span><br><span class="line">    <span class="attr">bg_image</span>: &#123;</span><br><span class="line">      <span class="attr">enable</span>: <span class="literal">true</span>,  <span class="comment">//这里是背景图的设置，你可以设置白日模式和夜间模式的背景图，如果你不需要背景图，可以将上面的enable改为false即可</span></span><br><span class="line">      <span class="attr">url</span>: <span class="string">&quot;&quot;</span>,<span class="comment">// 白日模式背景</span></span><br><span class="line">      <span class="attr">dark</span>: <span class="string">&quot;&quot;</span>,<span class="comment">// 夜间模式背景</span></span><br><span class="line">    &#125;,</span><br><span class="line"></span><br><span class="line">     <span class="comment">//鼠标点击烟花特效</span></span><br><span class="line">    <span class="attr">fireworks</span>: &#123;  </span><br><span class="line">      <span class="attr">enable</span>: <span class="literal">true</span>,</span><br><span class="line">      <span class="attr">colors</span>: [<span class="string">&#x27;#FFE57D&#x27;</span>, <span class="string">&#x27;#FFCD88&#x27;</span>, <span class="string">&#x27;#E6F4AD&#x27;</span>]</span><br><span class="line">    &#125;,</span><br><span class="line"></span><br><span class="line">  &#125;,</span><br><span class="line">  <span class="attr">unocss</span>: &#123; safelist &#125;,</span><br><span class="line">  <span class="attr">siteConfig</span>: &#123;</span><br><span class="line">    <span class="comment">// 启用评论</span></span><br><span class="line">    <span class="attr">comment</span>: &#123;</span><br><span class="line">      <span class="attr">enable</span>: <span class="literal">true</span>  <span class="comment">//这里是评论的设置，如果你不需要评论，可以将enable改为false即可</span></span><br><span class="line">    &#125;,</span><br><span class="line">  &#125;,</span><br><span class="line">  <span class="comment">// 设置 valaxy-addon-twikoo 配置项</span></span><br><span class="line">  <span class="attr">addons</span>: [</span><br><span class="line">    <span class="title function_">addonTwikoo</span>(&#123; </span><br><span class="line">      <span class="attr">envId</span>: <span class="string">&#x27;&#x27;</span>, <span class="comment">// 自建服务地址</span></span><br><span class="line">    &#125;),</span><br><span class="line">    <span class="comment">//音乐播放器，如需要配置，请查看https://github.com/metowolf/MetingJS</span></span><br><span class="line">    <span class="title function_">addonMeting</span>(&#123;</span><br><span class="line">      <span class="attr">global</span>: <span class="literal">true</span>,</span><br><span class="line">      <span class="comment">/** <span class="doctag">@see</span> https://github.com/metowolf/MetingJS */</span></span><br><span class="line">      <span class="attr">props</span>: &#123;</span><br><span class="line">        <span class="attr">id</span>: <span class="string">&#x27;&#x27;</span>,</span><br><span class="line">        <span class="attr">server</span>: <span class="string">&#x27;&#x27;</span>,</span><br><span class="line">        <span class="attr">type</span>: <span class="string">&#x27;&#x27;</span>,</span><br><span class="line">        <span class="attr">mode</span>: <span class="string">&#x27;&#x27;</span>,</span><br><span class="line">      &#125;,</span><br><span class="line">    &#125;)</span><br><span class="line">  ],</span><br><span class="line">&#125;)</span><br><span class="line"></span><br></pre></td></tr></table></figure><h3 id="site-config-ts"><a href="#site-config-ts" class="headerlink" title="site.config.ts"></a>site.config.ts</h3><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> &#123; defineSiteConfig &#125; <span class="keyword">from</span> <span class="string">&#x27;valaxy&#x27;</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">export</span> <span class="keyword">default</span> <span class="title function_">defineSiteConfig</span>(&#123;</span><br><span class="line">  <span class="attr">url</span>: <span class="string">&#x27;&#x27;</span>,  <span class="comment">//你网站的URL</span></span><br><span class="line">  <span class="attr">favicon</span>: <span class="string">&quot;&quot;</span>,<span class="comment">// 网页图标链接</span></span><br><span class="line">  <span class="attr">lang</span>: <span class="string">&#x27;zh-CN&#x27;</span>,  <span class="comment">//默认语言</span></span><br><span class="line">  <span class="attr">title</span>: <span class="string">&quot;&quot;</span>,  <span class="comment">//网站标题</span></span><br><span class="line">  <span class="attr">subtitle</span>: <span class="string">&#x27;&#x27;</span>,<span class="comment">//网站副标题</span></span><br><span class="line">  <span class="attr">author</span>: &#123;</span><br><span class="line">    <span class="attr">name</span>: <span class="string">&#x27;&#x27;</span>,<span class="comment">//博主名称</span></span><br><span class="line">    <span class="attr">avatar</span>: <span class="string">&quot;&quot;</span>,<span class="comment">//头像链接</span></span><br><span class="line">    <span class="attr">status</span>: &#123;</span><br><span class="line">      <span class="attr">emoji</span>: <span class="string">&#x27;💛&#x27;</span><span class="comment">// 头像旁边的emoji</span></span><br><span class="line">    &#125;,</span><br><span class="line">  &#125;,</span><br><span class="line">  </span><br><span class="line">  <span class="attr">description</span>: <span class="string">&#x27;&#x27;</span>,  <span class="comment">//简介</span></span><br><span class="line">  <span class="attr">social</span>: [</span><br><span class="line">    &#123;</span><br><span class="line">      <span class="attr">name</span>: <span class="string">&#x27;RSS&#x27;</span>,</span><br><span class="line">      <span class="attr">link</span>: <span class="string">&#x27;/atom.xml&#x27;</span>,  <span class="comment">//这个是博客自带的RSS订阅，尽量留着，方便其他博友为你订阅</span></span><br><span class="line">      <span class="attr">icon</span>: <span class="string">&#x27;i-ri-rss-line&#x27;</span>,</span><br><span class="line">      <span class="attr">color</span>: <span class="string">&#x27;orange&#x27;</span>,</span><br><span class="line">    &#125;,</span><br><span class="line">    &#123;</span><br><span class="line">      <span class="attr">name</span>: <span class="string">&#x27;GitHub&#x27;</span>,</span><br><span class="line">      <span class="attr">link</span>: <span class="string">&#x27;&#x27;</span>,  <span class="comment">//这里填写你的GitHub地址，不需要的话删除此字段即可</span></span><br><span class="line">      <span class="attr">icon</span>: <span class="string">&#x27;i-ri-github-line&#x27;</span>,</span><br><span class="line">      <span class="attr">color</span>: <span class="string">&#x27;#6e5494&#x27;</span>,</span><br><span class="line">    &#125;,</span><br><span class="line">    &#123;</span><br><span class="line">      <span class="attr">name</span>: <span class="string">&#x27;网易云音乐&#x27;</span>,</span><br><span class="line">      <span class="attr">link</span>: <span class="string">&#x27;&#x27;</span>,  <span class="comment">//这里填写你的网易云音乐地址，不需要的话删除此字段即可</span></span><br><span class="line">      <span class="attr">icon</span>: <span class="string">&#x27;i-ri-netease-cloud-music-line&#x27;</span>,</span><br><span class="line">      <span class="attr">color</span>: <span class="string">&#x27;#C20C0C&#x27;</span>,</span><br><span class="line">    &#125;,</span><br><span class="line">    &#123;</span><br><span class="line">      <span class="attr">name</span>: <span class="string">&#x27;哔哩哔哩&#x27;</span>,</span><br><span class="line">      <span class="attr">link</span>: <span class="string">&#x27;&#x27;</span>,  <span class="comment">//这里填写你的BiliBili地址，不需要的话删除此字段即可</span></span><br><span class="line">      <span class="attr">icon</span>: <span class="string">&#x27;i-ri-bilibili-line&#x27;</span>,</span><br><span class="line">      <span class="attr">color</span>: <span class="string">&#x27;#FF8EB3&#x27;</span>,</span><br><span class="line">    &#125;,</span><br><span class="line">    &#123;</span><br><span class="line">      <span class="attr">name</span>: <span class="string">&#x27;Twitter&#x27;</span>,</span><br><span class="line">      <span class="attr">link</span>: <span class="string">&#x27;&#x27;</span>,  <span class="comment">//这里填写你的Twitter地址，不需要的话删除此字段即可</span></span><br><span class="line">      <span class="attr">icon</span>: <span class="string">&#x27;i-ri-twitter-x-fill&#x27;</span>,</span><br><span class="line">      <span class="attr">color</span>: <span class="string">&#x27;black&#x27;</span>,</span><br><span class="line">    &#125;,</span><br><span class="line">    &#123;</span><br><span class="line">      <span class="attr">name</span>: <span class="string">&#x27;E-Mail&#x27;</span>,</span><br><span class="line">      <span class="attr">link</span>: <span class="string">&#x27;mailto:YourEmail&#x27;</span>, <span class="comment">//这里在mailto后面填写你的Email地址，不需要的话删除此字段即可</span></span><br><span class="line">      <span class="attr">icon</span>: <span class="string">&#x27;i-ri-mail-line&#x27;</span>,</span><br><span class="line">      <span class="attr">color</span>: <span class="string">&#x27;#8E71C1&#x27;</span>,</span><br><span class="line">    &#125;,</span><br><span class="line">  ],</span><br><span class="line"></span><br><span class="line">  <span class="attr">search</span>: &#123;</span><br><span class="line">    <span class="attr">enable</span>: <span class="literal">true</span>,</span><br><span class="line">  &#125;,</span><br><span class="line">    <span class="attr">comment</span>: &#123;</span><br><span class="line">      <span class="attr">enable</span>: <span class="literal">true</span></span><br><span class="line">    &#125;,</span><br><span class="line">    <span class="attr">statistics</span>: &#123;</span><br><span class="line">      <span class="attr">enable</span>: <span class="literal">true</span>,</span><br><span class="line">      <span class="attr">readTime</span>: &#123;</span><br><span class="line">        <span class="comment">/**</span></span><br><span class="line"><span class="comment">         * 阅读速度</span></span><br><span class="line"><span class="comment">         */</span></span><br><span class="line">        <span class="attr">speed</span>: &#123;</span><br><span class="line">          <span class="attr">cn</span>: <span class="number">300</span>,</span><br><span class="line">          <span class="attr">en</span>: <span class="number">200</span>,</span><br><span class="line">        &#125;,</span><br><span class="line">      &#125;,</span><br><span class="line">    &#125;,</span><br><span class="line"></span><br><span class="line">  <span class="attr">sponsor</span>: &#123;</span><br><span class="line">    <span class="attr">enable</span>: <span class="literal">true</span>,</span><br><span class="line">    <span class="attr">title</span>: <span class="string">&#x27;我很可爱，请给我钱！&#x27;</span>,</span><br><span class="line">    <span class="attr">methods</span>: [</span><br><span class="line">      &#123;</span><br><span class="line">        <span class="attr">name</span>: <span class="string">&#x27;支付宝&#x27;</span>,</span><br><span class="line">        <span class="attr">url</span>: <span class="string">&#x27;&#x27;</span>, <span class="comment">//这里填写你的支付宝收款码图片链接</span></span><br><span class="line">        <span class="attr">color</span>: <span class="string">&#x27;#00A3EE&#x27;</span>,</span><br><span class="line">        <span class="attr">icon</span>: <span class="string">&#x27;i-ri-alipay-line&#x27;</span>,</span><br><span class="line">      &#125;,</span><br><span class="line">      &#123;</span><br><span class="line">        <span class="attr">name</span>: <span class="string">&#x27;微信支付&#x27;</span>,</span><br><span class="line">        <span class="attr">url</span>: <span class="string">&#x27;&#x27;</span>,<span class="comment">//这里填写你的微信收款码图片链接</span></span><br><span class="line">        <span class="attr">color</span>: <span class="string">&#x27;#2DC100&#x27;</span>,</span><br><span class="line">        <span class="attr">icon</span>: <span class="string">&#x27;i-ri-wechat-pay-line&#x27;</span>,</span><br><span class="line">      &#125;,</span><br><span class="line">    ],</span><br><span class="line">  &#125;,</span><br><span class="line">&#125;)</span><br></pre></td></tr></table></figure><blockquote><h2 id="插件"><a href="#插件" class="headerlink" title="插件"></a>插件</h2></blockquote><h3 id="评论区（以Twikoo为例）"><a href="#评论区（以Twikoo为例）" class="headerlink" title="评论区（以Twikoo为例）"></a>评论区（以Twikoo为例）</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">pnpm add valaxy-addon-twikoo</span><br></pre></td></tr></table></figure><p>加载插件  </p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line">import type &#123; UserThemeConfig &#125; from &#x27;valaxy-theme-yun&#x27;</span><br><span class="line">import &#123; defineValaxyConfig &#125; from &#x27;valaxy&#x27;</span><br><span class="line">import &#123; addonTwikoo &#125; from &#x27;valaxy-addon-twikoo&#x27;</span><br><span class="line">import &#123; addonMeting &#125; from &#x27;valaxy-addon-meting&#x27;</span><br><span class="line"></span><br><span class="line">export default defineValaxyConfig&lt;UserThemeConfig&gt;(&#123;</span><br><span class="line">  themeConfig: &#123;</span><br><span class="line">  // ...</span><br><span class="line">&#125;</span><br><span class="line">addons: [</span><br><span class="line">    addonTwikoo(&#123; </span><br><span class="line">      envId: &#x27;&#x27;, // 自建服务地址</span><br><span class="line">    &#125;)</span><br><span class="line">  ],</span><br><span class="line">&#125;)</span><br><span class="line"></span><br></pre></td></tr></table></figure><p>Twikoo的配置请查看<a href="https://twikoo.js.org/">Twikoo官方文档</a>  </p><blockquote><h2 id="Vue配置"><a href="#Vue配置" class="headerlink" title="Vue配置"></a>Vue配置</h2><p>如果你需要自定义Vue的组件，可以把组件放到&#x2F;components文件夹下<br>如果你不知道Vue是什么，请查看<a href="https://cn.vuejs.org/">Vue官方文档</a><br>但是我不喜欢把文件分散放，所以我直接在原本的Valaxy主题文件中放置了我的Vue<br>路径：\node_modules\valaxy-theme-yun\components<br>这里推荐几个我自己写的Vue组件，希望可以帮到你  </p></blockquote><ol><li>网站页脚插入更多的链接</li></ol><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br></pre></td><td class="code"><pre><span class="line">&lt;script lang=&quot;ts&quot; setup&gt;</span><br><span class="line">import &#123; ref, onMounted, onUnmounted &#125; from &#x27;vue&#x27;</span><br><span class="line"></span><br><span class="line">// 自定义链接</span><br><span class="line">const customLinks = [</span><br><span class="line">  &#123;</span><br><span class="line">    name: &#x27;开往&#x27;,</span><br><span class="line">    link: &#x27;https://www.travellings.cn/go-by-clouds.html&#x27;,</span><br><span class="line">    icon: &#x27;https://www.travellings.cn/assets/logo.gif&#x27;,</span><br><span class="line">  &#125;,</span><br><span class="line">]</span><br><span class="line"></span><br><span class="line">// 旅行者一号距离地球的信息</span><br><span class="line">const voyagerDistance = ref&lt;string&gt;(&#x27;正在加载...&#x27;)</span><br><span class="line"></span><br><span class="line">// 模拟获取旅行者一号距离</span><br><span class="line">const getVoyagerDistance = (): void =&gt; &#123;</span><br><span class="line">  const now = new Date()</span><br><span class="line">  const start = new Date(&#x27;01/17/2024 00:00:00&#x27;) // 旅行者1号开始计算的时间</span><br><span class="line">  const timeDifferenceInSeconds = (now.getTime() - start.getTime()) / 1000 // 转换为秒</span><br><span class="line">  const distanceInKilometers = Math.trunc(23400000000 + timeDifferenceInSeconds * 17) // 距离=秒数*速度</span><br><span class="line">  const astronomicalUnits = (distanceInKilometers / 149600000).toFixed(6) // 天文单位</span><br><span class="line"></span><br><span class="line">  voyagerDistance.value = `旅行者 1 号当前距离地球 $&#123;distanceInKilometers.toLocaleString()&#125; 千米，约为 $&#123;astronomicalUnits&#125; 个天文单位 🚀`</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">// 定时器</span><br><span class="line">let intervalId: NodeJS.Timeout | null = null</span><br><span class="line"></span><br><span class="line">onMounted(() =&gt; &#123;</span><br><span class="line">  getVoyagerDistance() // 初始化数据</span><br><span class="line">  intervalId = setInterval(getVoyagerDistance, 1000) // 每秒更新一次</span><br><span class="line">&#125;)</span><br><span class="line"></span><br><span class="line">onUnmounted(() =&gt; &#123;</span><br><span class="line">  if (intervalId) &#123;</span><br><span class="line">    clearInterval(intervalId) // 组件卸载时清除定时器</span><br><span class="line">  &#125;</span><br><span class="line">&#125;)</span><br><span class="line">&lt;/script&gt;</span><br><span class="line"></span><br><span class="line">&lt;template&gt;</span><br><span class="line">  &lt;!-- 自定义链接 --&gt;</span><br><span class="line">  &lt;div class=&quot;custom-links flex justify-center items-center gap-2&quot; p=&quot;1&quot;&gt;</span><br><span class="line">    &lt;template v-for=&quot;(link, index) in customLinks&quot; :key=&quot;index&quot;&gt;</span><br><span class="line">      &lt;template v-if=&quot;link.icon&quot;&gt;</span><br><span class="line">        &lt;a :href=&quot;link.link&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;</span><br><span class="line">          &lt;img :src=&quot;link.icon&quot; :alt=&quot;link.name&quot; /&gt;</span><br><span class="line">        &lt;/a&gt;</span><br><span class="line">      &lt;/template&gt;</span><br><span class="line">      &lt;template v-else&gt;</span><br><span class="line">        &lt;a :href=&quot;link.link&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&#123;&#123; link.name &#125;&#125;&lt;/a&gt;</span><br><span class="line">      &lt;/template&gt;</span><br><span class="line">      &lt;span v-if=&quot;index &lt; customLinks.length - 1&quot;&gt; |&lt;/span&gt;</span><br><span class="line">    &lt;/template&gt;</span><br><span class="line">  &lt;/div&gt;</span><br><span class="line"></span><br><span class="line">  &lt;!-- 萌ICP备案信息 --&gt;</span><br><span class="line">  &lt;div class=&quot;beian&quot; m=&quot;y-2&quot;&gt;</span><br><span class="line">    &lt;a href=&quot;https://icp.gov.moe/?keyword=[萌号]&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;萌ICP备号&lt;/a&gt;</span><br><span class="line">  &lt;/div&gt;</span><br><span class="line"></span><br><span class="line">  &lt;!-- 旅行者一号距离地球的信息 --&gt;</span><br><span class="line">  &lt;div class=&quot;voyager-distance&quot; m=&quot;y-2&quot;&gt;</span><br><span class="line">    &#123;&#123; voyagerDistance &#125;&#125;</span><br><span class="line">  &lt;/div&gt;</span><br><span class="line">&lt;/template&gt;</span><br><span class="line"></span><br><span class="line">&lt;style lang=&quot;scss&quot;&gt;</span><br><span class="line">.custom-links img &#123;</span><br><span class="line">  height: 20px; /* 根据需要调整图标大小 */</span><br><span class="line">  vertical-align: middle;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">.voyager-distance &#123;</span><br><span class="line">  font-size: 14px;</span><br><span class="line">  color: #666;</span><br><span class="line">  text-align: center;</span><br><span class="line">&#125;</span><br><span class="line">&lt;/style&gt;</span><br></pre></td></tr></table></figure><ol start="2"><li>DomainCheck.vue帮助你更好的检测你的网站是否被盗用<br>原理就是检测用户进入的域名是否为你设置的域名，不是的话提示并且让用户跳转</li></ol><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><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></pre></td><td class="code"><pre><span class="line">&lt;template&gt;</span><br><span class="line">    &lt;!-- 这个组件不需要模板内容，因为它主要是通过脚本逻辑来操作DOM --&gt;</span><br><span class="line">  &lt;/template&gt;</span><br><span class="line">  </span><br><span class="line">  &lt;script lang=&quot;ts&quot; setup&gt;</span><br><span class="line">  import &#123; onMounted &#125; from &#x27;vue&#x27;</span><br><span class="line">  </span><br><span class="line">onMounted(() =&gt; &#123;</span><br><span class="line">  const validDomain = &#x27;&#x27;; // 官方域名</span><br><span class="line">  const redirectUrl = &#x27;https://&#x27;; // 重定向链接</span><br><span class="line">  const hostname = document.location.hostname;</span><br><span class="line"></span><br><span class="line">  function createWatermark(text) &#123;</span><br><span class="line">    const watermarkDiv = document.createElement(&#x27;div&#x27;);</span><br><span class="line">    watermarkDiv.style.pointerEvents = &#x27;none&#x27;;</span><br><span class="line">    watermarkDiv.style.position = &#x27;fixed&#x27;;</span><br><span class="line">    watermarkDiv.style.top = &#x27;0&#x27;;</span><br><span class="line">    watermarkDiv.style.left = &#x27;0&#x27;;</span><br><span class="line">    watermarkDiv.style.width = &#x27;100%&#x27;;</span><br><span class="line">    watermarkDiv.style.height = &#x27;100%&#x27;;</span><br><span class="line">    watermarkDiv.style.zIndex = &#x27;9999&#x27;;</span><br><span class="line">    watermarkDiv.style.opacity = &#x27;0.1&#x27;;</span><br><span class="line">    watermarkDiv.style.background = &#x27;transparent&#x27;;</span><br><span class="line">    watermarkDiv.style.overflow = &#x27;hidden&#x27;;</span><br><span class="line">    watermarkDiv.style.display = &#x27;flex&#x27;;</span><br><span class="line">    watermarkDiv.style.justifyContent = &#x27;center&#x27;;</span><br><span class="line">    watermarkDiv.style.alignItems = &#x27;center&#x27;;</span><br><span class="line">    watermarkDiv.style.flexWrap = &#x27;wrap&#x27;;</span><br><span class="line"></span><br><span class="line">    const watermarkText = document.createElement(&#x27;div&#x27;);</span><br><span class="line">    watermarkText.innerText = text;</span><br><span class="line">    watermarkText.style.color = &#x27;black&#x27;;</span><br><span class="line">    watermarkText.style.fontSize = &#x27;30px&#x27;;</span><br><span class="line">    watermarkText.style.transform = &#x27;rotate(-30deg)&#x27;;</span><br><span class="line">    watermarkText.style.whiteSpace = &#x27;nowrap&#x27;;</span><br><span class="line">    watermarkText.style.margin = &#x27;20px&#x27;;</span><br><span class="line"></span><br><span class="line">    for (let i = 0; i &lt; 100; i++) &#123;</span><br><span class="line">      watermarkDiv.appendChild(watermarkText.cloneNode(true));</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    document.body.appendChild(watermarkDiv);</span><br><span class="line">  &#125;</span><br><span class="line"></span><br><span class="line">  // 如果是 localhost，直接进入，并在控制台提示用户</span><br><span class="line">  if (hostname === &#x27;localhost&#x27;) &#123;</span><br><span class="line">    console.log(&#x27;Completely: 当前处于本地开发环境 (localhost)&#x27;);</span><br><span class="line">    return;</span><br><span class="line">  &#125;</span><br><span class="line">  // 如果访问的是 domain.com ，直接跳转到 www.domain.com</span><br><span class="line">  else if (hostname === &#x27;domain.com&#x27;) &#123;  //这里需要更改为你自己的域名</span><br><span class="line">    console.log(&#x27;Completely: 已经跳转到官方域名 (www.domain.co)&#x27;);  //这里需要改为你的官方域名</span><br><span class="line">    window.location.replace(redirectUrl);</span><br><span class="line">  &#125;</span><br><span class="line">  // 如果访问的是其他域名，提示用户并添加水印</span><br><span class="line">  else if (hostname !== validDomain) &#123;</span><br><span class="line">    createWatermark(validDomain); // 给页面加上前边设置的域名为水印</span><br><span class="line">    const userResponse = confirm(&quot;提示：您当前浏览的页面不是正版(或者站点已经迁移域名)，建议您跳转至官方(www.domain.com)进行浏览！如果不是博主的域名及时留言反馈，博主域名为：www.domain.com&quot;);</span><br><span class="line">    if (userResponse) &#123;</span><br><span class="line">      window.location.replace(redirectUrl);</span><br><span class="line">    &#125;</span><br><span class="line">  &#125;</span><br><span class="line">&#125;);</span><br><span class="line">  &lt;/script&gt;</span><br></pre></td></tr></table></figure><ol start="3"><li>NoticeBar.vue公告栏组件</li></ol><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br><span class="line">128</span><br><span class="line">129</span><br><span class="line">130</span><br><span class="line">131</span><br><span class="line">132</span><br><span class="line">133</span><br><span class="line">134</span><br><span class="line">135</span><br><span class="line">136</span><br><span class="line">137</span><br><span class="line">138</span><br><span class="line">139</span><br><span class="line">140</span><br><span class="line">141</span><br><span class="line">142</span><br><span class="line">143</span><br><span class="line">144</span><br><span class="line">145</span><br><span class="line">146</span><br><span class="line">147</span><br><span class="line">148</span><br><span class="line">149</span><br><span class="line">150</span><br><span class="line">151</span><br><span class="line">152</span><br><span class="line">153</span><br><span class="line">154</span><br><span class="line">155</span><br><span class="line">156</span><br><span class="line">157</span><br><span class="line">158</span><br><span class="line">159</span><br><span class="line">160</span><br><span class="line">161</span><br><span class="line">162</span><br><span class="line">163</span><br><span class="line">164</span><br><span class="line">165</span><br><span class="line">166</span><br><span class="line">167</span><br><span class="line">168</span><br><span class="line">169</span><br><span class="line">170</span><br><span class="line">171</span><br><span class="line">172</span><br><span class="line">173</span><br><span class="line">174</span><br><span class="line">175</span><br><span class="line">176</span><br></pre></td><td class="code"><pre><span class="line">&lt;script lang=&quot;ts&quot; setup&gt;</span><br><span class="line">import &#123; ref, onMounted &#125; from &#x27;vue&#x27;;</span><br><span class="line"></span><br><span class="line">const userIp = ref(&#x27;&#x27;);</span><br><span class="line">const ipLocation = ref(&#x27;&#x27;);</span><br><span class="line">const distance = ref(&#x27;&#x27;); // 与站长的距离</span><br><span class="line">const serverDistance = ref(&#x27;&#x27;); // 与博客服务器的距离</span><br><span class="line">const greeting = ref(&#x27;&#x27;);</span><br><span class="line">const isLoading = ref(true);</span><br><span class="line">const error = ref(&#x27;&#x27;);</span><br><span class="line">const isVisible = ref(true); // 控制公告栏是否显示</span><br><span class="line"></span><br><span class="line">const getCityCoordinates = async (ip: string) =&gt; &#123;</span><br><span class="line">  const apiKey = &#x27;API_KEY&#x27;; // 替换为实际的 API 密钥，在https://wcode.net/get-apikey</span><br><span class="line">  const response = await fetch(`https://wcode.net/api/ip/v3/info/free?ip=$&#123;ip&#125;`, &#123;</span><br><span class="line">    method: &#x27;GET&#x27;,</span><br><span class="line">    headers: &#123;</span><br><span class="line">      &#x27;Content-Type&#x27;: &#x27;application/json&#x27;,</span><br><span class="line">      &#x27;Authorization&#x27;: `Bearer $&#123;apiKey&#125;`</span><br><span class="line">    &#125;</span><br><span class="line">  &#125;);</span><br><span class="line">  const data = await response.json();</span><br><span class="line">  //ipLocation.value = `$&#123;data.data.region.iso_code&#125; $&#123;data.data.region.name&#125; $&#123;data.data.city.name&#125;` || &#x27;未知地区&#x27;;</span><br><span class="line"></span><br><span class="line">  if (data.status === &#x27;success&#x27; &amp;&amp; data.data.extra_info.latitude &amp;&amp; data.data.extra_info.longitude) &#123;</span><br><span class="line">    return &#123; lat: parseFloat(data.data.extra_info.latitude), lng: parseFloat(data.data.extra_info.longitude) &#125;;</span><br><span class="line">  &#125; else &#123;</span><br><span class="line">    console.error(&#x27;Failed to get city coordinates:&#x27;, data);</span><br><span class="line">    return &#123; lat: 0, lng: 0 &#125;; // 默认值</span><br><span class="line">  &#125;</span><br><span class="line">&#125;;</span><br><span class="line"></span><br><span class="line">onMounted(async () =&gt; &#123;</span><br><span class="line">  try &#123;</span><br><span class="line">    // 使用 ip.useragentinfo.com 获取 IP 详细信息</span><br><span class="line">    const ipResponse = await fetch(&#x27;https://ip.useragentinfo.com/json?ip=&#x27;);  //这里使用的公共API不保证可用，请更换为可用的API</span><br><span class="line">    const locationData = await ipResponse.json();</span><br><span class="line"></span><br><span class="line">    // 解析返回的数据</span><br><span class="line">    userIp.value = locationData.ip;</span><br><span class="line">    ipLocation.value = `$&#123;locationData.short_name&#125; $&#123;locationData.country&#125; $&#123;locationData.province&#125; $&#123;locationData.city&#125; $&#123;locationData.area&#125;` || &#x27;未知地区&#x27;;  //这里请根据你的API灵活更改显示信息</span><br><span class="line"></span><br><span class="line">    // 获取用户所在城市的经纬度</span><br><span class="line">    const userLocation = await getCityCoordinates(locationData.ip);</span><br><span class="line"></span><br><span class="line">    // 检查经纬度是否有效</span><br><span class="line">    if (userLocation.lat === 0 &amp;&amp; userLocation.lng === 0) &#123;</span><br><span class="line">      throw new Error(&#x27;无法获取有效的经纬度信息&#x27;);</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    // 计算与站长的距离（设站长位置为）  //请自行设置站长经纬度</span><br><span class="line">    const stationLocation = &#123; lat: , lng:  &#125;;</span><br><span class="line">    distance.value = calculateDistance(stationLocation, userLocation).toFixed(2);</span><br><span class="line"></span><br><span class="line">    // 博客服务器经纬度（设服务器位置为）  //请自行设置服务器经纬度</span><br><span class="line">    const serverLocation = &#123; lat: , lng:  &#125;;</span><br><span class="line">    // 计算与博客服务器的距离</span><br><span class="line">    serverDistance.value = calculateDistance(serverLocation, userLocation).toFixed(2);</span><br><span class="line"></span><br><span class="line">    // 根据时间生成问候语</span><br><span class="line">    const hour = new Date().getHours();</span><br><span class="line">    greeting.value = hour &lt; 12 ? &#x27;早上好，美好的一天又开始了😎&#x27; : hour &lt; 18 ? &#x27;下午好，累了就好好休息一下吧🎶&#x27; : &#x27;晚上好，在属于自己的时间里好好放松吧😶‍🌫️&#x27;;</span><br><span class="line">  &#125; catch (err) &#123;</span><br><span class="line">    error.value = &#x27;无法加载公告信息，请稍后重试。刷新后如果问题仍然存在，请通过【替换为你的邮箱】联系我;</span><br><span class="line">    console.error(&#x27;Error:&#x27;, err);</span><br><span class="line">  &#125; finally &#123;</span><br><span class="line">    isLoading.value = false;</span><br><span class="line">  &#125;</span><br><span class="line">&#125;);</span><br><span class="line"></span><br><span class="line">function calculateDistance(loc1: &#123; lat: number, lng: number &#125;, loc2: &#123; lat: number, lng: number &#125;) &#123;</span><br><span class="line">  const R = 6371;</span><br><span class="line">  const dLat = (loc2.lat - loc1.lat) * Math.PI / 180;</span><br><span class="line">  const dLon = (loc2.lng - loc1.lng) * Math.PI / 180;</span><br><span class="line">  const a = Math.sin(dLat / 2) * Math.sin(dLat / 2) +</span><br><span class="line">            Math.cos(loc1.lat * Math.PI / 180) * Math.cos(loc2.lat * Math.PI / 180) *</span><br><span class="line">            Math.sin(dLon / 2) * Math.sin(dLon / 2);</span><br><span class="line">  const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));</span><br><span class="line">  return R * c;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">// 关闭公告栏</span><br><span class="line">function closeNotice() &#123;</span><br><span class="line">  isVisible.value = false;</span><br><span class="line">&#125;</span><br><span class="line">&lt;/script&gt;</span><br><span class="line"></span><br><span class="line">&lt;template&gt;</span><br><span class="line">  &lt;Transition name=&quot;slide&quot;&gt;</span><br><span class="line">    &lt;div v-if=&quot;isVisible&quot; class=&quot;notice-bar&quot;&gt;</span><br><span class="line">      &lt;div class=&quot;notice-content&quot;&gt;</span><br><span class="line">        &lt;button class=&quot;close-button&quot; @click=&quot;closeNotice&quot;&gt;×&lt;/button&gt;</span><br><span class="line">        &lt;h3&gt;公告&lt;/h3&gt;</span><br><span class="line">        &lt;p v-if=&quot;isLoading&quot;&gt;加载中...&lt;/p&gt;</span><br><span class="line">        &lt;p v-else-if=&quot;error&quot;&gt;&#123;&#123; error &#125;&#125;&lt;/p&gt;</span><br><span class="line">        &lt;template v-else&gt;</span><br><span class="line">          &lt;p&gt;欢迎来到Mete0r的博客！有任何问题请联系邮箱: &lt;a :href=&quot;`mailto:【替换为你的邮箱】`&quot;&gt;【替换为你的邮箱】&lt;/a&gt;&lt;/p&gt;</span><br><span class="line">          &lt;p&gt;🎉 欢迎信息 🎉&lt;/p&gt;</span><br><span class="line">          &lt;p&gt;  欢迎来自 &lt;span class=&quot;city&quot;&gt;&#123;&#123; ipLocation &#125;&#125;&lt;/span&gt; 的小伙伴，&lt;span class=&quot;greeting&quot;&gt;&#123;&#123; greeting &#125;&#125;&lt;/span&gt;！您现在距离站长约 &lt;span class=&quot;distance&quot;&gt;&#123;&#123; distance &#125;&#125;&lt;/span&gt; 公里，距离博客服务器约 &lt;span class=&quot;distance&quot;&gt;&#123;&#123; serverDistance &#125;&#125;&lt;/span&gt; 公里。当前的IP地址为： &lt;span class=&quot;ip&quot;&gt;&#123;&#123; userIp &#125;&#125;&lt;/span&gt;，祝您在我的博客里玩的开心！&lt;/p&gt;</span><br><span class="line">        &lt;/template&gt;</span><br><span class="line">      &lt;/div&gt;</span><br><span class="line">    &lt;/div&gt;</span><br><span class="line">  &lt;/Transition&gt;</span><br><span class="line">&lt;/template&gt;</span><br><span class="line"></span><br><span class="line">&lt;style scoped&gt;</span><br><span class="line">.notice-bar &#123;</span><br><span class="line">  position: fixed;</span><br><span class="line">  top: 20px;</span><br><span class="line">  right: 20px;</span><br><span class="line">  background-color: rgba(255, 255, 255, 0.75); /* 不透明度降低到 75% */</span><br><span class="line">  padding: 20px;</span><br><span class="line">  border-radius: 8px;</span><br><span class="line">  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);</span><br><span class="line">  z-index: 1000;</span><br><span class="line">  max-width: 300px;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">.notice-content &#123;</span><br><span class="line">  position: relative;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">.close-button &#123;</span><br><span class="line">  position: absolute;</span><br><span class="line">  top: 0;</span><br><span class="line">  right: 0;</span><br><span class="line">  background: none;</span><br><span class="line">  border: none;</span><br><span class="line">  font-size: 20px;</span><br><span class="line">  cursor: pointer;</span><br><span class="line">  color: #666;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">.close-button:hover &#123;</span><br><span class="line">  color: #000;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">.notice-content h3 &#123;</span><br><span class="line">  margin-bottom: 10px;</span><br><span class="line">  font-size: 18px;</span><br><span class="line">  font-weight: bold;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">.notice-content p &#123;</span><br><span class="line">  margin: 5px 0;</span><br><span class="line">  font-size: 14px;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">/* 颜色样式 */</span><br><span class="line">.city &#123;</span><br><span class="line">  color: #5bbad5;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">.greeting &#123;</span><br><span class="line">  color: #FFC0CB;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">.distance &#123;</span><br><span class="line">  color: #5bbad5;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">.ip &#123;</span><br><span class="line">  color: #5bd576;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">/* 滑入滑出动画 */</span><br><span class="line">.slide-enter-active,</span><br><span class="line">.slide-leave-active &#123;</span><br><span class="line">  transition: transform 0.3s ease-out;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">.slide-enter-from,</span><br><span class="line">.slide-leave-to &#123;</span><br><span class="line">  transform: translateX(100%);</span><br><span class="line">&#125;</span><br><span class="line">&lt;/style&gt;</span><br></pre></td></tr></table></figure><blockquote><h3 id="当然我就是一瓶不满半瓶晃荡，我不能保证我写的代码是最好的，但是起码是能用的"><a href="#当然我就是一瓶不满半瓶晃荡，我不能保证我写的代码是最好的，但是起码是能用的" class="headerlink" title="当然我就是一瓶不满半瓶晃荡，我不能保证我写的代码是最好的，但是起码是能用的"></a>当然我就是一瓶不满半瓶晃荡，我不能保证我写的代码是最好的，但是起码是能用的</h3><p>另外，千万不要忘了在YunFooter.vue和home.vue中引用你的自定义组件  </p></blockquote><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line">&lt;script lang=&quot;ts&quot; setup&gt;</span><br><span class="line">//...</span><br><span class="line">import DomainCheck from &#x27;../components/DomainCheck.vue&#x27; // 引入DomainCheck组件</span><br><span class="line">import NoticeBar from &#x27;../components/NoticeBar.vue&#x27; // 引入公告栏组件</span><br><span class="line">       //...</span><br><span class="line">&lt;/script&gt;</span><br><span class="line"></span><br><span class="line">//...</span><br><span class="line"></span><br><span class="line">&lt;template&gt;</span><br><span class="line">  &lt;DomainCheck /&gt; &lt;!-- 使用DomainCheck --&gt;</span><br><span class="line">  &lt;NoticeBar /&gt; &lt;!-- 使用NoticeBar --&gt;</span><br><span class="line">  //...</span><br><span class="line">&lt;template&gt;</span><br></pre></td></tr></table></figure><p>像这样就可以引用你刚才的组件了  </p><blockquote><h2 id="部署"><a href="#部署" class="headerlink" title="部署"></a>部署</h2></blockquote><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">npm run build</span><br></pre></td></tr></table></figure><p>将 dist 文件夹下的内容部署到自己的服务器上。</p><h3 id="GitHub-Pages部署"><a href="#GitHub-Pages部署" class="headerlink" title="GitHub Pages部署"></a>GitHub Pages部署</h3><p>可自行搜索或者观看我的教程视频</p><blockquote><h2 id="最后的最后，感谢您的浏览，如有什么其他的问题，欢迎在评论区向我提问，我看到后会在第一时间回复您"><a href="#最后的最后，感谢您的浏览，如有什么其他的问题，欢迎在评论区向我提问，我看到后会在第一时间回复您" class="headerlink" title="最后的最后，感谢您的浏览，如有什么其他的问题，欢迎在评论区向我提问，我看到后会在第一时间回复您"></a>最后的最后，感谢您的浏览，如有什么其他的问题，欢迎在评论区向我提问，我看到后会在第一时间回复您</h2><p>:::</p></blockquote><p>::: en</p><p>Technical teaching articles cannot be translated into English. Please understand</p><p>::: warning</p><p>This content is translated from Chinese by a machine and may contain unrealistic information</p><p>:::</p><p>::: </p>]]>
    </content>
    <id>https://www.xscnet.cn/posts/p1120250403/</id>
    <link href="https://www.xscnet.cn/posts/p1120250403/"/>
    <published>2025-04-02T16:00:00.000Z</published>
    <summary>
      <![CDATA[<p>::: zh-CN</p>
<blockquote>
<h2 id="视频教程："><a href="#视频教程：" class="headerlink" title="视频教程："></a>视频教程：</h2></blockquote>
<iframe src="//pl]]>
    </summary>
    <title>使用Valaxy搭建自己的博客</title>
    <updated>2025-04-02T16:00:00.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>Mete0r</name>
    </author>
    <category term="诗和远方" scheme="https://www.xscnet.cn/categories/%E8%AF%97%E5%92%8C%E8%BF%9C%E6%96%B9/"/>
    <category term="诗和远方" scheme="https://www.xscnet.cn/tags/%E8%AF%97%E5%92%8C%E8%BF%9C%E6%96%B9/"/>
    <content>
      <![CDATA[<p>::: zh-CN</p><p>《三月雪笺》</p><p>银绦漫舞锁春申，<br>玉盏噙香待故人。<br>松影量风拂旧雪，<br>冰棱垂泪绣新痕。<br>:::</p><p>::: en</p><p>Chinese poetry does not provide English translation, please be aware</p><p>::: </p>]]>
    </content>
    <id>https://www.xscnet.cn/posts/p10pm220250329/</id>
    <link href="https://www.xscnet.cn/posts/p10pm220250329/"/>
    <published>2025-03-28T16:00:00.000Z</published>
    <summary>
      <![CDATA[<p>::: zh-CN</p>
<p>《三月雪笺》</p>
<p>银绦漫舞锁春申，<br>玉盏噙香待故人。<br>松影量风拂旧雪，<br>冰棱垂泪绣新痕。<br>:::</p>
<p>::: en</p>
<p>Chinese poetry does not provide E]]>
    </summary>
    <title>《三月雪笺》</title>
    <updated>2025-03-28T16:00:00.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>Mete0r</name>
    </author>
    <category term="诗和远方" scheme="https://www.xscnet.cn/categories/%E8%AF%97%E5%92%8C%E8%BF%9C%E6%96%B9/"/>
    <category term="诗和远方" scheme="https://www.xscnet.cn/tags/%E8%AF%97%E5%92%8C%E8%BF%9C%E6%96%B9/"/>
    <content>
      <![CDATA[<p>::: zh-CN</p><p>《茧》</p><p>信纸在季风里打滑时<br>蝉声正在缝合<br>年轮的褶皱  </p><p>我等你舌尖的盐<br>在暮色结晶<br>等二十四封信<br>被潮声蛀空<br>月光正拆解<br>每一粒沙的堤岸  </p><p>黄昏在指缝崩塌七次之后<br>我们的名字<br>仍卡在春天的喉间<br>发不出芽  </p><p>:::</p><p>::: en</p><p>Chinese poetry does not provide English translation, please be aware</p><p>::: </p>]]>
    </content>
    <id>https://www.xscnet.cn/posts/p8pm120250329/</id>
    <link href="https://www.xscnet.cn/posts/p8pm120250329/"/>
    <published>2025-03-28T16:00:00.000Z</published>
    <summary>
      <![CDATA[<p>::: zh-CN</p>
<p>《茧》</p>
<p>信纸在季风里打滑时<br>蝉声正在缝合<br>年轮的褶皱  </p>
<p>我等你舌尖的盐<br>在暮色结晶<br>等二十四封信<br>被潮声蛀空<br>月光正拆解<br>每一粒沙的堤岸  </p>
<p>黄昏在指缝崩]]>
    </summary>
    <title>《茧》</title>
    <updated>2025-03-28T16:00:00.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>Mete0r</name>
    </author>
    <category term="月总结" scheme="https://www.xscnet.cn/categories/%E6%9C%88%E6%80%BB%E7%BB%93/"/>
    <category term="月总结" scheme="https://www.xscnet.cn/tags/%E6%9C%88%E6%80%BB%E7%BB%93/"/>
    <category term="生活" scheme="https://www.xscnet.cn/tags/%E7%94%9F%E6%B4%BB/"/>
    <content>
      <![CDATA[<p>::: zh-CN</p><hr><h1 id="2025年3月29日-春雪记事"><a href="#2025年3月29日-春雪记事" class="headerlink" title="2025年3月29日 春雪记事"></a>2025年3月29日 春雪记事</h1><p>三月的最后一周，空气里依然裹着冬天的尾巴。教室窗台上的冰凌悄悄生长，折射着北方少年眼中的奇妙三月。<br>这本该是柳枝抽芽的时节，此刻窗外却在上演另一番景象：<br><img src="https://imgse.koxiuqiu.cc/imgse/u/23/2025/03/26/67e40077604da.jpg" alt="1"><br>（今年气候确实反常，第一次见到三月末还在飘雪<br>其实很多次大雪纷飞都发生在晚自习时段，走廊里此起彼伏的惊叹声被上课铃打断，只能把白茫茫的盛景封存在记忆里  </p><blockquote><h1 id="月度记忆存档"><a href="#月度记忆存档" class="headerlink" title="月度记忆存档"></a>月度记忆存档</h1><h2 id="3月1日-春寒与告别"><a href="#3月1日-春寒与告别" class="headerlink" title="3月1日 春寒与告别"></a>3月1日 春寒与告别</h2><p><meting-jsserver="netease"type="song"id="28403111"  mode="circulation"><br></meting-js></p></blockquote><p><img src="https://imgse.koxiuqiu.cc/imgse/u/23/2025/03/29/67e802abb4d92.jpg" alt="3.1.jpg"><br>月考结束回家的路上，手机弹出方大同去世的热搜。点开网易云收藏列表，《特别的人》评论区已经挤满悼念的蜡烛。<br>想起他那些直接切入主歌的作品，就像这次突然的告别，没有冗长前奏，只留下无数人在旋律里寻找余温。  </p><blockquote><p>⌈我们是对方 特别的人⌋<br>单曲循环到深夜  </p></blockquote><blockquote><h2 id="3月4日-次世代体验"><a href="#3月4日-次世代体验" class="headerlink" title="3月4日 次世代体验"></a>3月4日 次世代体验</h2><p><img src="https://imgse.koxiuqiu.cc/imgse/u/23/2025/03/29/67e802aba6054.jpg" alt="3.4.jpg"><br>GTA5次世代版更新这天，特意找发小借来PS5体验。洛圣都的夕阳在4K画质下美得失真，但握着陌生手柄的我还是更怀念初中时在旧电脑上通关的像素风景。<br>当崔佛开着冒烟的皮卡冲过沙滩时，妈妈端着果盘推开了房门…  </p></blockquote><blockquote><h2 id="3月5日-音乐节风波"><a href="#3月5日-音乐节风波" class="headerlink" title="3月5日 音乐节风波"></a>3月5日 音乐节风波</h2><p><img src="https://imgse.koxiuqiu.cc/imgse/u/23/2025/03/29/67e802abad90f.jpg" alt="3.5.jpg"><br>晚饭后刷抖音时，长春欧拉音乐节的宣传片突然闯入视线。原本只是随便看看，直到赵雷的《我记得》前奏响起——那瞬间仿佛有根弦被拨动了。<br>从偷偷查看购票攻略到鼓起勇气和妈妈谈判，整整三天都在组织语言。最后用「语文作文需要生活素材」的理由，加上保证月考进步十名的承诺，终于换来了点头。<br>（虽然最终阵容调整得面目全非，但五月的某个周末，我会带着日记本去现场收集故事）  </p></blockquote><blockquote><h2 id="插曲：备考BGM"><a href="#插曲：备考BGM" class="headerlink" title="插曲：备考BGM"></a>插曲：备考BGM</h2><p><meting-jsserver="netease"type="song"id="2661401289"  mode="circulation"><br></meting-js></p></blockquote><blockquote><h2 id="3月16日-博客重生计划"><a href="#3月16日-博客重生计划" class="headerlink" title="3月16日 博客重生计划"></a>3月16日 博客重生计划</h2><p><img src="https://imgse.koxiuqiu.cc/imgse/u/23/2025/03/29/67e802abacd04.jpg" alt="3.16.jpg"><br>整理书桌时发现去年搭建的Halo博客，心血来潮想重新启用。结果光是加载后台就花了半分钟，刷新时浏览器转圈的样子像在嘲笑我的怀旧情怀。<br>深夜在博友的世界中不断跳转发现了Valaxy框架，简洁的文档让我眼前一亮。凌晨两点半，卧室飘着速溶咖啡的香气，新博客终于在旧电脑的虚拟机里睁开了眼睛。  </p></blockquote><blockquote><h2 id="3月19日-云端曙光"><a href="#3月19日-云端曙光" class="headerlink" title="3月19日 云端曙光"></a>3月19日 云端曙光</h2><p><img src="https://imgse.koxiuqiu.cc/imgse/u/23/2025/03/29/67e802ab9ed43.jpg" alt="3.19.jpg"><br>当时我正在为服务器延迟发愁，一个偶然的契机，让我发现了阿里云的轻量服务器。首年68元的轻量应用服务器像是量身定制的礼物，付款时手指都有些发抖。<br>备案材料准备比想象中复杂，幸好阿里云的客服24小时在线。那晚书桌上的台灯亮到凌晨，各种证件照和承诺书铺满电脑的文件夹中，像在完成某种神圣的仪式。  </p></blockquote><blockquote><h2 id="3月26日-破壳日"><a href="#3月26日-破壳日" class="headerlink" title="3月26日 破壳日"></a>3月26日 破壳日</h2><p><img src="https://imgse.koxiuqiu.cc/imgse/u/23/2025/03/29/67e802ac27b9a.jpg" alt="3.26.jpg"><br>收到备案通过的短信时正在准备上下一节课，突然到来的惊喜让我那天的心情变得格外开心。从那天起，这个在云端安家的博客就像颗正在发芽的种子，每次用手机查看访问日志都充满期待。  </p><h3 id="现在它不仅是代码的集合，更是某个北方高中生留给世界的漂流瓶"><a href="#现在它不仅是代码的集合，更是某个北方高中生留给世界的漂流瓶" class="headerlink" title="现在它不仅是代码的集合，更是某个北方高中生留给世界的漂流瓶"></a>现在它不仅是代码的集合，更是某个北方高中生留给世界的漂流瓶</h3></blockquote><p>日常依然被试卷和课程表填满，只是课间刷题休息时，会多出一个打开服务器监控页面的小习惯。  </p><blockquote><h4 id="特别鸣谢："><a href="#特别鸣谢：" class="headerlink" title="特别鸣谢："></a>特别鸣谢：</h4><p><del>DeepSleep</del>DeepSeek，陪我熬过无数个debug的夜晚<br><img src="https://imgse.koxiuqiu.cc/imgse/u/23/2025/03/29/67e802ab91536.jpg" alt="deepsleep.jpg"><br>(球球DeepSeek不要再在我需要的时候Sleep了</p></blockquote><hr><p>（END）</p><p>:::</p><p>::: en</p><h1 id="March-29-2025-Snow"><a href="#March-29-2025-Snow" class="headerlink" title="March 29, 2025 Snow"></a>March 29, 2025 Snow</h1><p>As March draws to a close, there’s still a lingering chill in the air.<br>March is supposed to be the season of rejuvenation, but through the eyes of a northern child, it looks like this:<br><img src="https://imgse.koxiuqiu.cc/imgse/u/23/2025/03/26/67e40077604da.jpg" alt="1"><br>(This year’s weird weather is truly bizarre - I’ve never seen snowfall in late March before.<br>Actually, I’ve missed many snow scenes while being stuck at school, though the views were truly spectacular.)</p><blockquote><h1 id="Monthly-Recap-Time"><a href="#Monthly-Recap-Time" class="headerlink" title="Monthly Recap Time!"></a>Monthly Recap Time!</h1><h2 id="01-March-1st"><a href="#01-March-1st" class="headerlink" title="01 March 1st"></a>01 March 1st</h2><p><meting-jsserver="netease"type="song"id="28403111"  mode="circulation"><br></meting-js></p></blockquote><p><img src="https://imgse.koxiuqiu.cc/imgse/u/23/2025/03/29/67e802abb4d92.jpg" alt="3.1.jpg"><br>Returned home on March 1st and opened NetEase Cloud Music as usual, only to discover the news of Khalil Fong’s passing.<br>An artist who disliked musical preludes left us without any prelude, leaving only his works behind.  </p><blockquote><p>⌈We’re each other’s special ones⌋<br>Rest in peace</p></blockquote><blockquote><h2 id="02-March-4th"><a href="#02-March-4th" class="headerlink" title="02 March 4th"></a>02 March 4th</h2><p><img src="https://imgse.koxiuqiu.cc/imgse/u/23/2025/03/29/67e802aba6054.jpg" alt="3.4.jpg"><br>March 4th saw the release of GTA5’s next-gen version update. Gave it a quick try.<br>I’ll keep the gaming details brief here.  </p></blockquote><blockquote><h2 id="03-March-5th"><a href="#03-March-5th" class="headerlink" title="03 March 5th"></a>03 March 5th</h2><p><img src="https://imgse.koxiuqiu.cc/imgse/u/23/2025/03/29/67e802abad90f.jpg" alt="3.5.jpg"><br>While casually browsing Douyin after dinner, I stumbled upon promotion for Changchun’s Oula Music Festival. For reasons unknown, I immediately decided to attend.<br>The initial lineup included Capper, but later changes disappointed me.<br>However, seeing Zhao Lei scheduled for May 24th convinced me it was worth the ticket.<br>When I decided to attend on 5&#x2F;24, some issues arose.<br>My mother initially objected due to my sophomore academic workload, but eventually relented after my persistent persuasion.  </p></blockquote><blockquote><h2 id="04"><a href="#04" class="headerlink" title="04"></a>04</h2><p><meting-jsserver="netease"type="song"id="2661401289"  mode="circulation"><br></meting-js></p></blockquote><blockquote><h2 id="05-March-16th"><a href="#05-March-16th" class="headerlink" title="05 March 16th"></a>05 March 16th</h2><p><img src="https://imgse.koxiuqiu.cc/imgse/u/23/2025/03/29/67e802abacd04.jpg" alt="3.16.jpg"><br>On March 16th, I remembered my neglected Halo blog and decided to revive it. However, I discovered its painfully slow loading speed severely impacted user experience.<br>While researching alternatives, I found Valaxy framework - thus this current blog was born.  </p></blockquote><p>This screenshot shows my initial experimentation with Valaxy, deployed directly on my home server. When performance remained unsatisfactory,<br>I found myself at a loss.  </p><blockquote><h2 id="06-March-19th"><a href="#06-March-19th" class="headerlink" title="06 March 19th"></a>06 March 19th</h2><p><img src="https://imgse.koxiuqiu.cc/imgse/u/23/2025/03/29/67e802ab9ed43.jpg" alt="3.19.jpg"><br>March 19th brought a serendipitous discovery - Alibaba Cloud’s lightweight application server offering first-year hosting for just ¥68.<br>This revelation felt like discovering the hidden paradise in “Peach Blossom Spring”: ⌈After advancing dozens more steps, it suddenly became clear⌋<br>Finally, I could sustainably host my blog while applying for ICP备案 (website registration)!<br>(Immediate action ensued!)</p></blockquote><blockquote><h2 id="07-March-26th"><a href="#07-March-26th" class="headerlink" title="07 March 26th"></a>07 March 26th</h2><p><img src="https://imgse.koxiuqiu.cc/imgse/u/23/2025/03/29/67e802ac27b9a.jpg" alt="3.26.jpg"><br>March 26th marked the successful approval of my website’s ICP record. Though my first attempt at registration, it passed smoothly.<br>Initially clueless about the process, I appreciated Alibaba Cloud’s 24&#x2F;7 customer support through work orders.  </p><h3 id="Step-by-step-this-journey-built-the-blog-you-see-today"><a href="#Step-by-step-this-journey-built-the-blog-you-see-today" class="headerlink" title="Step by step, this journey built the blog you see today"></a>Step by step, this journey built the blog you see today</h3></blockquote><p>Most remaining time followed routine student life.<br>I feel my online presence truly reflects the Real Me, while offline I remain a social anxiety warrior.  </p><blockquote><h4 id="During-website-development-I-heavily-relied-on-DeepSleep-DeepSeek-Modern-AI-capabilities-are-truly-remarkable"><a href="#During-website-development-I-heavily-relied-on-DeepSleep-DeepSeek-Modern-AI-capabilities-are-truly-remarkable" class="headerlink" title="During website development, I heavily relied on DeepSleep DeepSeek. Modern AI capabilities are truly remarkable."></a>During website development, I heavily relied on <del>DeepSleep</del> DeepSeek. Modern AI capabilities are truly remarkable.</h4><p><img src="https://imgse.koxiuqiu.cc/imgse/u/23/2025/03/29/67e802ab91536.jpg" alt="deepsleep.jpg"></p></blockquote><p>::: warning</p><p>This content is translated from Chinese by a machine and may contain unrealistic information</p><p>:::</p><p>::: </p>]]>
    </content>
    <id>https://www.xscnet.cn/posts/p9m120250329/</id>
    <link href="https://www.xscnet.cn/posts/p9m120250329/"/>
    <published>2025-03-28T16:00:00.000Z</published>
    <summary>
      <![CDATA[<p>::: zh-CN</p>
<hr>
<h1 id="2025年3月29日-春雪记事"><a href="#2025年3月29日-春雪记事" class="headerlink" title="2025年3月29日 春雪记事"></a>2025年3月29日 春雪记事</h1]]>
    </summary>
    <title>2025三月小结</title>
    <updated>2025-03-28T16:00:00.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>Mete0r</name>
    </author>
    <category term="日常" scheme="https://www.xscnet.cn/categories/%E6%97%A5%E5%B8%B8/"/>
    <category term="日常" scheme="https://www.xscnet.cn/tags/%E6%97%A5%E5%B8%B8/"/>
    <category term="开心的发癫" scheme="https://www.xscnet.cn/tags/%E5%BC%80%E5%BF%83%E7%9A%84%E5%8F%91%E7%99%AB/"/>
    <content>
      <![CDATA[<p>::: zh-CN</p><p>推荐搭配此音乐食用，风味更佳<br><meting-jsserver="netease"type="song"id="1974443814"  mode="circulation"><br></meting-js></p><p>✦</p><h1 id="2025-3-27-｜-📅-开心の日"><a href="#2025-3-27-｜-📅-开心の日" class="headerlink" title="2025&#x2F;3&#x2F;27 ｜ 📅 开心の日"></a>2025&#x2F;3&#x2F;27 ｜ 📅 开心の日</h1><p>🕊️ 情绪温度：36.5°C ｜ 稳定晴好</p><p>✦</p><h2 id="Ⅰ-关于执念的思考"><a href="#Ⅰ-关于执念的思考" class="headerlink" title="Ⅰ. 关于执念的思考"></a>Ⅰ. 关于执念的思考</h2><p>最近对网站的完整度产生了近乎偏执的追求。每天归家第一件事便是：<br>💻 打开电脑 → 📂 展开开发文档 → ✨ 启动VSCode<br>像在进行某种神圣的仪式  </p><p>父亲在备案过程中给予的支持，让我想起他常说的：  </p><blockquote><p>「抵达终点前要穿越荆棘林，你要做的不是绕开，而是把荆棘变成玫瑰」</p></blockquote><p>这句话成为了我的开发信条，每当遇到报错警告，耳畔就会响起这个声音  </p><p>✦</p><h2 id="Ⅱ-春日狂欢倒计时"><a href="#Ⅱ-春日狂欢倒计时" class="headerlink" title="Ⅱ. 春日狂欢倒计时"></a>Ⅱ. 春日狂欢倒计时</h2><p><meting-jsserver="netease"type="song"id="29567193"  mode="circulation"><br></meting-js></p><p>🎉 成功捕获音乐节门票！<br>尽管身处高二的湍流中，但我知道：<br>此刻不去的遗憾，会在未来变成永远补不上的拼图<br>我们与要好朋友的路如同两条线，当在一个交点相遇后，便会彼此伴随，但随着时间的推移，我们不得不各奔东西  </p><p><img src="https://imgse.koxiuqiu.cc/imgse/u/23/2025/03/27/67e55a054d9a7.jpg" alt="闪烁的电子票根"><br>成年人总说我们冲动，但他们忘了：<br>青春的特权就是能把「疯狂」变成「永生难忘」  </p><p>✦</p><h3 id="Ⅲ-关于执念的思考"><a href="#Ⅲ-关于执念的思考" class="headerlink" title="Ⅲ. 关于执念的思考"></a>Ⅲ. 关于执念的思考</h3><ul><li><p><strong>开发中的魔幻时刻</strong><br>昨夜调试CSS时，窗外忽然划过流星<br>手忙脚乱对着代码许愿：愿所有border-radius都能完美呈现</p></li><li><p><strong>某个具体困境</strong><br>昨天夜里十一点<br>Twikoo评论区模块突然吞噬了所有用户头像<br>在月光与咖啡的加持下<br>终于揪出了那个调皮的bug  </p><blockquote><p>(名称首字母大写有可能会吞头像哦)</p></blockquote></li></ul><p>✦</p><h3 id="Ⅳ-春日狂欢倒计时"><a href="#Ⅳ-春日狂欢倒计时" class="headerlink" title="Ⅳ. 春日狂欢倒计时"></a>Ⅳ. 春日狂欢倒计时</h3><ul><li><p><strong>抢票心跳时刻</strong><br>倒计时最后一秒<br>手指在屏幕上摩擦出静电火花<br>支付成功的绿光映在瞳孔里<br>像捕获了一只电子萤火虫</p></li><li><p><strong>音乐节特别意义</strong><br>这次有最想见的音乐人<br>他们的歌曾在月考前夕<br>从耳机线里伸出温暖触手<br>托住我下坠的分数</p></li></ul><p>✦</p><h3 id="Ⅴ-星火计划"><a href="#Ⅴ-星火计划" class="headerlink" title="Ⅴ. 星火计划"></a>Ⅴ. 星火计划</h3><p>  物理课走神时<br>  在草稿本上画下的函数曲线<br>  突然变成网站新板块的蓝图<br>  知识在学科间完成华丽迁徙</p><ul><li><strong>未来的具象想象</strong><br>幻想某个平行时空里<br>十年后的自己正通过时光RSS订阅<br>阅读此刻这些稚嫩的文字<br>嘴角泛起量子纠缠的微笑</li></ul><p>虽然现在的访问量像夜空中微弱的星光<br>但我相信持续输出优质内容，终会迎来星火燎原的时刻  </p><p>✦</p><p><img src="https://imgse.koxiuqiu.cc/imgse/u/23/2025/03/27/67e55e7be5530.jpg" alt="pic"></p><p>✨ <strong>请保持心脏震动，总有人与你共鸣</strong><br>🎈 <strong>自由的味道，是十八岁最想抓住的风</strong></p><p>(END)</p><p>:::</p><p>::: en</p><h1 id="Recommended-to-pair-with-this-music-for-enhanced-flavor"><a href="#Recommended-to-pair-with-this-music-for-enhanced-flavor" class="headerlink" title="Recommended to pair with this music for enhanced flavor"></a>Recommended to pair with this music for enhanced flavor</h1><p><meting-js  server="netease"  type="song"  id="1974443814"    mode="circulation"><br></meting-js>  </p><p>✦</p><h1 id="2025-3-27-｜-📅-A-Happy-Day"><a href="#2025-3-27-｜-📅-A-Happy-Day" class="headerlink" title="2025&#x2F;3&#x2F;27 ｜ 📅 A Happy Day"></a>2025&#x2F;3&#x2F;27 ｜ 📅 A Happy Day</h1><p>🕊️ Emotional Temperature: 36.5°C ｜ Stable and Sunny  </p><p>✦</p><h2 id="I-Reflections-on-Obsession"><a href="#I-Reflections-on-Obsession" class="headerlink" title="I. Reflections on Obsession"></a>I. Reflections on Obsession</h2><p>Lately, I’ve developed an almost obsessive pursuit of perfection for my website. The first thing I do after coming home every day is:<br>💻 Open my Computer → 📂 Unfold the development docs → ✨ Launch VSCode<br>It feels like performing some sacred ritual.  </p><p>My father’s support during the website filing process reminded me of what he often says:  </p><blockquote><p>“Before reaching the destination, you must pass through a thorny forest. What you need to do isn’t to avoid it, but to turn the thorns into roses.”  </p></blockquote><p>This has become my development mantra. Whenever I encounter error warnings, this voice echoes in my ears.  </p><p>✦</p><h2 id="II-Countdown-to-Spring-Carnival"><a href="#II-Countdown-to-Spring-Carnival" class="headerlink" title="II. Countdown to Spring Carnival"></a>II. Countdown to Spring Carnival</h2><p><meting-js  server="netease"  type="song"  id="29567193"    mode="circulation"><br></meting-js>  </p><p>🎉 Successfully snagged music festival tickets!<br>Even though I’m caught in the whirlwind of my second year of high school, I know this:<br>The regret of not going now will become a missing puzzle piece I can never fill in the future.<br>The paths of my closest friends and I are like two lines—once we meet at an intersection, we walk together, but as time passes, we inevitably go our separate ways.  </p><p><img src="https://imgse.koxiuqiu.cc/imgse/u/23/2025/03/27/67e55a054d9a7.jpg" alt="Flickering e-ticket"><br>Adults always say we’re impulsive, but they forget:<br>The privilege of youth is turning “recklessness” into “unforgettable memories.”  </p><p>✦</p><h3 id="III-Reflections-on-Obsession"><a href="#III-Reflections-on-Obsession" class="headerlink" title="III. Reflections on Obsession"></a>III. Reflections on Obsession</h3><ul><li><p><strong>Magical Moments in Development</strong><br>Last night, while debugging CSS, a meteor suddenly streaked across the sky outside my window.<br>In a fluster, I made a wish over my code: May all border-radius properties render perfectly.  </p></li><li><p><strong>A Specific Dilemma</strong><br>At 11 p.m. last night,<br>The Twikoo comment module suddenly swallowed all user avatars.<br>Under the combined influence of moonlight and coffee,<br>I finally caught that mischievous bug.<br>(Note: Capitalizing the first letter of a name might make it eat avatars!)</p></li></ul><p>✦</p><h3 id="IV-Countdown-to-Spring-Carnival"><a href="#IV-Countdown-to-Spring-Carnival" class="headerlink" title="IV. Countdown to Spring Carnival"></a>IV. Countdown to Spring Carnival</h3><ul><li><p><strong>The Heart-Pounding Ticket Rush</strong><br>In the final second of the countdown,<br>My fingers rubbed against the screen, generating static sparks.<br>The green glow of the payment success screen reflected in my pupils,<br>Like catching an electronic firefly.  </p></li><li><p><strong>Special Meaning of the Music Festival</strong><br>This time, my favorite musicians will be there.<br>Their songs once reached out like warm tendrils from my earphones<br>During the nights before monthly exams,<br>Catching my falling grades.</p></li></ul><p>✦</p><h3 id="V-Spark-Project"><a href="#V-Spark-Project" class="headerlink" title="V. Spark Project"></a>V. Spark Project</h3><p>During physics class, distracted,<br>The function curves I doodled in my notebook<br>Suddenly became the blueprint for a new website section.<br>Knowledge migrated gloriously between subjects.  </p><ul><li><strong>Concrete Visions of the Future</strong><br>I imagine in some parallel universe,<br>My future self, ten years from now, is subscribing via a time-traveling RSS feed,<br>Reading these naive words I write now,<br>A quantum-entangled smile curling at the corners of their lips.</li></ul><p>Though the current traffic is as faint as starlight in the night sky,<br>I believe that consistently producing quality content will eventually ignite a spark that sets the prairie ablaze.  </p><p>✦  </p><p><img src="https://imgse.koxiuqiu.cc/imgse/u/23/2025/03/27/67e55e7be5530.jpg" alt="pic">  </p><p>✨ <strong>Keep your heart beating—someone will always resonate with you.</strong><br>🎈 <strong>The taste of freedom is the wind eighteen-year-olds most want to catch.</strong>  </p><p>(END)  </p><p>::: warning</p><p>This content is translated from Chinese by a machine and may contain unrealistic information</p><p>:::</p><p>::: </p>]]>
    </content>
    <id>https://www.xscnet.cn/posts/p720250327/</id>
    <link href="https://www.xscnet.cn/posts/p720250327/"/>
    <published>2025-03-26T16:00:00.000Z</published>
    <summary>
      <![CDATA[<p>::: zh-CN</p>
<p>推荐搭配此音乐食用，风味更佳<br><meting-js
	server="netease"
	type="song"
	id="1974443814"
  mode="circulation"><br></meting-js></p>
<]]>
    </summary>
    <title>(三)</title>
    <updated>2025-03-26T16:00:00.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>Mete0r</name>
    </author>
    <category term="日常" scheme="https://www.xscnet.cn/categories/%E6%97%A5%E5%B8%B8/"/>
    <category term="日常" scheme="https://www.xscnet.cn/tags/%E6%97%A5%E5%B8%B8/"/>
    <content>
      <![CDATA[<p>::: zh-CN</p><p>推荐搭配此音乐食用，风味更佳<br><meting-jsserver="netease"type="song"id="1992712131"  mode="circulation"><br></meting-js></p><h2 id="2025-03-26-东北春雪絮语：一个高二学生的建站手记"><a href="#2025-03-26-东北春雪絮语：一个高二学生的建站手记" class="headerlink" title="2025&#x2F;03&#x2F;26 东北春雪絮语：一个高二学生的建站手记"></a>2025&#x2F;03&#x2F;26 东北春雪絮语：一个高二学生的建站手记</h2><h3 id="❄️-三月飞白：意料之外的浪漫"><a href="#❄️-三月飞白：意料之外的浪漫" class="headerlink" title="❄️ 三月飞白：意料之外的浪漫"></a>❄️ 三月飞白：意料之外的浪漫</h3><p>东北的春天总是充满惊喜。窗外，本应春暖花开的三月，却飘起了细碎的雪花。它们轻盈地落在刚刚冒出新绿的枝头，像是冬天临走时留下的最后一场告白。我坐在书桌前，望着这一幕，忍不住拿起手机拍下这难得的画面——三月飞雪<img src="https://imgse.koxiuqiu.cc/imgse/u/23/2025/03/26/67e40077604da.jpg" alt="三月飞雪">  </p><p>或许这就是东北的魅力吧，季节的界限在这里变得模糊，而生活也因此多了一份意料之外的浪漫  </p><hr><h3 id="🌐-博客江湖里的温暖相遇"><a href="#🌐-博客江湖里的温暖相遇" class="headerlink" title="🌐 博客江湖里的温暖相遇"></a>🌐 博客江湖里的温暖相遇</h3><p>最近，我在互联网的某个角落，发现了许多让人心头一暖的项目。  </p><h4 id="开往：博客世界的“友情链接”专列"><a href="#开往：博客世界的“友情链接”专列" class="headerlink" title="开往：博客世界的“友情链接”专列"></a><strong>开往</strong>：博客世界的“友情链接”专列</h4><p><img src="https://www.travellings.cn/assets/logo.gif" alt="开往"><br>这个项目的名字很有趣，叫“开往”，像是一列载着无数独立博客的火车，一站一站地驶向不同的站点。点击它的链接，你会随机跳转到某个参与项目的博客，就像在互联网上漫无目的地旅行，却总能遇见惊喜。  </p><h4 id="十年之约：博客长跑的见证者"><a href="#十年之约：博客长跑的见证者" class="headerlink" title="十年之约：博客长跑的见证者"></a><strong>十年之约</strong>：博客长跑的见证者</h4><p><a href="https://www.foreverblog.cn/">十年之约</a><br>这个项目更让我感动。它鼓励博主们坚持写作至少十年，记录自己的成长与思考。在这个信息爆炸、注意力稀缺的时代，能坚持写十年博客的人，一定是对生活充满热爱的人吧。  </p><p>这些项目让我意识到，互联网不仅仅是大厂流量厮杀的战场，它也可以是普通人记录生活、分享思考的温暖角落。正是这些默默更新的独立博客，让我重新燃起了写作的热情。  </p><hr><h3 id="🎓-高二学生的数字自白：为什么我要坚持写博客？"><a href="#🎓-高二学生的数字自白：为什么我要坚持写博客？" class="headerlink" title="🎓 高二学生的数字自白：为什么我要坚持写博客？"></a>🎓 高二学生的数字自白：为什么我要坚持写博客？</h3><p>作为一个高二学生，我经常被问到类似的问题：  </p><ul><li><strong>“你搞这个网站有什么用？”</strong>  </li><li><strong>“不会耽误学习吗？”</strong>  </li><li><strong>“写这些又没人看，何必浪费时间？”</strong></li></ul><p>我的回答是：<strong>“因为喜欢，所以值得。”</strong>  </p><h4 id="1-每个人都需要一个表达的空间"><a href="#1-每个人都需要一个表达的空间" class="headerlink" title="1. 每个人都需要一个表达的空间"></a><strong>1. 每个人都需要一个表达的空间</strong></h4><p>以前的我，没有写日记的习惯，也很少做总结。但当我偶然在互联网上发现许多独立博客时，我被震撼了——那些博主可能只有几十个读者，但他们依然在认真地记录生活、分享知识。  </p><p>这让我开始思考：<strong>“为什么我不能也拥有一个自己的小天地？”</strong>  </p><h4 id="2-博客是成长的见证"><a href="#2-博客是成长的见证" class="headerlink" title="2. 博客是成长的见证"></a><strong>2. 博客是成长的见证</strong></h4><p>从初中到现在，我的博客经历了多次迭代，每一次都代表着我的成长：  </p><ul><li><strong>第一次尝试</strong>（初二）：用GitHub Pages + Hugo搭建，但最终只留下一个空壳，没有内容。  </li><li><strong>第二次尝试</strong>（高一）：和朋友合租服务器，用Halo框架搭建动态博客，开始写一些技术教程。  </li><li><strong>第三次尝试</strong>（高二）：改用Valaxy静态博客，终于找到了自己喜欢的样子。</li></ul><p>这些经历让我明白，<strong>博客不仅仅是“写文章”的地方，它更像是一个数字实验室，让我不断尝试、失败、再改进。</strong>  </p><h4 id="3-学习与爱好并不冲突"><a href="#3-学习与爱好并不冲突" class="headerlink" title="3. 学习与爱好并不冲突"></a><strong>3. 学习与爱好并不冲突</strong></h4><p>有人觉得“搞网站”会影响学习，但对我来说，它反而是一种放松和锻炼。  </p><ul><li>学习前端知识，让我对计算机更感兴趣。  </li><li>写技术文章，倒逼我去更深入地理解某个问题。  </li><li>管理服务器，锻炼了我的逻辑思维和问题解决能力。</li></ul><p><strong>真正的“耽误学习”，不是因为有爱好，而是因为缺乏时间管理。</strong>  </p><hr><h3 id="🛠️-我的建站进化史：从零到“勉强能用”"><a href="#🛠️-我的建站进化史：从零到“勉强能用”" class="headerlink" title="🛠️ 我的建站进化史：从零到“勉强能用”"></a>🛠️ 我的建站进化史：从零到“勉强能用”</h3><h4 id="1-0-时代：GitHub-Pages-Hugo（初二）"><a href="#1-0-时代：GitHub-Pages-Hugo（初二）" class="headerlink" title="1.0 时代：GitHub Pages + Hugo（初二）"></a><strong>1.0 时代：GitHub Pages + Hugo（初二）</strong></h4><ul><li><strong>动机</strong>：看到别人有个人博客，觉得“很酷”。  </li><li><strong>结果</strong>：搭建完成后，完全不知道该写什么，博客成了“数字废墟”。  </li><li><strong>教训</strong>：光有技术不行，还得有持续输出的动力。</li></ul><h4 id="2-0-时代：家用服务器-Halo（高一）"><a href="#2-0-时代：家用服务器-Halo（高一）" class="headerlink" title="2.0 时代：家用服务器 + Halo（高一）"></a><strong>2.0 时代：家用服务器 + Halo（高一）</strong></h4><ul><li><strong>动机</strong>：和朋友们一起租服务器，顺便搭个博客。  </li><li><strong>改进</strong>：开始写技术文章，比如“如何搭建Minecraft服务器”。  </li><li><strong>问题</strong>：家用服务器网络不稳定，访问体验极差。</li></ul><h4 id="3-0-时代：Valaxy-阿里云（高二）"><a href="#3-0-时代：Valaxy-阿里云（高二）" class="headerlink" title="3.0 时代：Valaxy + 阿里云（高二）"></a><strong>3.0 时代：Valaxy + 阿里云（高二）</strong></h4><ul><li><strong>为什么选择Valaxy？</strong>  <ul><li>小众，但设计极简，符合我的审美。  </li><li>静态博客，访问速度快，适合长期维护。</li></ul></li><li><strong>备案的波折</strong>  <ul><li>第一次提交材料时手忙脚乱，但最终一次性通过。  </li><li>拿到备案号的那一刻，感觉自己的博客终于“合法化”了。</li></ul></li></ul><hr><h3 id="🌌-写在最后：博客对我的意义"><a href="#🌌-写在最后：博客对我的意义" class="headerlink" title="🌌 写在最后：博客对我的意义"></a>🌌 写在最后：博客对我的意义</h3><p>很多人问我：“你的博客有多少人看？”说实话，每天的访问量可能不超过10个。但对我来说，<strong>博客的价值不在于流量，而在于它让我养成了记录和思考的习惯。</strong>  </p><ul><li>它是我<strong>技术成长的笔记本</strong>，记录我踩过的坑和学到的知识。  </li><li>它是我<strong>生活的数字日记</strong>，多年后回看，一定会觉得很有趣。  </li><li>它是我<strong>在互联网上的一个小小据点</strong>，证明我曾在这里留下过足迹。</li></ul><p>所以，我会继续写下去。也许十年后，当我再翻看这篇文章，会笑着对自己说：<strong>“看，当年的你，写得真幼稚啊。”</strong> 但那又怎样呢？至少，我留下了成长的痕迹。  </p><p>（完）</p><p>:::</p><p>::: en</p><h2 id="2025-03-26-Whispers-of-Spring-Snow-in-the-Northeast"><a href="#2025-03-26-Whispers-of-Spring-Snow-in-the-Northeast" class="headerlink" title="2025&#x2F;03&#x2F;26 Whispers of Spring Snow in the Northeast"></a>2025&#x2F;03&#x2F;26 Whispers of Spring Snow in the Northeast</h2><h3 id="❄️-March’s-Flying-Snow"><a href="#❄️-March’s-Flying-Snow" class="headerlink" title="❄️ March’s Flying Snow"></a>❄️ March’s Flying Snow</h3><p>As morning light pierces the thin clouds, delicate snowflakes dance in the air, thick with the breath of spring—yes, this is the Northeast’s unique gift to the season. Beyond the window frame, soft white and tender green engage in a seasonal dialogue, while the clatter of a mechanical keyboard weaves with the whisper of falling snow into poetry indoors and out. <img src="https://imgse.koxiuqiu.cc/imgse/u/23/2025/03/26/67e40077604da.jpg" alt="March Snowfall"> Capturing this unexpected romance, perhaps this is the gentle strike the black earth bestows upon its wanderers.  </p><hr><h3 id="🌐-The-Spark-of-the-Blogging-World"><a href="#🌐-The-Spark-of-the-Blogging-World" class="headerlink" title="🌐 The Spark of the Blogging World"></a>🌐 The Spark of the Blogging World</h3><p>Lately, I’ve encountered many warm presences in the digital wilderness:  </p><ul><li>The train icon of the <strong>“Kaiwang”</strong> project <img src="https://www.travellings.cn/assets/logo.gif" alt="Kaiwang"> carries the faint glow of countless independent sites into the distance.  </li><li>The eternal clock of <strong>“Decade Pact”</strong> <a href="https://www.foreverblog.cn/">Decade Pact</a> bears witness to words transcending time and space.</li></ul><p>These scattered starlights in the galaxy make me, once trudging alone in the desert of traffic, hear again the echoes of keystrokes.  </p><hr><h3 id="🎓-Digital-Confessions-of-a-Seventeen-Year-Old"><a href="#🎓-Digital-Confessions-of-a-Seventeen-Year-Old" class="headerlink" title="🎓 Digital Confessions of a Seventeen-Year-Old"></a>🎓 Digital Confessions of a Seventeen-Year-Old</h3><p>As a high school sophomore, I’m often asked, “Isn’t building websites just a distraction?” My answer lies in the moonlight of late-night coding:  </p><blockquote><p>Every soul deserves a vessel for their passions. The me who once neglected to record found, in the starry expanse of the internet, the quiet bloom of countless independent webmasters—they ask not for traffic, only to await the flowers’ bloom.  </p></blockquote><hr><h3 id="🛠️-The-Evolution-of-Building-a-Site"><a href="#🛠️-The-Evolution-of-Building-a-Site" class="headerlink" title="🛠️ The Evolution of Building a Site"></a>🛠️ The Evolution of Building a Site</h3><h4 id="The-Budding-of-1-0"><a href="#The-Budding-of-1-0" class="headerlink" title="The Budding of 1.0"></a>The Budding of 1.0</h4><p>That year in eighth grade, a maiden site built with GitHub Pages and Hugo lay like an unopened time capsule, silently resting in the depths of a code repository.  </p><h4 id="The-Trials-of-2-0"><a href="#The-Trials-of-2-0" class="headerlink" title="The Trials of 2.0"></a>The Trials of 2.0</h4><p>A home server crowdfunded with friends, a Halo blog built on the PVE system, chronicled the medals of youths conquering technical challenges. Those naive tech notes were our tribute to the open-source world.  </p><h4 id="The-Awakening-of-3-0-Aesthetics"><a href="#The-Awakening-of-3-0-Aesthetics" class="headerlink" title="The Awakening of 3.0 Aesthetics"></a>The Awakening of 3.0 Aesthetics</h4><p>When Valaxy’s minimalist aesthetics flashed into view, it was like meeting a destined digital abode. After hundreds of late-night configuration debugs, cold code was finally woven into an ideal form.  </p><h4 id="∞-Nirvana-in-the-Cloud"><a href="#∞-Nirvana-in-the-Cloud" class="headerlink" title="∞ Nirvana in the Cloud"></a>∞ Nirvana in the Cloud</h4><p>The digital migration from a bedroom server to Alibaba Cloud, the moment the domain was approved—it was as if I heard the fluttering banner of an independent domain planted in virtual soil. Now, the visit counter pulses with an internet manifesto of the Gen Z.  </p><hr><h3 id="🌌-Notes-from-the-Margins-of-Code"><a href="#🌌-Notes-from-the-Margins-of-Code" class="headerlink" title="🌌 Notes from the Margins of Code"></a>🌌 Notes from the Margins of Code</h3><p>When snowflakes drift into CSS stylesheets, when the eighth-grader grows into a high school geek, this cloud-borne corner loading Markdown documents has long transcended technical practice. It is the growth ring of a digital native, the Noah’s Ark of Gen Z against the deluge of information, and a time post office for the future self—believing that one day, looking back, these binary footprints will shimmer into a galaxy.</p><p>::: warning</p><p>This content is translated from Chinese by a machine and may contain unrealistic information</p><p>:::</p><p>::: </p>]]>
    </content>
    <id>https://www.xscnet.cn/posts/p620250325/</id>
    <link href="https://www.xscnet.cn/posts/p620250325/"/>
    <published>2025-03-24T16:00:00.000Z</published>
    <summary>
      <![CDATA[<p>::: zh-CN</p>
<p>推荐搭配此音乐食用，风味更佳<br><meting-js
	server="netease"
	type="song"
	id="1992712131"
  mode="circulation"><br></meting-js></p>
<]]>
    </summary>
    <title>（二）</title>
    <updated>2025-03-24T16:00:00.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>Mete0r</name>
    </author>
    <category term="日常" scheme="https://www.xscnet.cn/categories/%E6%97%A5%E5%B8%B8/"/>
    <category term="日常" scheme="https://www.xscnet.cn/tags/%E6%97%A5%E5%B8%B8/"/>
    <content>
      <![CDATA[<p>::: zh-CN</p><h2 id="高二下学期开学一个月了"><a href="#高二下学期开学一个月了" class="headerlink" title="高二下学期开学一个月了"></a>高二下学期开学一个月了</h2><p>一转眼，高二下学习已经开学一个月了，我想象中的那种繁忙没有出现，只是学习进度在加快<br>我甚至还有闲心上课摸鱼（bushi<br>其实我打小对学习我自己不感兴趣的知识是犯抵触心理的，但是我现在似乎可以听进去一点了！这是一个进步呢</p><h2 id="未来"><a href="#未来" class="headerlink" title="未来"></a>未来</h2><p>最近在和同学唠嗑的过程中谈到这个问题了，我问了一圈，好像大家都不知道毕业之后自己要干嘛，都不知道自己想要考到哪个学校<br>我觉得我虽然有梦想的院校，但是是不是应该为其努力一下<br>我的母亲每次问我用了多少分力去学习，我都会想一想所40%-50%<br>但是我心里很清楚，可能我连5%的力气都没用<br>这是我的不足，总是会把自己泡在一个完美的环境里去麻痹自己，却不想解决问题</p><h2 id="博客"><a href="#博客" class="headerlink" title="博客"></a>博客</h2><p>博客功能基本完成了开发，十分感谢帮助我完成一些功能的博友们，大家人都超级好捏<del>ヾ(≧▽≦*)o</del><br>如果以后有什么其他的Bug再被发现，可以在文章底下为我留言，我都会在我有时间的时候及时修复的   谢啦!!☆⌒(*＾-゜)v</p><h2 id="吐槽"><a href="#吐槽" class="headerlink" title="吐槽"></a>吐槽</h2><p>感觉我是时候应该吐槽一下我们这个高中了<br>我初中并没有好好的学习，导致我现在上了一所不太好的普通高中（虽然有些人学了三年还是考上了职高，但是我三年没学考上了普高）<br>我们这个小县城，总共三所普高，一个重点，剩下两个就是我们学校和另一所普高了<br>这个教育体系还是应验了那一句话，越差的学校管的东西越多<br>我们学校教育水平不算好，现在我是高二下学期，每天上学都让我们穿校服才能进校园ಠ_ಠ，我不理解为什么这个校服就这么重要呢？领导是真的想规范我们吗，还是为了满足自己的管理和控制欲望呢？<br>暂且先不说我们高二，浅浅的谈论一下现在的高三，还有六十多天就要高考了，这个学校里的领导还是去抓头发和校服这些有的没的，领导是真的想让这个学校好起来了？还是就是为了满足学生都听话这个面子工程呢？</p><p>:::</p><p>::: en</p><h2 id="One-Month-into-the-Second-Semester-of-Senior-High-School"><a href="#One-Month-into-the-Second-Semester-of-Senior-High-School" class="headerlink" title="One Month into the Second Semester of Senior High School"></a>One Month into the Second Semester of Senior High School</h2><p>In the blink of an eye, it’s already been a month since the start of the second semester of my senior high school year. The busyness I imagined hasn’t really shown up, but the pace of learning has definitely sped up.<br>I even have the leisure to slack off during class (just kidding).<br>Actually, since I was young, I’ve always had a resistance to learning things I’m not interested in, but now it seems I can listen a bit more! This is progress, isn’t it?</p><h2 id="The-Future"><a href="#The-Future" class="headerlink" title="The Future"></a>The Future</h2><p>Recently, while chatting with classmates, we touched on this topic. I asked around, and it seems like no one really knows what they want to do after graduation or which school they want to get into.<br>I think I have a dream school in mind, but maybe I should put in some effort towards it.<br>Every time my mother asks me how much effort I’m putting into my studies, I think about it and say 40%-50%.<br>But deep down, I know I might not even be putting in 5% of my effort.<br>This is my shortcoming; I always immerse myself in a perfect environment to numb myself, instead of wanting to solve the problem.</p><h2 id="Blog"><a href="#Blog" class="headerlink" title="Blog"></a>Blog</h2><p>The blog functionality is basically complete. I’m extremely grateful to the blogger friends who helped me with some features. Everyone is super nice<del>ヾ(≧▽≦*)o</del><br>If any other bugs are discovered in the future, you can leave me a message under the article, and I’ll fix them as soon as I have time. Thanks!!☆⌒(*＾-゜)v</p><h2 id="Rant"><a href="#Rant" class="headerlink" title="Rant"></a>Rant</h2><p>I feel it’s time for me to rant about our high school.<br>I didn’t study hard in middle school, which led me to attend a not-so-great regular high school (although some people studied for three years and still ended up in vocational schools, I managed to get into a regular high school without studying for three years).<br>In our small county town, there are three regular high schools in total: one key school, and the other two are our school and another regular high school.<br>The education system here still proves the saying, the worse the school, the more things they control.<br>Our school’s education level isn’t great. Now that I’m in the second semester of my senior high school year, we’re required to wear uniforms to enter the campus every day ಠ_ಠ. I don’t understand why the uniform is so important. Do the leaders really want to regulate us, or is it to satisfy their own management and control desires?<br>Not to mention our senior year, let’s briefly talk about the current senior three students. With just over sixty days left before the college entrance exam, the school leaders are still focusing on trivial things like hair and uniforms. Do the leaders really want the school to improve, or is it just to satisfy the facade of having obedient students?</p><p>::: warning</p><p>This content is translated from Chinese by a machine and may contain unrealistic information</p><p>:::</p>]]>
    </content>
    <id>https://www.xscnet.cn/posts/p520250322/</id>
    <link href="https://www.xscnet.cn/posts/p520250322/"/>
    <published>2025-03-21T16:00:00.000Z</published>
    <summary>
      <![CDATA[<p>::: zh-CN</p>
<h2 id="高二下学期开学一个月了"><a href="#高二下学期开学一个月了" class="headerlink" title="高二下学期开学一个月了"></a>高二下学期开学一个月了</h2><p>一转眼，高二下学习已经开学一个月了]]>
    </summary>
    <title>（一）</title>
    <updated>2025-03-21T16:00:00.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>Mete0r</name>
    </author>
    <category term="随笔" scheme="https://www.xscnet.cn/categories/%E9%9A%8F%E7%AC%94/"/>
    <category term="随笔" scheme="https://www.xscnet.cn/tags/%E9%9A%8F%E7%AC%94/"/>
    <content>
      <![CDATA[<p>::: zh-CN</p><h2 id="浅谈我对个人博客的看法"><a href="#浅谈我对个人博客的看法" class="headerlink" title="浅谈我对个人博客的看法"></a>浅谈我对个人博客的看法</h2><h3 id="宇宙级免责声明：我说的内容仅表达我自己的看法，我尊重任何人的劳动成果，尊重任何人的选择"><a href="#宇宙级免责声明：我说的内容仅表达我自己的看法，我尊重任何人的劳动成果，尊重任何人的选择" class="headerlink" title="宇宙级免责声明：我说的内容仅表达我自己的看法，我尊重任何人的劳动成果，尊重任何人的选择"></a>宇宙级免责声明：我说的内容仅表达我自己的看法，我尊重任何人的劳动成果，尊重任何人的选择</h3><p>我认为一个人的个人博客，最重要的是记录自己的日常吧，感觉过多的进行技术类分享，不会有特别多人在博客里过多的浏览文章，反而是浏览完自己需要的文章之后就退出了<br>对我来说，我的个人博客已经“似”过一个了，其实在我初中的时候就有搭建一个记录自己的个人博客，但是因为各种资金问题就不了了之了（其实github上现在还存在那个博客）<br>对于我现在的博客，我的初衷没有变，我始终坚持记录我的日常，月总结<br>但是不代表我不分享一些技术的文章啦，有一些我觉得有意思有挑战的技术博我也会分享的<br>但是我的博客肯定大部分时间就是记录我的生活了<br>我想知道，在五年，十年之后再去看自己以前的博客是什么感觉，是不是可以通过自己以前写的文章去回忆起那段时光</p><p>:::</p><p>::: en</p><h2 id="My-Thoughts-on-Personal-Blogging"><a href="#My-Thoughts-on-Personal-Blogging" class="headerlink" title="My Thoughts on Personal Blogging"></a>My Thoughts on Personal Blogging</h2><h3 id="Universal-Disclaimer-The-content-I-express-is-solely-my-own-opinion-I-respect-everyone’s-labor-and-choices"><a href="#Universal-Disclaimer-The-content-I-express-is-solely-my-own-opinion-I-respect-everyone’s-labor-and-choices" class="headerlink" title="Universal Disclaimer: The content I express is solely my own opinion. I respect everyone’s labor and choices."></a>Universal Disclaimer: The content I express is solely my own opinion. I respect everyone’s labor and choices.</h3><p>I believe the most important aspect of a personal blog is to record one’s daily life. It seems that excessive sharing of technical content doesn’t attract many people to browse extensively on a blog; instead, they tend to leave after finding the information they need.<br>For me, I’ve already had a personal blog before. Actually, I set up a blog to record my life back in middle school, but it fell by the wayside due to various funding issues (in fact, that blog still exists on GitHub).<br>For my current blog, my original intention hasn’t changed. I still insist on recording my daily life and monthly summaries.<br>However, this doesn’t mean I won’t share some technical articles. I will share some technical posts that I find interesting and challenging.<br>But most of the time, my blog will be about recording my life.<br>I wonder what it will feel like to look back at my blog five or ten years from now. Will I be able to recall those times through the articles I wrote back then?</p><p>::: warning</p><p>This content is translated from Chinese by a machine and may contain unrealistic information</p><p>:::</p><p>::: </p>]]>
    </content>
    <id>https://www.xscnet.cn/posts/p4/</id>
    <link href="https://www.xscnet.cn/posts/p4/"/>
    <published>2024-12-21T16:00:00.000Z</published>
    <summary>
      <![CDATA[<p>::: zh-CN</p>
<h2 id="浅谈我对个人博客的看法"><a href="#浅谈我对个人博客的看法" class="headerlink" title="浅谈我对个人博客的看法"></a>浅谈我对个人博客的看法</h2><h3 id="宇宙级免责声明：我说的内]]>
    </summary>
    <title>我对于个人博客的看法</title>
    <updated>2024-12-21T16:00:00.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>Mete0r</name>
    </author>
    <category term="更新" scheme="https://www.xscnet.cn/categories/%E6%9B%B4%E6%96%B0/"/>
    <category term="更新" scheme="https://www.xscnet.cn/tags/%E6%9B%B4%E6%96%B0/"/>
    <category term="理想" scheme="https://www.xscnet.cn/tags/%E7%90%86%E6%83%B3/"/>
    <category term="学校" scheme="https://www.xscnet.cn/tags/%E5%AD%A6%E6%A0%A1/"/>
    <content>
      <![CDATA[<p>::: zh-CN</p><h2 id="我的博客基本竣工啦！"><a href="#我的博客基本竣工啦！" class="headerlink" title="我的博客基本竣工啦！"></a>我的博客基本竣工啦！</h2><p>北京时间23点04分，我刚刚上完外教课，有点累，但是还是掩饰不住我内心的喜悦<br>虽然最近一些烦心的事情比较多，但是在这一刻终究还是开心的<br>最近在学校里好多烦心事</p><h2 id="学校的烦心事"><a href="#学校的烦心事" class="headerlink" title="学校的烦心事"></a>学校的烦心事</h2><ol><li>这个破学校每天要求我们穿那个丑的要死的校服，每周一还要检查我们的头发是否合格，不合格的话直接下达处分通知书，这个是我最不理解的条例，不知道一个学校不抓学生的学习和纪律，反而去抓这些有的没的是什么意思</li><li>每天都要背诵一些语文的段落，其实这个可以理解，无非是老师想抓一下我们的学习，但是这是否是对像我们这些有自己的学习节奏的人的一种冒犯呢，其实我不反对去抓背诵，但是我一直有自己的学习节奏，如果有人在背后推着我让我去背一些东西，我反而不太想背</li><li>到了高二下学期，虽然学校都响应国家政策把上学时间延后、放学时间提早，但是学习的内容是不变的，对于现在学习的，尤其是物理这个学科，我感觉学的很累，这个学科跳跃性太强了，前一阵还在学电学，最近就开始简谐运动了，说实话我的力学真的很差T0T</li></ol><h5 id="不过！学校的老师对我都是很好的"><a href="#不过！学校的老师对我都是很好的" class="headerlink" title="不过！学校的老师对我都是很好的"></a>不过！学校的老师对我都是很好的</h5><h2 id="一些小小的愿望"><a href="#一些小小的愿望" class="headerlink" title="一些小小的愿望"></a>一些小小的愿望</h2><ol><li>把我的博客网站进一步完善，争取自己有一个小额的稳定收入，去租一台阿里云的ECS，把我博客网站的ICP备案完善好，这样就是国内的正规网站啦！ ╰(<em>°▽°</em>)╯</li><li>不知不觉已经开始长胡子了捏，我得着手考虑一下买刮胡刀的事情了 ಠ_ಠ</li><li>突然不知道是什么一个契机，我感觉我有点能沉浸到学习中了，学习好像不再是以前那种让人难受的感觉了，虽然学习之后还是很累，但是感觉好像有一点点的满足感，争取之后更加努力</li><li>最近和朋友唠嗑突然唠叨他们班级自己做了一套卡牌，我们一拍即合准备把这个卡牌玩法开发成一个网站，还敬请期待啦 (～￣▽￣)～(～￣▽￣)～</li><li>我的博客其实可以接入谷歌广告来获得收益的，但是我觉得那样就破坏了个人博客的初衷了，我喜欢一个干净清爽的博客，所以这个收入方案被我自己提出自己否决啦 (^&#x2F;&#x2F;&#x2F;^)</li><li>争取提高自己的情商吧，我的情商好低，不喜欢过多交流&#x2F;_ \</li><li>还是想考上一个好学校，西安电子科技大学不错，但是分数有点高，努力一把试试吧<br>:::</li></ol><p>::: en</p><h2 id="My-blog-is-almost-completed"><a href="#My-blog-is-almost-completed" class="headerlink" title="My blog is almost completed!"></a>My blog is almost completed!</h2><p>At 23:04 Beijing time. I just finished a foreign teaching class and I’m a bit tired, but I can’t hide the joy in my heart<br>Although there have been a lot of troubles lately, I am still happy at this moment<br>I’ve been having a lot of trouble at school lately</p><h2 id="T-he-school’s-troubles"><a href="#T-he-school’s-troubles" class="headerlink" title="T he school’s troubles"></a>T he school’s troubles</h2><ol><li>This rundown school requires us to wear that ugly school uniform every day, and every Monday we have to check if our hair is qualified. If it is not qualified, a disciplinary notice will be issued directly. This is the regulation that I don’t understand the most. I don’t know what it means for a school not to focus on students’ learning and discipline, but to focus on these things</li><li>I have to memorize some Chinese paragraphs every day, which is understandable. It’s just that the teacher wants to catch up with our learning, but is it an offense to those of us who have our own learning pace? Actually, I don’t object to memorizing, but I have always had my own learning pace. If someone pushes me behind my back to memorize something, I don’t really want to memorize it<br>In the second semester of my sophomore year, although the school responded to national policies by extending the start time and ending time earlier, the content of my studies remained the same. For the subject I am currently studying, especially physics, I feel very tired. This subject has a strong jumping ability. I was studying electricity a while ago, but recently I have started harmonic motion. To be honest, my mechanics is really poor</li></ol><h5 id="However-The-teachers-at-school-are-all-very-kind-to-me"><a href="#However-The-teachers-at-school-are-all-very-kind-to-me" class="headerlink" title="However! The teachers at school are all very kind to me"></a>However! The teachers at school are all very kind to me</h5><h2 id="Some-small-wishes"><a href="#Some-small-wishes" class="headerlink" title="Some small wishes"></a>Some small wishes</h2><ol><li>Further improve my blog website and strive to have a small and stable income. Rent an Alibaba Cloud ECS and complete the ICP registration of my blog website. This will make it a legitimate website in China! ╰(<em>°▽°</em>)╯</li><li>Unconsciously, I have started to grow a beard. I need to start considering buying a razor ಠ_ಠ</li><li>Suddenly, I don’t know what kind of opportunity it was, but I feel like I can immerse myself in learning. Learning seems to be no longer the uncomfortable feeling I used to have. Although I am still tired after studying, I feel a little satisfied. After striving for it, I will work harder</li><li>Recently, I was chatting with a friend and suddenly talked about how their class made their own set of cards. We immediately agreed to develop this card gameplay into a website. Stay tuned(～￣▽￣)～(～￣▽￣)～</li><li>My blog can actually generate revenue by integrating Google advertising, but I think that would undermine the original intention of my personal blog. I like a clean and refreshing blog, so I proposed and rejected this revenue plan myself (^&#x2F;&#x2F;^)</li><li>Strive to improve your emotional intelligence. My emotional intelligence is very low and I don’t like to communicate too much&#x2F;_ \</li><li>I still want to get into a good school. Xi’an University of Electronic Science and Technology is good, but the score is a bit high. Try to work hard and give it a try</li></ol><p>::: warning</p><p>This content is translated from Chinese by a machine and may contain unrealistic information</p><p>:::</p>]]>
    </content>
    <id>https://www.xscnet.cn/posts/p3/</id>
    <link href="https://www.xscnet.cn/posts/p3/"/>
    <published>2024-06-17T16:00:00.000Z</published>
    <summary>
      <![CDATA[<p>::: zh-CN</p>
<h2 id="我的博客基本竣工啦！"><a href="#我的博客基本竣工啦！" class="headerlink" title="我的博客基本竣工啦！"></a>我的博客基本竣工啦！</h2><p>北京时间23点04分，我刚刚上完外教课，有]]>
    </summary>
    <title>博客竣工!</title>
    <updated>2024-06-17T16:00:00.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>Mete0r</name>
    </author>
    <category term="更新" scheme="https://www.xscnet.cn/categories/%E6%9B%B4%E6%96%B0/"/>
    <category term="更新" scheme="https://www.xscnet.cn/tags/%E6%9B%B4%E6%96%B0/"/>
    <content>
      <![CDATA[<p>::: zh-CN</p><h2 id="重大更新-我的博客全面换为Valaxy框架"><a href="#重大更新-我的博客全面换为Valaxy框架" class="headerlink" title="重大更新!我的博客全面换为Valaxy框架!"></a>重大更新!我的博客全面换为Valaxy框架!</h2><h5 id="Q1-原先的博客是不能访问了吗？"><a href="#Q1-原先的博客是不能访问了吗？" class="headerlink" title="Q1:原先的博客是不能访问了吗？"></a>Q1:原先的博客是不能访问了吗？</h5><p>A1:当然不是！我在这P个超链接<a href="https://blog.xscnas.top:9088/">点我可以直接回到原先的博客，但不会继续更新</a></p><h5 id="Q2-不都是博客吗，费这么大劲，有什么区别？"><a href="#Q2-不都是博客吗，费这么大劲，有什么区别？" class="headerlink" title="Q2:不都是博客吗，费这么大劲，有什么区别？"></a>Q2:不都是博客吗，费这么大劲，有什么区别？</h5><p>A2:他俩固然不一样<br>   最初使用的博客是Halo框架，有时候加载一些图片资源的时候会非常慢，还非常费我的服务器带宽，这对于我的钱包和用户的体验都是极差的<br>   而现在使用的Valaxy下一代静态博客框架，所有页面都是静态资源，相当于图片只需要一串网址就可以从图床上拉取，不知道方便了多少~~~</p><h5 id="Q3-用了这么大劲去搞这个博客，有什么用？"><a href="#Q3-用了这么大劲去搞这个博客，有什么用？" class="headerlink" title="Q3:用了这么大劲去搞这个博客，有什么用？"></a>Q3:用了这么大劲去搞这个博客，有什么用？</h5><p>A3:我打算以后每个月或者临时起意，都可以在我这个博客上写一些文章，来记录我的生活；而且我用我自己的毕生所学去改这个博客的代码，也是对我的一个考验和提升</p><h5 id="Q4-煮波煮波，你的评论区为什么发不出去评论啊？"><a href="#Q4-煮波煮波，你的评论区为什么发不出去评论啊？" class="headerlink" title="Q4:煮波煮波，你的评论区为什么发不出去评论啊？"></a>Q4:煮波煮波，你的评论区为什么发不出去评论啊？</h5><p>A4:我现在上高中，学习有点忙，我虽然把评论区的代码打开了，但是评论的数据库我还没有构建<br>   而且这个评论系统我还没有看明白开发文档，所以现在只能通过给我发送邮件的形式来留言啦~</p><h3 id="最后的最后，感谢你的阅读，让我们一起见证我的博客慢慢的充实和成长吧！"><a href="#最后的最后，感谢你的阅读，让我们一起见证我的博客慢慢的充实和成长吧！" class="headerlink" title="最后的最后，感谢你的阅读，让我们一起见证我的博客慢慢的充实和成长吧！"></a>最后的最后，感谢你的阅读，让我们一起见证我的博客慢慢的充实和成长吧！</h3><p>我的博客还有很多不完美的地方，如果在使用中发现或者有什么更好的建议，可以通过网站起始的邮箱联系我<br>:::<br>::: en</p><h2 id="Major-update-My-blog-has-completely-switched-to-the-Valaxy-framework"><a href="#Major-update-My-blog-has-completely-switched-to-the-Valaxy-framework" class="headerlink" title="Major update! My blog has completely switched to the Valaxy framework!"></a>Major update! My blog has completely switched to the Valaxy framework!</h2><h5 id="Q1-Is-the-original-blog-inaccessible"><a href="#Q1-Is-the-original-blog-inaccessible" class="headerlink" title="Q1: Is the original blog inaccessible?"></a>Q1: Is the original blog inaccessible?</h5><p>A1: Of course not! I can go back to <a href="https://blog.xscnas.top:9088/">my original blog directly by clicking on these</a> P hyperlinks, but it will not continue to update</p><h5 id="Q2-Aren’t-they-all-blogs-With-so-much-effort-what’s-the-difference"><a href="#Q2-Aren’t-they-all-blogs-With-so-much-effort-what’s-the-difference" class="headerlink" title="Q2: Aren’t they all blogs? With so much effort, what’s the difference?"></a>Q2: Aren’t they all blogs? With so much effort, what’s the difference?</h5><p>A2: They are certainly different<br>The blog I initially used was the Halo framework, which sometimes loaded some image resources very slowly and consumed a lot of bandwidth on my server. This was extremely poor for both my wallet and the user experience<br>The Valaxy next-generation static blog framework currently in use has all pages as static resources, which means that images can be pulled from the image bed with just a string of URLs, making it much more convenient~~~</p><h5 id="Q3-What’s-the-use-of-putting-so-much-effort-into-creating-this-blog"><a href="#Q3-What’s-the-use-of-putting-so-much-effort-into-creating-this-blog" class="headerlink" title="Q3: What’s the use of putting so much effort into creating this blog?"></a>Q3: What’s the use of putting so much effort into creating this blog?</h5><p>A3: I plan to write articles on my blog every month or on a whim to document my life; And using my lifelong learning to modify the code of this blog is also a test and improvement for me</p><h5 id="Q4-Boiling-Waves-Boiling-Waves-why-can’t-you-post-comments-in-your-comment-section"><a href="#Q4-Boiling-Waves-Boiling-Waves-why-can’t-you-post-comments-in-your-comment-section" class="headerlink" title="Q4: Boiling Waves Boiling Waves, why can’t you post comments in your comment section?"></a>Q4: Boiling Waves Boiling Waves, why can’t you post comments in your comment section?</h5><p>A4: I am currently in high school and a bit busy with my studies. Although I have opened the code for the comment section, I have not yet built a database for the comments<br>And I haven’t figured out the development documentation for this comment system yet, so now I can only leave a message by sending me an email~</p><h3 id="Finally-thank-you-for-reading-Let’s-witness-the-gradual-enrichment-and-growth-of-my-blog-together"><a href="#Finally-thank-you-for-reading-Let’s-witness-the-gradual-enrichment-and-growth-of-my-blog-together" class="headerlink" title="Finally, thank you for reading. Let’s witness the gradual enrichment and growth of my blog together!"></a>Finally, thank you for reading. Let’s witness the gradual enrichment and growth of my blog together!</h3><p>My blog still has many imperfections. If you find any better suggestions during use, you can contact me through the email at the beginning of the website</p><p>::: warning</p><p>This content is translated from Chinese by a machine and may contain unrealistic information</p><p>:::</p>]]>
    </content>
    <id>https://www.xscnet.cn/posts/p2/</id>
    <link href="https://www.xscnet.cn/posts/p2/"/>
    <published>2024-02-15T16:00:00.000Z</published>
    <summary>
      <![CDATA[<p>::: zh-CN</p>
<h2 id="重大更新-我的博客全面换为Valaxy框架"><a href="#重大更新-我的博客全面换为Valaxy框架" class="headerlink" title="重大更新!我的博客全面换为Valaxy框架!"></a>重大更新!]]>
    </summary>
    <title>重大更新!我的博客全面换为Valaxy框架!</title>
    <updated>2024-02-15T16:00:00.000Z</updated>
  </entry>
</feed>
