<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>万物之时</title>
  
  <subtitle>万物之时的小站</subtitle>
  <link href="https://blog.126330.xyz/atom.xml" rel="self"/>
  
  <link href="https://blog.126330.xyz/"/>
  <updated>2026-10-07T02:00:00.000Z</updated>
  <id>https://blog.126330.xyz/</id>
  
  <author>
    <name>万物之时</name>
    
  </author>
  
  <generator uri="https://hexo.io/">Hexo</generator>
  
  <entry>
    <title>Echo 主题使用指南（六）：侧栏组件、页脚与常见问题</title>
    <link href="https://blog.126330.xyz/posts/7f78826f/"/>
    <id>https://blog.126330.xyz/posts/7f78826f/</id>
    <published>2026-10-06T03:30:00.000Z</published>
    <updated>2026-10-07T02:00:00.000Z</updated>
    
    <content type="html"><![CDATA[<span id="more"></span><h2 id="左栏组件"><a href="#左栏组件" class="headerlink" title="左栏组件"></a>左栏组件</h2><h3 id="个人名片"><a href="#个人名片" class="headerlink" title="个人名片"></a>个人名片</h3><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">profile:</span></span><br><span class="line">  <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">avatar:</span> <span class="string">/images/avatar.jpg</span></span><br><span class="line">  <span class="attr">avatar_size:</span> <span class="string">72px</span></span><br><span class="line">  <span class="attr">name:</span> <span class="string">Echo</span></span><br><span class="line">  <span class="attr">title:</span> <span class="string">万物之时</span></span><br><span class="line">  <span class="attr">title_icon:</span> <span class="string">/favicon.png</span></span><br><span class="line">  <span class="attr">badge:</span> <span class="string">LV.5</span></span><br><span class="line">  <span class="attr">badge_title:</span> <span class="string">潜水爱好者</span></span><br><span class="line">  <span class="attr">bio:</span> <span class="string">分享影视、游戏与各类资源，也折腾博客和</span> <span class="string">Mod</span> <span class="string">汉化。</span></span><br><span class="line">  <span class="attr">social_title:</span> <span class="string">找到我</span></span><br><span class="line">  <span class="attr">icon_size:</span> <span class="number">19</span></span><br><span class="line">  <span class="attr">social:</span></span><br><span class="line">    <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">github</span></span><br><span class="line">      <span class="attr">url:</span> <span class="string">https://github.com/</span></span><br><span class="line">      <span class="attr">title:</span> <span class="string">GitHub</span></span><br><span class="line">    <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">bilibili</span></span><br><span class="line">      <span class="attr">url:</span> <span class="string">https://space.bilibili.com/</span></span><br><span class="line">      <span class="attr">title:</span> <span class="string">哔哩哔哩</span></span><br><span class="line">    <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">telegram</span></span><br><span class="line">      <span class="attr">url:</span> <span class="string">https://t.me/</span></span><br><span class="line">      <span class="attr">title:</span> <span class="string">Telegram</span></span><br><span class="line">    <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">mail</span></span><br><span class="line">      <span class="attr">url:</span> <span class="string">mailto:you@example.com</span></span><br><span class="line">      <span class="attr">title:</span> <span class="string">邮箱</span></span><br><span class="line">    <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">rss</span></span><br><span class="line">      <span class="attr">url:</span> <span class="string">/atom.xml</span></span><br><span class="line">      <span class="attr">title:</span> <span class="string">RSS</span></span><br></pre></td></tr></table></figure><p><strong>外观类配置项</strong></p><table><thead><tr><th>配置项</th><th>说明</th><th>默认值</th></tr></thead><tbody><tr><td><code>avatar</code></td><td>头像图片路径</td><td>主题自带占位头像</td></tr><tr><td><code>avatar_size</code></td><td>头像直径，接受 <code>72px</code> 这类带单位值，或直接写数字 <code>72</code>（按 px 处理）</td><td><code>64px</code></td></tr><tr><td><code>title</code></td><td>头像下方的主标题（如昵称、站名）</td><td>空</td></tr><tr><td><code>title_icon</code></td><td>主标题左侧的小图标，常配站点 <code>favicon</code> 使用</td><td>空</td></tr><tr><td><code>badge</code></td><td>头像右下角角标文字</td><td>不显示</td></tr><tr><td><code>badge_title</code></td><td>角标的鼠标悬停提示</td><td>空</td></tr><tr><td><code>bio</code></td><td>简介文字；写成 <code>bio: false</code> 或留空可整段隐藏</td><td>取站点 <code>description</code></td></tr><tr><td><code>social_title</code></td><td>社交图标区上方的小标题</td><td>空</td></tr><tr><td><code>icon_size</code></td><td>社交图标直径（数字，按 px 处理）</td><td><code>19</code></td></tr></tbody></table><p><strong>社交链接</strong></p><ul><li><code>social[].name</code> 决定图标，可用：<code>github</code> &#x2F; <code>bilibili</code> &#x2F; <code>telegram</code> &#x2F; <code>mail</code> &#x2F; <code>rss</code> &#x2F; <code>link</code>。</li><li><code>social[].title</code> 同时作为图标的 <code>title</code> 与无障碍标签，鼠标悬停可见。</li><li><code>avatar</code> 加载失败时会自动回退到主题自带的占位头像。</li><li>不写 <code>name</code> 和 <code>bio</code> 时，会回退到站点 <code>_config.yml</code> 的 <code>author</code> 和 <code>description</code>。</li><li>想省掉社交区，直接把 <code>social</code> 整体注释掉即可，标题和分隔线会一并隐藏。</li></ul><blockquote><p>头像与角标尺寸用的是 CSS 变量（<code>--avatar-size</code> &#x2F; <code>--icon-size</code>）实现，因此改动后无需改动任何样式文件。</p></blockquote><h3 id="音乐播放器"><a href="#音乐播放器" class="headerlink" title="音乐播放器"></a>音乐播放器</h3><p>单曲模式：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">music:</span></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">音乐</span></span><br><span class="line">  <span class="attr">src:</span> <span class="string">&#x27;https://example.com/song.mp3&#x27;</span></span><br><span class="line">  <span class="attr">name:</span> <span class="string">曲目名</span></span><br><span class="line">  <span class="attr">artist:</span> <span class="string">艺术家</span></span><br><span class="line">  <span class="attr">cover:</span> <span class="string">/images/covers/hexo-theme.svg</span></span><br></pre></td></tr></table></figure><p>歌单模式（填了 <code>playlist</code> 就优先用它）：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">music:</span></span><br><span class="line">  <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">playlist:</span></span><br><span class="line">    <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">曲目一</span></span><br><span class="line">      <span class="attr">artist:</span> <span class="string">歌手</span></span><br><span class="line">      <span class="attr">src:</span> <span class="string">https://example.com/a.mp3</span></span><br><span class="line">      <span class="attr">cover:</span> <span class="string">/images/covers/hexo-theme.svg</span></span><br><span class="line">    <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">曲目二</span></span><br><span class="line">      <span class="attr">artist:</span> <span class="string">歌手</span></span><br><span class="line">      <span class="attr">src:</span> <span class="string">https://example.com/b.mp3</span></span><br></pre></td></tr></table></figure><p>播放器支持播放&#x2F;暂停、上一首、下一首、随机、循环和音量。</p><blockquote><p>浏览器通常禁止自动播放，需要访客手动点一次播放键。<br><code>src</code> 必须是<strong>直链</strong>（以 <code>.mp3</code> &#x2F; <code>.m4a</code> 结尾），网盘分享页不能直接播放。</p></blockquote><h3 id="分类与标签"><a href="#分类与标签" class="headerlink" title="分类与标签"></a>分类与标签</h3><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">category:</span></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">分类</span></span><br><span class="line">  <span class="attr">limit:</span> <span class="number">8</span>      <span class="comment"># 最多显示几个，0 表示不限</span></span><br><span class="line"></span><br><span class="line"><span class="attr">tags:</span></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">标签</span></span><br><span class="line">  <span class="attr">limit:</span> <span class="number">16</span></span><br></pre></td></tr></table></figure><p>显示顺序按内容数量从多到少，数量为 0 的分类不会出现。</p><p>左栏分类是<strong>跟随页面上下文</strong>的：</p><ul><li><strong>首页、归档页</strong>：显示全部分类；</li><li><strong>文章页</strong>（文章总页、文章详情页、文章分类页）：只显示含有文章的分类；</li><li><strong>资源页</strong>（资源总页、类型页、资源详情页）：只显示含有资源帖的分类。</li></ul><p>这样文章读者不会被资源分类干扰，资源访客也看不到纯文章分类，两侧列表都更短、更聚焦。</p><h2 id="右栏组件"><a href="#右栏组件" class="headerlink" title="右栏组件"></a>右栏组件</h2><h3 id="站点统计"><a href="#站点统计" class="headerlink" title="站点统计"></a>站点统计</h3><figure class="highlight yaml"><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="attr">stats:</span></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">统计</span></span><br><span class="line">  <span class="attr">show:</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">posts</span>        <span class="comment"># 文章数</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">categories</span>   <span class="comment"># 分类数</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">tags</span>         <span class="comment"># 标签数</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">words</span>        <span class="comment"># 总字数</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">runtime</span>      <span class="comment"># 运行时长</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">updated</span>      <span class="comment"># 最后活动</span></span><br><span class="line">  <span class="attr">since:</span> <span class="number">2024-01-01</span></span><br></pre></td></tr></table></figure><p><code>show</code> 数组控制显示哪些行以及顺序，删掉哪一项就不显示哪一项。<br>运行时长从 <code>since</code> 开始计算。</p><h3 id="日历"><a href="#日历" class="headerlink" title="日历"></a>日历</h3><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">calendar:</span></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">日历</span></span><br></pre></td></tr></table></figure><p>日历支持翻月，当天有描边标记，<strong>有文章的日期会显示小圆点</strong>，<br>下方列出最近更新的 3 篇内容。</p><h3 id="站点信息"><a href="#站点信息" class="headerlink" title="站点信息"></a>站点信息</h3><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">siteinfo:</span></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">站点信息</span></span><br><span class="line">  <span class="attr">build:</span> <span class="string">Hexo</span></span><br><span class="line">  <span class="attr">version:</span> <span class="string">Echo</span> <span class="number">1.0</span></span><br><span class="line">  <span class="attr">license:</span> <span class="string">CC</span> <span class="string">BY-NC-SA</span> <span class="number">4.0</span></span><br><span class="line">  <span class="attr">domain:</span> <span class="string">&#x27;&#x27;</span>      <span class="comment"># 留空则使用站点 url</span></span><br></pre></td></tr></table></figure><h2 id="页脚"><a href="#页脚" class="headerlink" title="页脚"></a>页脚</h2><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">footer:</span></span><br><span class="line">  <span class="attr">since:</span> <span class="number">2024</span></span><br><span class="line">  <span class="attr">powered:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">beian:</span></span><br><span class="line">    <span class="attr">enable:</span> <span class="literal">false</span></span><br><span class="line">    <span class="attr">text:</span> <span class="string">粤ICP备00000000号</span></span><br><span class="line">    <span class="attr">link:</span> <span class="string">https://beian.miit.gov.cn/</span></span><br></pre></td></tr></table></figure><p>页脚会显示 <code>© 2024 - 2026</code> 这样的年份区间，起始年份取 <code>since</code>。<br>开了 <code>beian</code> 之后会额外显示一条备案链接。</p><h2 id="接入评论"><a href="#接入评论" class="headerlink" title="接入评论"></a>接入评论</h2><p>主题内置 <strong>Giscus</strong>（基于 GitHub Discussions），在 <code>_config.yml</code> 里填好参数即可：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">comments:</span></span><br><span class="line">  <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">provider:</span> <span class="string">giscus</span></span><br><span class="line">  <span class="attr">giscus:</span></span><br><span class="line">    <span class="attr">repo:</span> <span class="string">用户名/仓库名</span></span><br><span class="line">    <span class="attr">repo_id:</span> <span class="string">R_kgDOxxxxxx</span></span><br><span class="line">    <span class="attr">category:</span> <span class="string">Announcements</span></span><br><span class="line">    <span class="attr">category_id:</span> <span class="string">DIC_kwDOxxxxxx</span></span><br><span class="line">    <span class="attr">mapping:</span> <span class="string">url</span>          <span class="comment"># 用页面 URL 关联 discussion</span></span><br></pre></td></tr></table></figure><p>前置条件：目标仓库必须是 <strong>public</strong>，并已安装 giscus 应用、开启 Discussions。</p><ul><li>评论框在正文上方（<code>input_position: top</code>），深浅色跟随站点主题切换。</li><li>换成 Waline &#x2F; Twikoo 等其它服务：改 <code>layout/_partial/comments.ejs</code> 里的脚本即可，<br>文章页的引入位置不用动。</li></ul><h2 id="入场动画"><a href="#入场动画" class="headerlink" title="入场动画"></a>入场动画</h2><p>卡片滚动进入视口时会淡入上移，由 <code>echo.js</code> 里的 IntersectionObserver 实现，默认开启。<br>想关掉的话，删除 <code>source/js/echo.js</code> 中「Reveal on scroll」那一段即可。</p><h2 id="常见问题"><a href="#常见问题" class="headerlink" title="常见问题"></a>常见问题</h2><h3 id="菜单点了打不开-页面空白"><a href="#菜单点了打不开-页面空白" class="headerlink" title="菜单点了打不开 &#x2F; 页面空白"></a>菜单点了打不开 &#x2F; 页面空白</h3><p>先看终端有没有报错。最常见的原因是<strong>模板里引用了不存在的变量</strong>，<br>或者生成器返回的 <code>page.posts</code> 被当成了 Query 对象处理。</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">npx hexo clean &amp;&amp; npx hexo generate</span><br></pre></td></tr></table></figure><p>重新生成时终端会直接指出出错的文件和行号。</p><h3 id="改了配置不生效"><a href="#改了配置不生效" class="headerlink" title="改了配置不生效"></a>改了配置不生效</h3><p>分三种情况：</p><table><thead><tr><th>改了什么</th><th>需要做什么</th></tr></thead><tbody><tr><td><code>themes/echo/_config.yml</code></td><td>重启 <code>hexo server</code></td></tr><tr><td>站点 <code>_config.yml</code></td><td>重启 <code>hexo server</code></td></tr><tr><td><code>scripts/*.js</code>（生成器）</td><td>重启 <code>hexo server</code></td></tr><tr><td>CSS &#x2F; JS &#x2F; 模板</td><td>一般热更新，必要时强刷（Ctrl+F5）</td></tr></tbody></table><blockquote><p>改了 <code>colors.accent</code> 却没变？主色是在 <code>head.ejs</code> 里注入的，<br>如果你改的是<strong>编译后的</strong> <code>public/css/echo.css</code>，下次生成会被覆盖——<br>要改就改 <code>themes/echo/_config.yml</code>，然后 <code>hexo clean &amp;&amp; hexo generate</code>。</p></blockquote><h3 id="浅色主题下横幅还是原来的深色-灰色"><a href="#浅色主题下横幅还是原来的深色-灰色" class="headerlink" title="浅色主题下横幅还是原来的深色 &#x2F; 灰色"></a>浅色主题下横幅还是原来的深色 &#x2F; 灰色</h3><p>自己写浅色覆盖规则时，最容易踩的两个坑：</p><ol><li><strong>选择器优先级不够</strong>。主题里深色状态的横幅用的是<br><code>.page-banner.has-banner .page-banner-card</code>（三个 class），<br>而 <code>[data-theme=&#39;light&#39;] .page-banner-card</code>（一个属性 + 一个 class）压不过它。<br>写浅色规则时必须带上 <code>.page-banner</code> &#x2F; <code>.has-banner</code> 上下文，把优先级提上去。</li><li><strong>横幅大图写在 HTML 内联样式里</strong>。<code>.page-banner</code> 的<br><code>style=&quot;background-image:url(...)&quot;</code> 是模板输出的内联属性，<br>普通 CSS 盖不住，需要在浅色规则里用 <code>background: ... !important</code> 压制。</li></ol><p>另外浅色规则要同时照顾两个属性：<code>data-theme</code>（<code>head.ejs</code> 里的运行时 JS 写入）<br>和 <code>data-theme-hint</code>（<code>layout.ejs</code> 直接输出的配置值，用于 JS 尚未执行时防闪帧）。</p><p>验证时如果无头浏览器也跟着系统深色渲染，可以临时做一个强制<br><code>data-theme=&quot;light&quot;</code> 的验证页截图确认，改完记得删掉。</p><p>排查口诀：改完 CSS → <code>hexo clean &amp;&amp; hexo generate</code> → <strong>停掉旧 server 换端口重启</strong> → 浏览器强刷。<br>只改源文件就断定”没生效”是最常见的原因，因为运行中的 server 会一直供旧 CSS。</p><h3 id="窄屏展开菜单后白底白字（浅色主题）"><a href="#窄屏展开菜单后白底白字（浅色主题）" class="headerlink" title="窄屏展开菜单后白底白字（浅色主题）"></a>窄屏展开菜单后白底白字（浅色主题）</h3><p>如果你是照着上一条 FAQ 给自己写浅色规则时遇到的，八成是踩了同一个坑：<br>首页 Hero 的导航是<strong>透明悬浮在深色大图</strong>上的，所以浅色规则会主动排除它<br>（<code>:not(.has-hero)</code>），让白字保留。可是窄屏展开的抽屉菜单是<br><strong>自带实底浮层</strong>（<code>background: var(--bg-elev)</code>，浅色下为纯白），<br>它的链接同样继承了白字 —— 于是白底白字。</p><p>判断原则：<strong>看这个元素自己有没有底色</strong>。</p><ul><li>有自己的实底（抽屉、卡片、弹窗）→ 文字必须跟随主题色，用 <code>var(--text)</code> &#x2F; <code>var(--text-soft)</code></li><li>透明悬浮在大图上（首页顶栏）→ 固定用白字，任何主题都一样</li></ul><p>主题里对应的修法（≤900px 生效）：</p><figure class="highlight css"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">@media</span> (<span class="attribute">max-width</span>: <span class="number">900px</span>) &#123;</span><br><span class="line">  <span class="selector-attr">[data-theme=<span class="string">&#x27;light&#x27;</span>]</span> <span class="selector-class">.site-nav</span> <span class="selector-class">.nav-link</span> &#123; <span class="attribute">color</span>: <span class="number">#1e293b</span>; &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>抽屉在深色主题下本来就是深底白字，所以这条只需要覆盖浅色。</p><h3 id="资源没出现在资源库"><a href="#资源没出现在资源库" class="headerlink" title="资源没出现在资源库"></a>资源没出现在资源库</h3><p>按顺序检查：</p><ol><li>front-matter 里 <code>resource.enable</code> 是不是 <code>true</code></li><li><code>resource.type</code> 的值是否与站点 <code>_config.yml</code> 里 <code>resources.types[].key</code> 一致</li><li>文章文件是否放在 <code>source/_posts/</code> 下</li><li>有没有执行过 <code>hexo clean</code></li></ol><h3 id="侧栏收起后目录不见了"><a href="#侧栏收起后目录不见了" class="headerlink" title="侧栏收起后目录不见了"></a>侧栏收起后目录不见了</h3><p>这是预期行为：右栏在 1280px 以下会收起，<br>此时目录会转移到<strong>正文顶部的可折叠区块</strong>，不会丢失。</p><h3 id="封面图不显示"><a href="#封面图不显示" class="headerlink" title="封面图不显示"></a>封面图不显示</h3><ul><li>确认路径以 <code>/</code> 开头，且文件真实存在于 <code>source/images/</code> 下。</li><li>路径是<strong>相对站点 source</strong>，不是相对文章文件。</li><li>没有封面时卡片会显示渐变占位块，属于正常回退。</li></ul><h3 id="导航栏挡住锚点"><a href="#导航栏挡住锚点" class="headerlink" title="导航栏挡住锚点"></a>导航栏挡住锚点</h3><p>主题已通过 <code>scroll-padding-top</code> 处理锚点偏移，<br>滚动到标题时不会贴在导航栏下面。如果你自定义了导航高度，<br>记得同步调整 <code>--header-h</code> 变量。</p><h2 id="进阶定制"><a href="#进阶定制" class="headerlink" title="进阶定制"></a>进阶定制</h2><h3 id="改配色"><a href="#改配色" class="headerlink" title="改配色"></a>改配色</h3><p>主题所有颜色都走 CSS 变量，定义在 <code>echo.css</code> 顶部的 <code>:root</code>：</p><figure class="highlight css"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line"><span class="selector-pseudo">:root</span> &#123;</span><br><span class="line">  <span class="attr">--accent</span>: <span class="number">#5b8cff</span>;</span><br><span class="line">  <span class="attr">--bg</span>: <span class="number">#f6f7fb</span>;</span><br><span class="line">  <span class="attr">--bg-elev</span>: <span class="number">#ffffff</span>;</span><br><span class="line">  <span class="attr">--text</span>: <span class="number">#1b1f2a</span>;</span><br><span class="line">  <span class="attr">--border</span>: <span class="number">#e4e7f0</span>;</span><br><span class="line">&#125;</span><br><span class="line"><span class="selector-attr">[data-theme=<span class="string">&#x27;dark&#x27;</span>]</span> &#123;</span><br><span class="line">  <span class="attr">--bg</span>: <span class="number">#0f1117</span>;</span><br><span class="line">  <span class="attr">--bg-elev</span>: <span class="number">#171a23</span>;</span><br><span class="line">  <span class="attr">--text</span>: <span class="number">#e8eaf1</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>深色模式只需覆盖 <code>[data-theme=&#39;dark&#39;]</code> 里的同名变量。</p><h3 id="加一个侧栏组件"><a href="#加一个侧栏组件" class="headerlink" title="加一个侧栏组件"></a>加一个侧栏组件</h3><ol><li>在 <code>layout/_rail/</code> 下新建 <code>your-widget.ejs</code></li><li>在 <code>layout/_partial/rail-left.ejs</code> 或 <code>rail-right.ejs</code> 里引入</li><li>在主题 <code>_config.yml</code> 里加对应的 <code>enable</code> 开关</li></ol><p>组件外层用 <code>rail-card</code> 类就能自动继承卡片样式：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">&lt;section class=&quot;rail-card&quot;&gt;</span><br><span class="line">  &lt;h3 class=&quot;rail-card-title&quot;&gt;&lt;%- echo_icon(&#x27;box&#x27;, 16) %&gt; 标题&lt;/h3&gt;</span><br><span class="line">  &lt;p&gt;内容&lt;/p&gt;</span><br><span class="line">&lt;/section&gt;</span><br></pre></td></tr></table></figure><h3 id="发布主题前要清理什么"><a href="#发布主题前要清理什么" class="headerlink" title="发布主题前要清理什么"></a>发布主题前要清理什么</h3><ul><li>主题 <code>_config.yml</code> 里的个人信息、头像、社交链接</li><li><code>source/images/</code> 下你自己上传的图片</li><li>演示文章（<code>source/_posts/</code> 里的示例内容）</li><li><code>public/</code> 与 <code>.deploy_git/</code> 之类的构建产物</li></ul><h3 id="想改某个字段的中文名-显示逻辑"><a href="#想改某个字段的中文名-显示逻辑" class="headerlink" title="想改某个字段的中文名 &#x2F; 显示逻辑"></a>想改某个字段的中文名 &#x2F; 显示逻辑</h3><p>资源字段（版本 &#x2F; 平台 &#x2F; 大小 &#x2F; 语言 &#x2F; 更新日期）的映射与过滤统一在<br><code>scripts/helper.js</code>：</p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="variable constant_">RESOURCE_FIELD_LABELS</span> = &#123; <span class="attr">version</span>: <span class="string">&#x27;版本&#x27;</span>, <span class="attr">platform</span>: <span class="string">&#x27;平台&#x27;</span>, <span class="comment">/* ... */</span> &#125;;</span><br><span class="line">hexo.<span class="property">extend</span>.<span class="property">helper</span>.<span class="title function_">register</span>(<span class="string">&#x27;echo_resource_fields&#x27;</span>, <span class="keyword">function</span> (<span class="params">extra</span>) &#123; <span class="comment">/* ... */</span> &#125;);</span><br></pre></td></tr></table></figure><p>改这里会同时影响<strong>资源卡片、资源详情页摘要、普通文章卡片</strong>三处，不用逐个模板改。<br>其他 helper 也都集中在同一个文件底部注册，模板里通过 <code>echo_xxx</code> 调用。</p><h3 id="主题代码里哪些是「公开-API」，改动需谨慎"><a href="#主题代码里哪些是「公开-API」，改动需谨慎" class="headerlink" title="主题代码里哪些是「公开 API」，改动需谨慎"></a>主题代码里哪些是「公开 API」，改动需谨慎</h3><table><thead><tr><th>位置</th><th>作用</th><th>稳定性</th></tr></thead><tbody><tr><td><code>helper.js</code> 的 <code>echo_*</code> helper</td><td>模板可调用的函数</td><td>稳定，改动会影响所有模板</td></tr><tr><td><code>source/css/echo.css</code> 的 <code>--*</code> 变量</td><td>主题对外暴露的设计变量</td><td>稳定，自定义 CSS 建议只改这些</td></tr><tr><td><code>.rail-card</code> &#x2F; <code>.field-chip</code> &#x2F; <code>.btn</code> 等类</td><td>供你在 Markdown 里直接用的组件类</td><td>稳定，可放心在正文里用</td></tr><tr><td><code>scripts/articles.js</code> 等生成器</td><td>改站点数据来源</td><td>内部实现，改动需同步生成器逻辑</td></tr></tbody></table><p>反过来，<strong>下面这些不要依赖</strong>：</p><ul><li>纯为视觉服务的状态类（<code>has-hero</code> &#x2F; <code>is-scrolled</code> &#x2F; <code>is-compact</code> 等），<br>它们会随主题实现调整</li><li><code>.ab-*</code>（卡片网格）、<code>.hd-*</code>（下载区）这类给 Markdown 手写内容用的组件类，<br>虽然保留但版式可能微调</li></ul><h2 id="系列总结"><a href="#系列总结" class="headerlink" title="系列总结"></a>系列总结</h2><p>六篇下来，你应该已经掌握：</p><ol><li>主题的架构与目录职责</li><li>安装启用与两套配置文件的区别</li><li>三栏布局、响应式收栏与首页大图</li><li>资源帖写法、网盘链接与配色</li><li>写作规范、代码块与文章页开关</li><li>侧栏组件、页脚与问题排查</li></ol><p>后续计划：资源排序与筛选增强、磁力链接支持、评论系统开箱接入。</p>]]></content>
    
    
    <summary type="html">Echo 主题指南第六篇：左栏与右栏各组件配置、音乐播放器、日历、页脚与评论，以及常见问题排查与进阶定制。</summary>
    
    
    
    <category term="主题指南" scheme="https://blog.126330.xyz/categories/%E4%B8%BB%E9%A2%98%E6%8C%87%E5%8D%97/"/>
    
    
    <category term="Echo 主题" scheme="https://blog.126330.xyz/tags/Echo-%E4%B8%BB%E9%A2%98/"/>
    
    <category term="教程" scheme="https://blog.126330.xyz/tags/%E6%95%99%E7%A8%8B/"/>
    
    <category term="侧栏" scheme="https://blog.126330.xyz/tags/%E4%BE%A7%E6%A0%8F/"/>
    
    <category term="常见问题" scheme="https://blog.126330.xyz/tags/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98/"/>
    
  </entry>
  
  <entry>
    <title>Echo 主题使用指南（五）：写作、代码块与文章页</title>
    <link href="https://blog.126330.xyz/posts/bb3f690/"/>
    <id>https://blog.126330.xyz/posts/bb3f690/</id>
    <published>2026-10-06T03:00:00.000Z</published>
    <updated>2026-10-07T02:00:00.000Z</updated>
    
    <content type="html"><![CDATA[<span id="more"></span><h2 id="新建一篇文章"><a href="#新建一篇文章" class="headerlink" title="新建一篇文章"></a>新建一篇文章</h2><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">npx hexo new post <span class="string">&quot;文章标题&quot;</span></span><br></pre></td></tr></table></figure><p>文件会生成在 <code>source/_posts/</code> 下，然后按下面的格式补 front-matter。</p><h2 id="front-matter-全字段"><a href="#front-matter-全字段" class="headerlink" title="front-matter 全字段"></a>front-matter 全字段</h2><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">---</span></span><br><span class="line"><span class="attr">title:</span> <span class="string">文章标题</span></span><br><span class="line"><span class="attr">date:</span> <span class="number">2026-10-06 11:00:00</span></span><br><span class="line"><span class="attr">updated:</span> <span class="number">2026-10-07 10:00:00</span></span><br><span class="line"><span class="attr">categories:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">建站笔记</span></span><br><span class="line"><span class="attr">tags:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">Hexo</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">前端</span></span><br><span class="line"><span class="attr">description:</span> <span class="string">一段</span> <span class="number">50</span><span class="string">~120</span> <span class="string">字的描述，会用在卡片摘要和</span> <span class="string">SEO。</span></span><br><span class="line"><span class="attr">cover:</span> <span class="string">/images/covers/hexo-theme.svg</span></span><br><span class="line"><span class="meta">---</span></span><br></pre></td></tr></table></figure><table><thead><tr><th>字段</th><th>作用</th></tr></thead><tbody><tr><td><code>title</code></td><td>标题，显示在卡片、详情页和浏览器标签</td></tr><tr><td><code>date</code></td><td>发布日期</td></tr><tr><td><code>updated</code></td><td>更新日期，与 <code>date</code> 不同时文章页会显示「更新于」</td></tr><tr><td><code>categories</code></td><td>分类，会出现在左栏分类列表</td></tr><tr><td><code>tags</code></td><td>标签，会出现在卡片底部和左栏标签云</td></tr><tr><td><code>description</code></td><td>简介，用于卡片摘要、详情页导语、SEO 描述</td></tr><tr><td><code>cover</code></td><td>封面图，卡片和详情页共用</td></tr></tbody></table><h3 id="关于-cover"><a href="#关于-cover" class="headerlink" title="关于 cover"></a>关于 cover</h3><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">cover:</span> <span class="string">/images/covers/movie.svg</span></span><br></pre></td></tr></table></figure><ul><li>路径以 <code>/</code> 开头，相对于站点 <code>source</code> 目录。</li><li>不写 <code>cover</code> 时，卡片会渲染一个带标题首字的渐变占位块，不会开天窗。</li><li>推荐比例 <strong>16:9</strong>，尺寸 800×450 以上。</li><li>也可以用 <code>photos</code> 字段代替，取第一张：</li></ul><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">photos:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">/images/covers/game.svg</span></span><br></pre></td></tr></table></figure><h2 id="摘要与"><a href="#摘要与" class="headerlink" title="摘要与 &lt;!-- more --&gt;"></a>摘要与 <code>&lt;!-- more --&gt;</code></h2><p>在正文里插入 <code>&lt;!-- more --&gt;</code>，它之前的内容就是摘要：</p><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">这是一段导语，会出现在首页卡片上。</span><br><span class="line"></span><br><span class="line">&lt;!-- more --&gt;</span><br><span class="line"></span><br><span class="line"><span class="section">## 正文从这里开始</span></span><br></pre></td></tr></table></figure><p>规则优先级：</p><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">front-matter 的 description  →  &lt;!-- more --&gt; 之前的内容  →  自动截断正文</span><br></pre></td></tr></table></figure><h2 id="代码块"><a href="#代码块" class="headerlink" title="代码块"></a>代码块</h2><p>主题的代码块是 macOS 窗口风格：左上角三个圆点、右上角语言角标、右上角复制按钮。</p><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="code">```javascript</span></span><br><span class="line"><span class="code">function hello(name) &#123;</span></span><br><span class="line"><span class="code">  console.log(`hello, $&#123;name&#125;`);</span></span><br><span class="line"><span class="code">&#125;</span></span><br><span class="line"><span class="code">```</span></span><br></pre></td></tr></table></figure><p>代码块样式由主题内置，无需额外配置：mac 风格窗口三色圆点、右上角复制按钮、语言角标。</p><p>支持的语言角标包含 JavaScript、TypeScript、Python、Go、Rust、Java、C&#x2F;C++、PHP、<br>Shell、PowerShell、YAML、JSON、HTML、CSS、SCSS、Vue、SQL、Dockerfile、Nginx 等，<br>未收录的语言会显示大写名称。</p><h3 id="行内代码"><a href="#行内代码" class="headerlink" title="行内代码"></a>行内代码</h3><p>用反引号包裹即可，例如 <code>resource.enable</code>，会自动应用等宽字体与浅底色。</p><h2 id="文章目录"><a href="#文章目录" class="headerlink" title="文章目录"></a>文章目录</h2><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">toc:</span></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">目录</span></span><br><span class="line">  <span class="attr">depth:</span> <span class="number">3</span></span><br></pre></td></tr></table></figure><ul><li><code>depth: 3</code> 表示收录到三级标题（<code>###</code>）。</li><li>目录显示在右栏，滚动时会<strong>自动高亮当前章节</strong>。</li><li>窗口窄于 1280px（右栏收起）时，目录会以可折叠形式出现在正文顶部。</li></ul><p>如果你不想让某篇文章显示目录：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">---</span></span><br><span class="line"><span class="attr">title:</span> <span class="string">一篇不需要目录的文章</span></span><br><span class="line"><span class="attr">toc:</span> <span class="literal">false</span></span><br><span class="line"><span class="meta">---</span></span><br></pre></td></tr></table></figure><h2 id="文章页其它开关"><a href="#文章页其它开关" class="headerlink" title="文章页其它开关"></a>文章页其它开关</h2><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">post:</span></span><br><span class="line">  <span class="attr">toc:</span> <span class="literal">true</span>              <span class="comment"># 全局目录开关</span></span><br><span class="line">  <span class="attr">toc_depth:</span> <span class="number">3</span></span><br><span class="line">  <span class="attr">copyright:</span> <span class="literal">true</span>        <span class="comment"># 底部版权声明</span></span><br><span class="line">  <span class="attr">updated:</span> <span class="literal">true</span>          <span class="comment"># 显示更新日期</span></span><br><span class="line">  <span class="attr">words_per_minute:</span> <span class="number">300</span>  <span class="comment"># 阅读时长计算基准</span></span><br><span class="line">  <span class="attr">prev_next:</span> <span class="literal">true</span>        <span class="comment"># 上一篇 / 下一篇</span></span><br><span class="line">  <span class="attr">intro:</span> <span class="literal">true</span>            <span class="comment"># 正文前的简介</span></span><br></pre></td></tr></table></figure><p>阅读时长 &#x3D; 正文字数 ÷ <code>words_per_minute</code>，向上取整，最小显示 1 分钟。</p><h2 id="导航菜单"><a href="#导航菜单" class="headerlink" title="导航菜单"></a>导航菜单</h2><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">menu:</span></span><br><span class="line">  <span class="string">首页:</span> <span class="string">/</span></span><br><span class="line">  <span class="string">文章:</span> <span class="string">/articles/</span></span><br><span class="line">  <span class="string">资源库:</span> <span class="string">/resources/</span></span><br><span class="line">  <span class="string">归档:</span> <span class="string">/archives/</span></span><br><span class="line">  <span class="string">关于:</span> <span class="string">/about/</span></span><br></pre></td></tr></table></figure><ul><li><code>menu</code> 是全部菜单项，顺序即显示顺序，全部<strong>平铺在导航栏顶层</strong>。</li><li>菜单项自带图标（按名称自动匹配，如 首页→home、文章→file-text），无需额外配置。</li><li>资源类型（影视 &#x2F; 游戏 &#x2F; MOD &#x2F; 汉化）不出现在导航栏里——它们入口在资源库页面顶部的类型筛选导航中。</li></ul><h2 id="文章分类导航"><a href="#文章分类导航" class="headerlink" title="文章分类导航"></a>文章分类导航</h2><p>文章总页（<code>/articles/</code>）和文章分类页顶部有一排分类导航（与资源库顶部的类型筛选同一套视觉）：<br>「全部」+ 各文章分类（带篇数），点击即可在分类之间切换。</p><p>只有<strong>属于文章轨</strong>（含非资源帖）的分类才会出现；纯资源分类不会混进来。</p><h2 id="内容排序"><a href="#内容排序" class="headerlink" title="内容排序"></a>内容排序</h2><p>front-matter 里可以用两个字段控制列表排序：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">---</span></span><br><span class="line"><span class="attr">title:</span> <span class="string">我的一篇文章</span></span><br><span class="line"><span class="attr">order:</span> <span class="number">1</span>              <span class="comment"># 全局排序：决定在 /articles/ 或 /resources/ 总列表里的位置</span></span><br><span class="line"><span class="attr">category_order:</span> <span class="number">2</span>     <span class="comment"># 分类内排序：决定在分类页（或资源类型页）里的位置</span></span><br><span class="line"><span class="meta">---</span></span><br></pre></td></tr></table></figure><ul><li>数值越小越靠前；带排序值的文章置顶于按时间排序的文章之前。</li><li><code>order</code> 作用于文章总页与资源总页；<code>category_order</code> 作用于文章分类页与资源类型页。</li><li>两个字段都可以省略：省略 <code>category_order</code> 时回退到 <code>order</code>，再回退到按时间倒序。</li><li>资源帖同理——<code>order</code> 控制它在 <code>/resources/</code> 总列表的位置，<code>category_order</code> 控制它在所属类型页的位置。</li></ul><h2 id="上一篇-下一篇"><a href="#上一篇-下一篇" class="headerlink" title="上一篇 &#x2F; 下一篇"></a>上一篇 &#x2F; 下一篇</h2><p>文章页底部有「上一篇 &#x2F; 下一篇」导航，<strong>文章与资源库分开串</strong>：</p><ul><li>打开普通文章，只会在<strong>文章</strong>里找相邻篇，不会跳到资源帖。</li><li>打开资源帖，只会在<strong>资源</strong>里找相邻篇（样式上带资源标识）。</li><li>相邻关系按上面说的 <code>order</code> 排序计算（未设 <code>order</code> 时按时间倒序），<br>所以给系列文章排了 <code>order</code>，上下篇就会按你的顺序走。</li></ul><p>开关：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">post:</span></span><br><span class="line">  <span class="attr">prev_next:</span> <span class="literal">true</span></span><br></pre></td></tr></table></figure><h2 id="站点图标"><a href="#站点图标" class="headerlink" title="站点图标"></a>站点图标</h2><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 站点 _config.yml</span></span><br><span class="line"><span class="attr">favicon:</span> <span class="string">/favicon.png</span></span><br></pre></td></tr></table></figure><ul><li>浏览器标签栏、收藏夹、桌面快捷方式都用这张图（<code>favicon.png</code> &#x2F; <code>favicon.ico</code> &#x2F; <code>favicon.svg</code> 都支持，<br>会自动识别正确的 MIME 类型）。</li><li>同一个值也会作为<strong>导航栏网站名左侧的品牌图标</strong>。</li><li>想让品牌图标用另一张图，在站点 <code>_config.yml</code> 里单独指定：</li></ul><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">header:</span></span><br><span class="line">  <span class="attr">logo:</span> <span class="string">/images/brand.png</span></span><br></pre></td></tr></table></figure><ul><li>三级回退顺序：<code>header.logo</code>（站点）→ <code>favicon</code>（站点）→ <code>favicon</code>（主题，默认 <code>/images/favicon.svg</code>）→ 主题内置线条标识。</li><li>建议尺寸 180×180 以上的正方形图片，主题会自动按 34×34 圆角展示。</li></ul><h2 id="独立页面"><a href="#独立页面" class="headerlink" title="独立页面"></a>独立页面</h2><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">npx hexo new page about</span><br></pre></td></tr></table></figure><p>会生成 <code>source/about/index.md</code>：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">---</span></span><br><span class="line"><span class="attr">title:</span> <span class="string">关于</span></span><br><span class="line"><span class="attr">date:</span> <span class="number">2026-10-06 12:00:00</span></span><br><span class="line"><span class="attr">description:</span> <span class="string">关于本站。</span></span><br><span class="line"><span class="meta">---</span></span><br><span class="line"><span class="meta"></span></span><br><span class="line"><span class="string">正文内容……</span></span><br></pre></td></tr></table></figure><p>独立页面使用 <code>page.ejs</code> 模板，带内页横幅，但不显示阅读时长、目录和上下篇。</p><h2 id="站内搜索"><a href="#站内搜索" class="headerlink" title="站内搜索"></a>站内搜索</h2><p>主题在构建时会生成 <code>search.json</code>（由 <code>scripts/resource.js</code> 输出），<br>内容包含标题、链接、日期、分类、标签、是否资源以及一段摘要。</p><p>点击导航栏的放大镜或按 <code>/</code> 键可以唤起搜索框，<br>输入关键词后会实时匹配标题、分类、标签和摘要。</p><blockquote><p>搜索索引在<strong>构建时</strong>生成，所以新文章需要重新 <code>generate</code> 之后才能被搜到。</p></blockquote><h2 id="下一篇"><a href="#下一篇" class="headerlink" title="下一篇"></a>下一篇</h2><p>最后一篇讲侧栏组件、页脚、评论接入和常见问题排查。</p>]]></content>
    
    
    <summary type="html">Echo 主题指南第五篇：front-matter 全字段说明、摘要与封面、代码块样式、目录、上下篇与文章页其它功能。</summary>
    
    
    
    <category term="主题指南" scheme="https://blog.126330.xyz/categories/%E4%B8%BB%E9%A2%98%E6%8C%87%E5%8D%97/"/>
    
    
    <category term="Echo 主题" scheme="https://blog.126330.xyz/tags/Echo-%E4%B8%BB%E9%A2%98/"/>
    
    <category term="教程" scheme="https://blog.126330.xyz/tags/%E6%95%99%E7%A8%8B/"/>
    
    <category term="Markdown" scheme="https://blog.126330.xyz/tags/Markdown/"/>
    
    <category term="写作" scheme="https://blog.126330.xyz/tags/%E5%86%99%E4%BD%9C/"/>
    
  </entry>
  
  <entry>
    <title>Echo 主题使用指南（四）：资源帖与网盘链接</title>
    <link href="https://blog.126330.xyz/posts/5abe54fd/"/>
    <id>https://blog.126330.xyz/posts/5abe54fd/</id>
    <published>2026-10-06T02:30:00.000Z</published>
    <updated>2026-10-07T02:00:00.000Z</updated>
    
    <content type="html"><![CDATA[<span id="more"></span><h2 id="最小的资源帖"><a href="#最小的资源帖" class="headerlink" title="最小的资源帖"></a>最小的资源帖</h2><p>只要在 front-matter 里加 <code>resource</code> 字段，普通文章就变成资源帖：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">---</span></span><br><span class="line"><span class="attr">title:</span> <span class="string">某某电影</span> <span class="string">4K</span> <span class="string">蓝光原盘</span></span><br><span class="line"><span class="attr">date:</span> <span class="number">2026-10-02 14:00:00</span></span><br><span class="line"><span class="attr">categories:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">影视资源</span></span><br><span class="line"><span class="attr">cover:</span> <span class="string">/images/covers/movie.svg</span></span><br><span class="line"><span class="attr">resource:</span></span><br><span class="line">  <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">type:</span> <span class="string">movie</span></span><br><span class="line"><span class="meta">---</span></span><br></pre></td></tr></table></figure><p><code>type</code> 的取值由站点 <code>_config.yml</code> 里 <code>resources.types</code> 的 <code>key</code> 决定，<br>常见的有 <code>movie</code> &#x2F; <code>game</code> &#x2F; <code>mod</code> &#x2F; <code>translation</code> &#x2F; <code>software</code> &#x2F; <code>other</code>。</p><h2 id="完整字段"><a href="#完整字段" class="headerlink" title="完整字段"></a>完整字段</h2><figure class="highlight yaml"><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></pre></td><td class="code"><pre><span class="line"><span class="meta">---</span></span><br><span class="line"><span class="attr">title:</span> <span class="string">演示：游戏</span> <span class="string">MOD《示例模组》v3.1.4</span></span><br><span class="line"><span class="attr">date:</span> <span class="number">2026-10-04 15:20:00</span></span><br><span class="line"><span class="attr">categories:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">游戏MOD</span></span><br><span class="line"><span class="attr">tags:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">MOD</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">玩法扩展</span></span><br><span class="line"><span class="attr">description:</span> <span class="string">MOD</span> <span class="string">类资源演示，展示多版本、多网盘链接的呈现。</span></span><br><span class="line"><span class="attr">cover:</span> <span class="string">/images/covers/mod.svg</span></span><br><span class="line"><span class="attr">resource:</span></span><br><span class="line">  <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">type:</span> <span class="string">mod</span></span><br><span class="line">  <span class="attr">version:</span> <span class="string">v3.1.4</span></span><br><span class="line">  <span class="attr">platform:</span> <span class="string">Windows</span></span><br><span class="line">  <span class="attr">size:</span> <span class="number">1.8</span> <span class="string">GB</span></span><br><span class="line">  <span class="attr">language:</span> <span class="string">简体中文</span></span><br><span class="line">  <span class="attr">updated:</span> <span class="number">2026-10-04</span></span><br><span class="line">  <span class="attr">links:</span></span><br><span class="line">    <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">蓝奏云</span></span><br><span class="line">      <span class="attr">url:</span> <span class="string">https://wwi.lanzouq.com/example-mod</span></span><br><span class="line">      <span class="attr">password:</span> <span class="string">echo</span></span><br><span class="line">      <span class="attr">size:</span> <span class="number">1.8</span> <span class="string">GB</span></span><br><span class="line">      <span class="attr">note:</span> <span class="string">不限速</span></span><br><span class="line">    <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">百度网盘</span></span><br><span class="line">      <span class="attr">url:</span> <span class="string">https://pan.baidu.com/s/example-mod</span></span><br><span class="line">      <span class="attr">password:</span> <span class="number">1234</span></span><br><span class="line">      <span class="attr">size:</span> <span class="number">1.8</span> <span class="string">GB</span></span><br><span class="line"><span class="meta">---</span></span><br></pre></td></tr></table></figure><p>字段说明：</p><table><thead><tr><th>字段</th><th>必填</th><th>说明</th></tr></thead><tbody><tr><td><code>enable</code></td><td>是</td><td>设为 <code>true</code> 才会进入资源库</td></tr><tr><td><code>type</code></td><td>是</td><td>资源类型，对应 <code>resources.types</code> 的 <code>key</code></td></tr><tr><td><code>version</code></td><td>否</td><td>版本号，显示在卡片和详情表格里</td></tr><tr><td><code>platform</code></td><td>否</td><td>适用平台，如 Windows &#x2F; Android &#x2F; 全平台</td></tr><tr><td><code>size</code></td><td>否</td><td>文件大小</td></tr><tr><td><code>language</code></td><td>否</td><td>语言，如 简体中文 &#x2F; 多语言</td></tr><tr><td><code>updated</code></td><td>否</td><td>资源更新日期，会显示在封面右上角</td></tr><tr><td><code>links</code></td><td>否</td><td>网盘链接数组，详见下节</td></tr></tbody></table><h2 id="网盘链接"><a href="#网盘链接" class="headerlink" title="网盘链接"></a>网盘链接</h2><p><code>links</code> 是一个数组，每一项就是一张网盘卡片：</p><figure class="highlight yaml"><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="attr">links:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">百度网盘</span></span><br><span class="line">    <span class="attr">url:</span> <span class="string">https://pan.baidu.com/s/xxxx</span></span><br><span class="line">    <span class="attr">password:</span> <span class="string">abcd</span></span><br><span class="line">    <span class="attr">size:</span> <span class="number">42.6</span> <span class="string">GB</span></span><br><span class="line">    <span class="attr">note:</span> <span class="string">需要客户端</span></span><br><span class="line">  <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">夸克网盘</span></span><br><span class="line">    <span class="attr">url:</span> <span class="string">https://pan.quark.cn/s/xxxx</span></span><br><span class="line">    <span class="attr">password:</span> <span class="string">&#x27;&#x27;</span></span><br><span class="line">    <span class="attr">size:</span> <span class="number">42.6</span> <span class="string">GB</span></span><br><span class="line">    <span class="attr">note:</span> <span class="string">在线解压</span></span><br></pre></td></tr></table></figure><table><thead><tr><th>字段</th><th>说明</th></tr></thead><tbody><tr><td><code>name</code></td><td>网盘名称，同时用于匹配配色</td></tr><tr><td><code>url</code></td><td>分享链接</td></tr><tr><td><code>password</code></td><td>提取码，留空则不显示复制按钮</td></tr><tr><td><code>size</code></td><td>该网盘内的文件大小（可与资源总大小不同）</td></tr><tr><td><code>note</code></td><td>备注，如「不限速」「需客户端」</td></tr></tbody></table><p>几个实用技巧：</p><ul><li><strong>多版本</strong>：同一资源的多个版本，建议每篇一个版本，用 <code>version</code> 区分，方便单独更新链接。</li><li><strong>多网盘</strong>：同一版本放多个网盘，全部写进 <code>links</code>，访客可以自己选。</li><li><strong>失效链接</strong>：直接把对应条目删掉重新发布即可，不用改正文。</li></ul><h2 id="网盘配色"><a href="#网盘配色" class="headerlink" title="网盘配色"></a>网盘配色</h2><p>每个网盘卡片会按名称自动取色。内置了这些：</p><figure class="highlight yaml"><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"><span class="attr">resource:</span></span><br><span class="line">  <span class="attr">pan_colors:</span></span><br><span class="line">    <span class="string">百度网盘:</span> <span class="string">&#x27;#2932e1&#x27;</span></span><br><span class="line">    <span class="string">阿里云盘:</span> <span class="string">&#x27;#ff6a00&#x27;</span></span><br><span class="line">    <span class="string">夸克网盘:</span> <span class="string">&#x27;#2f7dff&#x27;</span></span><br><span class="line">    <span class="string">天翼云盘:</span> <span class="string">&#x27;#0090ff&#x27;</span></span><br><span class="line">    <span class="number">123</span><span class="string">云盘:</span> <span class="string">&#x27;#1677ff&#x27;</span></span><br><span class="line">    <span class="string">迅雷云盘:</span> <span class="string">&#x27;#2f6bff&#x27;</span></span><br><span class="line">    <span class="string">蓝奏云:</span> <span class="string">&#x27;#3ba0ff&#x27;</span></span><br><span class="line">    <span class="string">微云:</span> <span class="string">&#x27;#12b7f5&#x27;</span></span><br><span class="line">    <span class="string">奶牛快传:</span> <span class="string">&#x27;#ffb02e&#x27;</span></span><br><span class="line">    <span class="attr">Google Drive:</span> <span class="string">&#x27;#34a853&#x27;</span></span><br><span class="line">    <span class="attr">OneDrive:</span> <span class="string">&#x27;#0f6cbd&#x27;</span></span><br><span class="line">    <span class="attr">Mega:</span> <span class="string">&#x27;#d9272e&#x27;</span></span><br><span class="line">    <span class="string">磁力链接:</span> <span class="string">&#x27;#7a5cff&#x27;</span></span><br><span class="line">    <span class="string">BT</span> <span class="string">种子:</span> <span class="string">&#x27;#f59e0b&#x27;</span></span><br></pre></td></tr></table></figure><p>要加新网盘，直接补一行；名称要和 <code>links[].name</code> <strong>完全一致</strong>（包括空格）。<br>没匹配到的网盘会使用主题主色。</p><h2 id="资源卡片显示哪些字段"><a href="#资源卡片显示哪些字段" class="headerlink" title="资源卡片显示哪些字段"></a>资源卡片显示哪些字段</h2><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">resource:</span></span><br><span class="line">  <span class="attr">show_fields:</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">version</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">platform</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">size</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">language</span></span><br></pre></td></tr></table></figure><ul><li>可用字段只有这四个，顺序即卡片上的展示顺序。</li><li>字段的中文名（版本 &#x2F; 平台 &#x2F; 大小 &#x2F; 语言）由主题内置映射，<br>想改名要改 <code>scripts/helper.js</code> 里的 <code>RESOURCE_FIELD_LABELS</code>。</li><li>卡片上<strong>最多显示 3 个</strong>（写死的，避免卡片高度参差），多余的折叠掉；<br>详情页不受此限制，配置的字段 + 「更新日期」都会展示。</li><li>字段值留空时自动跳过，四个都没写则显示一个「资源 &#x2F; 查看详情」的占位。</li></ul><blockquote><p>字段映射与过滤逻辑统一在 <code>helper.js</code> 的 <code>echo_resource_fields</code> helper 里，<br>三处模板（资源卡片、详情页摘要、普通卡片）共用同一份实现。</p></blockquote><h2 id="版权提示与密码显示"><a href="#版权提示与密码显示" class="headerlink" title="版权提示与密码显示"></a>版权提示与密码显示</h2><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">resource:</span></span><br><span class="line">  <span class="attr">show_password:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">notice:</span> <span class="string">&#x27;资源仅供学习交流，请在下载后 24 小时内删除。&#x27;</span></span><br></pre></td></tr></table></figure><ul><li><code>show_password: false</code> 可以全局隐藏提取码（如果你用其它方式发放），<br>隐藏时显示为 <code>••••</code>，但复制按钮仍然可用。</li><li><code>notice</code> 显示在下载区块上方，留空则不显示。</li></ul><h2 id="资源详情页的结构"><a href="#资源详情页的结构" class="headerlink" title="资源详情页的结构"></a>资源详情页的结构</h2><p>一篇资源帖从上到下依次是：</p><ol><li>字数 &#x2F; 阅读时间 &#x2F; 资源类型标签</li><li>标题与分类、标签、日期</li><li>简介（取 <code>description</code> 或摘要）</li><li><strong>字段表格</strong>：版本 &#x2F; 平台 &#x2F; 大小 &#x2F; 语言 &#x2F; 更新日期</li><li>正文（安装方法、注意事项等）</li><li><strong>下载区块</strong>：网盘卡片列表 + 提取码复制按钮</li><li>版权提示、上一篇 &#x2F; 下一篇</li></ol><p>正文里不需要再手写「版本：v3.1.4」这类信息，交给字段就好。</p><h2 id="图标清单"><a href="#图标清单" class="headerlink" title="图标清单"></a>图标清单</h2><p><code>resources.types[].icon</code> 和 Hero 按钮的 <code>icon</code> 都从这个内置集合里取值：</p><table><thead><tr><th>图标</th><th>适用</th></tr></thead><tbody><tr><td><code>film</code></td><td>影视</td></tr><tr><td><code>gamepad</code></td><td>游戏</td></tr><tr><td><code>puzzle</code></td><td>MOD</td></tr><tr><td><code>language</code></td><td>汉化 &#x2F; 多语言</td></tr><tr><td><code>app</code></td><td>软件工具</td></tr><tr><td><code>box</code></td><td>其它 &#x2F; 通用</td></tr><tr><td><code>layers</code></td><td>资源库</td></tr><tr><td><code>archive</code></td><td>归档</td></tr><tr><td><code>tag</code> &#x2F; <code>folder</code></td><td>标签 &#x2F; 分类</td></tr><tr><td><code>download</code></td><td>下载</td></tr><tr><td><code>clock</code> &#x2F; <code>calendar</code></td><td>时间 &#x2F; 日期</td></tr><tr><td><code>file-text</code></td><td>文章</td></tr><tr><td><code>trending-up</code></td><td>统计</td></tr><tr><td><code>fire</code></td><td>热门</td></tr><tr><td><code>list</code></td><td>目录</td></tr></tbody></table><p>填错名字不会报错，会回退成通用的盒子图标。</p><h2 id="下一篇"><a href="#下一篇" class="headerlink" title="下一篇"></a>下一篇</h2><p>下一篇讲写作：front-matter 全部字段、代码块、目录、摘要与封面。</p>]]></content>
    
    
    <summary type="html">Echo 主题指南第四篇：resource 字段的完整写法、多网盘链接与提取码、资源字段显示、网盘配色以及图标清单。</summary>
    
    
    
    <category term="主题指南" scheme="https://blog.126330.xyz/categories/%E4%B8%BB%E9%A2%98%E6%8C%87%E5%8D%97/"/>
    
    
    <category term="Echo 主题" scheme="https://blog.126330.xyz/tags/Echo-%E4%B8%BB%E9%A2%98/"/>
    
    <category term="教程" scheme="https://blog.126330.xyz/tags/%E6%95%99%E7%A8%8B/"/>
    
    <category term="资源库" scheme="https://blog.126330.xyz/tags/%E8%B5%84%E6%BA%90%E5%BA%93/"/>
    
    <category term="网盘" scheme="https://blog.126330.xyz/tags/%E7%BD%91%E7%9B%98/"/>
    
  </entry>
  
  <entry>
    <title>Echo 主题使用指南（三）：三栏布局、宽度与首页大图</title>
    <link href="https://blog.126330.xyz/posts/42ffd733/"/>
    <id>https://blog.126330.xyz/posts/42ffd733/</id>
    <published>2026-10-06T02:00:00.000Z</published>
    <updated>2026-10-07T02:00:00.000Z</updated>
    
    <content type="html"><![CDATA[<span id="more"></span><h2 id="三栏布局是怎么组成的"><a href="#三栏布局是怎么组成的" class="headerlink" title="三栏布局是怎么组成的"></a>三栏布局是怎么组成的</h2><p>页面主体是「左栏 &#x2F; 正文 &#x2F; 右栏」的弹性布局：</p><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">┌──────────┬────────────────────┬──────────┐</span><br><span class="line">│  左栏     │       正文          │   右栏    │</span><br><span class="line">│ 个人名片  │   文章 / 资源列表    │  统计     │</span><br><span class="line">│ 音乐      │                    │  目录     │</span><br><span class="line">│ 分类/标签 │                    │  日历     │</span><br><span class="line">└──────────┴────────────────────┴──────────┘</span><br></pre></td></tr></table></figure><p>用 <code>flex</code> 而不是 <code>grid</code>，好处是<strong>任意一栏隐藏时，正文会自动补位</strong>，<br>不需要为每种组合单独写一套布局规则。</p><h2 id="宽度相关的四个参数"><a href="#宽度相关的四个参数" class="headerlink" title="宽度相关的四个参数"></a>宽度相关的四个参数</h2><p>都在主题 <code>_config.yml</code> 的「外观」区块：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 三栏总宽度</span></span><br><span class="line"><span class="attr">layout_width:</span> <span class="string">1440px</span></span><br><span class="line"><span class="comment"># 三栏之间的间距</span></span><br><span class="line"><span class="attr">layout_gap:</span> <span class="string">36px</span></span><br><span class="line"><span class="comment"># 中栏最大宽度</span></span><br><span class="line"><span class="attr">main_width:</span> <span class="string">820px</span></span><br><span class="line"><span class="comment"># 左右侧栏宽度</span></span><br><span class="line"><span class="attr">rail_width:</span> <span class="string">240px</span></span><br></pre></td></tr></table></figure><p>它们的关系是：</p><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">layout_width ≥ 左栏宽 + 右栏宽 + main_width + layout_gap × 2</span><br></pre></td></tr></table></figure><p>以默认值为例：<code>260 + 260 + 820 + 36 × 2 = 1412</code>，小于 <code>1440</code>，留了一点余量。</p><p>如果你把 <code>main_width</code> 调得比可用空间还大，正文会被压缩而不是溢出——这是刻意的，<br>保证小屏下不会出现横向滚动条。</p><h3 id="想给正文更大空间"><a href="#想给正文更大空间" class="headerlink" title="想给正文更大空间"></a>想给正文更大空间</h3><p>两种做法，任选其一：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 做法一：加大总宽度（屏幕够宽时推荐）</span></span><br><span class="line"><span class="attr">layout_width:</span> <span class="string">1600px</span></span><br><span class="line"><span class="attr">main_width:</span> <span class="string">900px</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 做法二：收窄侧栏</span></span><br><span class="line"><span class="attr">rail_width:</span> <span class="string">220px</span></span><br></pre></td></tr></table></figure><h3 id="单独设置左右栏宽度"><a href="#单独设置左右栏宽度" class="headerlink" title="单独设置左右栏宽度"></a>单独设置左右栏宽度</h3><p><code>rail_width</code> 是全局值，也可以在 <code>rail</code> 区块里分开设置：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">rail:</span></span><br><span class="line">  <span class="attr">left:</span></span><br><span class="line">    <span class="attr">width:</span> <span class="string">280px</span></span><br><span class="line">  <span class="attr">right:</span></span><br><span class="line">    <span class="attr">width:</span> <span class="string">240px</span></span><br></pre></td></tr></table></figure><h2 id="响应式收栏顺序"><a href="#响应式收栏顺序" class="headerlink" title="响应式收栏顺序"></a>响应式收栏顺序</h2><p>窗口变窄时，主题按「<strong>先收右栏，再收左栏</strong>」的顺序处理：</p><table><thead><tr><th>视口宽度</th><th>布局</th></tr></thead><tbody><tr><td>&gt; 1280px</td><td>三栏完整显示</td></tr><tr><td>1024 ~ 1280px</td><td>隐藏右栏，左栏 + 正文</td></tr><tr><td>≤ 1024px</td><td>隐藏左栏，单栏</td></tr><tr><td>≤ 640px</td><td>单栏 + 更紧凑的内边距</td></tr></tbody></table><p>右栏先收起是因为它承载的是<strong>辅助信息</strong>（统计、日历、站点信息），<br>而左栏的个人名片和分类导航对站点辨识度更重要。</p><p>这两个断点写在 <code>themes/echo/source/css/echo.css</code> 里：</p><figure class="highlight css"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">/* 先收起右栏 */</span></span><br><span class="line"><span class="keyword">@media</span> (<span class="attribute">max-width</span>: <span class="number">1280px</span>) &#123;</span><br><span class="line">  <span class="selector-class">.rail-right</span> &#123; <span class="attribute">display</span>: none; &#125;</span><br><span class="line">  <span class="selector-class">.layout-main</span> &#123; <span class="attribute">max-width</span>: none; &#125;</span><br><span class="line">&#125;</span><br><span class="line"><span class="comment">/* 更窄后再收起左栏 */</span></span><br><span class="line"><span class="keyword">@media</span> (<span class="attribute">max-width</span>: <span class="number">1024px</span>) &#123;</span><br><span class="line">  <span class="selector-class">.rail-left</span> &#123; <span class="attribute">display</span>: none; &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><blockquote><p>右栏收起后，文章目录不会丢：正文顶部会出现一个可折叠的内嵌目录。</p></blockquote><h2 id="侧栏组件开关"><a href="#侧栏组件开关" class="headerlink" title="侧栏组件开关"></a>侧栏组件开关</h2><p><code>rail</code> 区块是总开关，各组件可以独立关闭：</p><figure class="highlight yaml"><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></pre></td><td class="code"><pre><span class="line"><span class="attr">rail:</span></span><br><span class="line">  <span class="attr">enable:</span> <span class="literal">true</span>      <span class="comment"># 总开关，false 则左右栏都不渲染</span></span><br><span class="line">  <span class="attr">left:</span></span><br><span class="line">    <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">right:</span></span><br><span class="line">    <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line"></span><br><span class="line"><span class="attr">profile:</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">music:</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">category:</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">tags:</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">stats:</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">calendar:</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">siteinfo:</span></span><br><span class="line">  <span class="attr">enable:</span> <span class="literal">true</span>      <span class="comment"># 站点信息</span></span><br></pre></td></tr></table></figure><p>关掉组件后，同一栏里剩下的组件会自动上移，不会留下空白。</p><h3 id="侧栏分类按页面自动过滤"><a href="#侧栏分类按页面自动过滤" class="headerlink" title="侧栏分类按页面自动过滤"></a>侧栏分类按页面自动过滤</h3><p>侧栏的「分类」组件会<strong>根据当前页面自动切换分类范围</strong>，不用手动配置：</p><table><thead><tr><th>所在页面</th><th>显示的分类</th></tr></thead><tbody><tr><td>首页</td><td>全部分类（文章 + 资源）</td></tr><tr><td>文章页、文章总页、文章分类页</td><td>仅文章分类</td></tr><tr><td>资源库总页、资源类型页</td><td>仅资源分类</td></tr></tbody></table><p>这样在资源库里不会再看到一堆跟资源无关的文章分类，侧栏始终和当前内容相关。</p><h2 id="深色模式"><a href="#深色模式" class="headerlink" title="深色模式"></a>深色模式</h2><p>配色模式三选一：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># auto 跟随系统 / dark 强制深色 / light 强制浅色</span></span><br><span class="line"><span class="attr">color_scheme:</span> <span class="string">auto</span></span><br></pre></td></tr></table></figure><p>选 <code>auto</code> 时，导航栏右侧会出现一个太阳&#x2F;月亮按钮，访客可以手动切换，<br>选择会记在 <code>localStorage</code> 里，下次访问保持。</p><h3 id="改主题配色"><a href="#改主题配色" class="headerlink" title="改主题配色"></a>改主题配色</h3><p>配色统一写在 <code>themes/echo/_config.yml</code> 的 <code>colors</code> 段里。<br><strong>只填你真正想改的项，其余全部由 <code>accent</code> 自动派生</strong>：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">colors:</span></span><br><span class="line">  <span class="attr">accent:</span> <span class="string">&#x27;#5b8cff&#x27;</span></span><br><span class="line">  <span class="comment"># secondary: &#x27;#8f6bff&#x27;</span></span><br></pre></td></tr></table></figure><p>改 <code>accent</code> 一个值，下面这些会一起变：</p><table><thead><tr><th>派生变量</th><th>用途</th></tr></thead><tbody><tr><td><code>--accent</code></td><td>按钮、选中态、链接、角标、进度条</td></tr><tr><td><code>--accent-soft</code></td><td>主色浅底（选中项背景、资源角标底色）</td></tr><tr><td><code>--accent-strong</code></td><td>深色模式正文里的主色，保证对比度</td></tr><tr><td><code>--accent-text</code></td><td>暗色模式的行内代码色</td></tr><tr><td><code>--accent-glow</code></td><td>主色发光阴影（卡片、按钮的彩色投影）</td></tr><tr><td><code>--secondary</code></td><td>渐变辅色，留空则由 <code>accent</code> 自动提亮</td></tr><tr><td><code>--brand-gradient</code></td><td>导航栏品牌方块的渐变</td></tr></tbody></table><p>也就是说，<strong>不需要去 CSS 里逐个替换颜色</strong>。</p><p>想更精细地微调，就显式覆盖对应变量（值写任意合法 CSS 颜色）：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">colors:</span></span><br><span class="line">  <span class="attr">accent:</span> <span class="string">&#x27;#e0454f&#x27;</span></span><br><span class="line">  <span class="attr">secondary:</span> <span class="string">&#x27;#ff8a5c&#x27;</span>          <span class="comment"># 渐变第二色</span></span><br><span class="line">  <span class="attr">accent-glow:</span> <span class="string">&#x27;rgba(224, 69, 79, .35)&#x27;</span></span><br></pre></td></tr></table></figure><p><code>colors</code> 里出现过的任何键都会输出成同名 CSS 变量，<br>所以自定义变量（如 <code>warn: &#39;#f59e0b&#39;</code>）也能在这里配。</p><blockquote><p>兼容性：老写法 <code>accent: &#39;#5b8cff&#39;</code> 仍然有效，等价于 <code>colors.accent</code>。</p></blockquote><h2 id="首页顶部大图（Hero）"><a href="#首页顶部大图（Hero）" class="headerlink" title="首页顶部大图（Hero）"></a>首页顶部大图（Hero）</h2><p>首页顶部是一块整幅大图，导航透明悬浮在图上：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">hero:</span></span><br><span class="line">  <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">  <span class="comment"># 背景图：相对 source 的路径，或完整 URL</span></span><br><span class="line">  <span class="attr">image:</span> <span class="string">/images/hero.svg</span></span><br><span class="line">  <span class="comment"># 高度，可写 520px / 60vh</span></span><br><span class="line">  <span class="attr">height:</span> <span class="string">520px</span></span><br><span class="line">  <span class="comment"># 暗色遮罩，越大文字越清晰</span></span><br><span class="line">  <span class="attr">overlay:</span> <span class="number">0.42</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">subtitle:</span> <span class="string">&#x27;&#x27;</span></span><br><span class="line">  <span class="attr">buttons:</span></span><br><span class="line">    <span class="bullet">-</span> <span class="attr">text:</span> <span class="string">进入资源库</span></span><br><span class="line">      <span class="attr">url:</span> <span class="string">/resources/</span></span><br><span class="line">      <span class="attr">icon:</span> <span class="string">layers</span></span><br><span class="line">      <span class="attr">primary:</span> <span class="literal">true</span></span><br><span class="line">    <span class="bullet">-</span> <span class="attr">text:</span> <span class="string">浏览归档</span></span><br><span class="line">      <span class="attr">url:</span> <span class="string">/archives/</span></span><br><span class="line">      <span class="attr">icon:</span> <span class="string">archive</span></span><br><span class="line">      <span class="attr">primary:</span> <span class="literal">false</span></span><br></pre></td></tr></table></figure><p>几点说明：</p><ul><li><code>image</code> 留空会回退到 <code>header.banner</code>，方便你复用同一张图。</li><li><code>title</code> &#x2F; <code>subtitle</code> 留空时，自动取 <code>index.banner_title</code> 与 <code>index.banner_subtitle</code>。</li></ul><h2 id="内页横幅（page-banner）"><a href="#内页横幅（page-banner）" class="headerlink" title="内页横幅（page-banner）"></a>内页横幅（page-banner）</h2><p><code>/articles/</code>、<code>/archives/</code>、分类页、标签页、资源库、独立页面顶部共用同一套横幅，<br>直接复用 <code>header.banner</code> 的图和遮罩：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">header:</span></span><br><span class="line">  <span class="attr">banner:</span> <span class="string">/images/covers/hexo-theme.svg</span></span><br><span class="line">  <span class="attr">overlay:</span> <span class="number">0.72</span></span><br></pre></td></tr></table></figure><p>横幅图通常比页面底色深，主题会在横幅底部铺一段<strong>渐隐</strong>，<br>让它溶进正文底色，避免浅色主题下出现「上深下浅」的硬边。</p><p>渐隐高度通过 CSS 变量调节（写在 <code>head.ejs</code> 注入的自定义样式里，或直接改主题 CSS）：</p><figure class="highlight css"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="selector-pseudo">:root</span> &#123; <span class="attr">--banner-fade</span>: <span class="number">104px</span>; &#125;</span><br></pre></td></tr></table></figure><p>值越大过渡越长。不想让横幅图片参与配色时，把 <code>header.banner</code> 留空即可——<br>横幅会退化成主色浅底渐变，与页面自然一体。</p><h3 id="浅色主题下横幅自动换色"><a href="#浅色主题下横幅自动换色" class="headerlink" title="浅色主题下横幅自动换色"></a>浅色主题下横幅自动换色</h3><p>深色大图和深色蒙层压在浅色页面上会又闷又割裂，所以<strong>浅色主题下横幅不使用大图</strong>，<br>改用明亮的<strong>浅蓝</strong>配色：</p><table><thead><tr><th>位置</th><th>浅色主题下的表现</th></tr></thead><tbody><tr><td>顶部导航横幅</td><td>浅蓝渐变底，导航文字与图标为高对比深色</td></tr><tr><td>内页横幅</td><td>浅蓝渐变底 + 纯白卡片，标题&#x2F;描述为深色</td></tr></tbody></table><p>想换成别的浅色（如薄荷绿、浅粉），改 <code>colors.banner_light</code> 即可：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">colors:</span></span><br><span class="line">  <span class="attr">banner_light:</span> <span class="string">&#x27;#dbeafe&#x27;</span>    <span class="comment"># 浅蓝（默认）</span></span><br><span class="line">  <span class="comment"># banner_light: &#x27;#d1fae5&#x27;  # 浅绿</span></span><br><span class="line">  <span class="comment"># banner_light: &#x27;#fce7f3&#x27;  # 浅粉</span></span><br></pre></td></tr></table></figure><p>主题会自动派生描边色与渐变尾色，所以只填一个色值即可。<br>文字颜色固定为深色系，在任何浅底上都能看清。</p><p>深色主题不受影响，仍使用完整大图 + 蒙层。<br>想让浅色主题也保留大图，把 <code>header.banner</code> 保持不变的同时，<br>在 <code>source/css/echo.css</code> 里删掉 <code>[data-theme=&#39;light&#39;] .site-header-bg</code> 与<br><code>[data-theme=&#39;light&#39;] .page-banner</code> 的 <code>background-image: none !important;</code> 这两行即可。</p><blockquote><p>浅色样式同时挂在 <code>[data-theme=&#39;light&#39;]</code> 和 <code>[data-theme-hint=&#39;light&#39;]</code> 两个选择器上。<br>后者是 <code>layout.ejs</code> 直接输出到 <code>&lt;html&gt;</code> 的配置值（<code>color_scheme</code> 为 light&#x2F;dark 时生效），<br>目的是让配色在 JS 执行前就正确，避免深色大图先闪一下再变浅蓝。<br>改动浅色专属样式时，<strong>两个选择器都要一起改</strong>，否则手动切换主题时会出现闪帧。</p></blockquote><h3 id="首页大图上的导航栏（例外说明）"><a href="#首页大图上的导航栏（例外说明）" class="headerlink" title="首页大图上的导航栏（例外说明）"></a>首页大图上的导航栏（例外说明）</h3><p>首页 Hero 是唯一「大图 + 透明导航」的状态，导航文字必须是<strong>白色</strong>才能在深色大图上看清，<br>所以浅色主题的换色规则会<strong>主动排除</strong>它：</p><figure class="highlight css"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="selector-attr">[data-theme=<span class="string">&#x27;light&#x27;</span>]</span> <span class="selector-class">.site-header</span><span class="selector-pseudo">:not</span>(<span class="selector-class">.has-hero</span>)<span class="selector-pseudo">:not</span>(<span class="selector-class">.is-scrolled</span>) <span class="selector-class">.nav-link</span> &#123; ... &#125;</span><br></pre></td></tr></table></figure><p>也就是说浅色规则只在「导航有实底」时生效。两种情况对照：</p><table><thead><tr><th>首页导航状态</th><th>表现</th></tr></thead><tbody><tr><td>顶部悬浮（在 Hero 大图上）</td><td>透明底 + 白字白图标，无分隔线</td></tr><tr><td>向下滚动后（<code>is-scrolled</code>）</td><td>实底 + 模糊 + 跟随当前主题的文字色</td></tr></tbody></table><p>这也是为什么浅色主题下首页顶部看不到那条浅蓝描边——它本来就该是”无边框悬浮”。</p><blockquote><p>如果你把 <code>header.banner</code> 或 <code>hero</code> 关掉，导航变成常驻实底，<br>此时浅色规则会重新生效，导航自动变为深色文字，这是预期行为。</p></blockquote><h3 id="横幅标题图标的颜色"><a href="#横幅标题图标的颜色" class="headerlink" title="横幅标题图标的颜色"></a>横幅标题图标的颜色</h3><p>横幅标题（<code>.page-banner-title</code>）里的图标跟随标题文字色（<code>currentColor</code>），<br><strong>不使用主色蓝</strong>，这样标题整体是一个视觉单元。<br>想单独给图标上色，改 <code>echo.css</code> 里的 <code>.page-banner-title .icon</code> 即可。</p><h3 id="换一张自己的图"><a href="#换一张自己的图" class="headerlink" title="换一张自己的图"></a>换一张自己的图</h3><p>把图片放进 <code>source/images/</code>，然后：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">hero:</span></span><br><span class="line">  <span class="attr">image:</span> <span class="string">/images/your-banner.jpg</span></span><br></pre></td></tr></table></figure><p>建议尺寸 <strong>1920×1080 以上、横向构图</strong>，主体内容尽量偏中间，<br>这样在窄屏下裁切时不会把重点切掉。</p><ul><li>按钮上可以放 <code>icon</code>，取值见第四篇的图标清单。</li><li><code>enable: false</code> 时首页会退回原来的「简介卡片 + 按钮」样式。</li></ul><h3 id="导航的固定行为"><a href="#导航的固定行为" class="headerlink" title="导航的固定行为"></a>导航的固定行为</h3><p>首页导航是<strong>固定在顶部</strong>的：在顶部时透明悬浮在大图上（白字），<br>向下滚动过大图后自动变成实底并恢复当前主题的文字色，保证在任何位置都清晰可读。<br>这一点在浅色主题下同样成立——首页大图始终是深色的，所以悬浮时始终用白字。</p><p>内页（文章、归档、资源库）的导航则是吸顶显示，配一条细横幅背景。</p><h2 id="内页横幅"><a href="#内页横幅" class="headerlink" title="内页横幅"></a>内页横幅</h2><p>内页顶部的横幅共用同一个背景图配置：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">header:</span></span><br><span class="line">  <span class="attr">banner:</span> <span class="string">/images/covers/hexo-theme.svg</span></span><br><span class="line">  <span class="attr">overlay:</span> <span class="number">0.72</span>      <span class="comment"># 遮罩透明度 0~1</span></span><br></pre></td></tr></table></figure><p>留空 <code>banner</code> 则不显示图片，只保留纯色渐变背景。</p><h2 id="下一篇"><a href="#下一篇" class="headerlink" title="下一篇"></a>下一篇</h2><p>下一篇讲资源板块：<code>resource</code> 字段的完整写法、网盘链接、提取码与配色。</p>]]></content>
    
    
    <summary type="html">Echo 主题指南第三篇：三栏布局的宽度参数、响应式收栏顺序、深色模式与首页 Hero 大图的配置方法。</summary>
    
    
    
    <category term="主题指南" scheme="https://blog.126330.xyz/categories/%E4%B8%BB%E9%A2%98%E6%8C%87%E5%8D%97/"/>
    
    
    <category term="Echo 主题" scheme="https://blog.126330.xyz/tags/Echo-%E4%B8%BB%E9%A2%98/"/>
    
    <category term="教程" scheme="https://blog.126330.xyz/tags/%E6%95%99%E7%A8%8B/"/>
    
    <category term="布局" scheme="https://blog.126330.xyz/tags/%E5%B8%83%E5%B1%80/"/>
    
    <category term="响应式" scheme="https://blog.126330.xyz/tags/%E5%93%8D%E5%BA%94%E5%BC%8F/"/>
    
  </entry>
  
  <entry>
    <title>Echo 主题使用指南（二）：安装、启用与站点配置</title>
    <link href="https://blog.126330.xyz/posts/9237dc72/"/>
    <id>https://blog.126330.xyz/posts/9237dc72/</id>
    <published>2026-10-06T01:30:00.000Z</published>
    <updated>2026-10-07T02:00:00.000Z</updated>
    
    <content type="html"><![CDATA[<span id="more"></span><h2 id="环境要求"><a href="#环境要求" class="headerlink" title="环境要求"></a>环境要求</h2><table><thead><tr><th>项目</th><th>建议版本</th></tr></thead><tbody><tr><td>Node.js</td><td>18 或更高（推荐 20+）</td></tr><tr><td>Hexo</td><td>6.x &#x2F; 7.x</td></tr><tr><td>包管理器</td><td>npm &#x2F; pnpm &#x2F; yarn 均可</td></tr></tbody></table><p>检查当前环境：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">node -v</span><br><span class="line">npx hexo version</span><br></pre></td></tr></table></figure><h2 id="安装主题"><a href="#安装主题" class="headerlink" title="安装主题"></a>安装主题</h2><p>把主题文件夹放进站点的 <code>themes/</code> 目录，然后修改站点根目录的 <code>_config.yml</code>：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># --- 主题 ---</span></span><br><span class="line"><span class="attr">theme:</span> <span class="string">echo</span></span><br></pre></td></tr></table></figure><blockquote><p>如果主题目录名不是 <code>echo</code>，<code>theme:</code> 的值要跟目录名一致。</p></blockquote><p>接着安装必要依赖（主题用到了 <code>hexo-pagination</code> 做分页）：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm install hexo-pagination --save</span><br></pre></td></tr></table></figure><h2 id="常用命令"><a href="#常用命令" class="headerlink" title="常用命令"></a>常用命令</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 本地预览，默认 http://localhost:4000</span></span><br><span class="line">npx hexo server</span><br><span class="line"></span><br><span class="line"><span class="comment"># 指定端口（端口被占用时很有用）</span></span><br><span class="line">npx hexo server -p 4000</span><br><span class="line"></span><br><span class="line"><span class="comment"># 清缓存后重新生成</span></span><br><span class="line">npx hexo clean &amp;&amp; npx hexo generate</span><br><span class="line"></span><br><span class="line"><span class="comment"># 生成并部署</span></span><br><span class="line">npx hexo clean &amp;&amp; npx hexo generate --deploy</span><br></pre></td></tr></table></figure><p>改完主题文件后，如果是 <code>hexo server</code> 正在运行，通常会自动热更新；<br>改了 <code>_config.yml</code> 或 <code>scripts/</code> 下的生成器，<strong>必须重启 server</strong> 才会生效。</p><h2 id="站点配置：资源板块"><a href="#站点配置：资源板块" class="headerlink" title="站点配置：资源板块"></a>站点配置：资源板块</h2><p>资源库的类型、路径和分页在<strong>站点</strong> <code>_config.yml</code> 里配置（不是主题配置里）：</p><figure class="highlight yaml"><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></pre></td><td class="code"><pre><span class="line"><span class="comment"># --- 资源板块 ---</span></span><br><span class="line"><span class="attr">resources:</span></span><br><span class="line">  <span class="attr">path:</span> <span class="string">resources</span>          <span class="comment"># 访问路径：/resources/</span></span><br><span class="line">  <span class="attr">per_page:</span> <span class="number">12</span>             <span class="comment"># 每页显示多少个资源</span></span><br><span class="line">  <span class="attr">types:</span>                   <span class="comment"># 资源类型，决定筛选条和图标</span></span><br><span class="line">    <span class="bullet">-</span> <span class="attr">key:</span> <span class="string">movie</span></span><br><span class="line">      <span class="attr">name:</span> <span class="string">影视资源</span></span><br><span class="line">      <span class="attr">icon:</span> <span class="string">film</span></span><br><span class="line">    <span class="bullet">-</span> <span class="attr">key:</span> <span class="string">game</span></span><br><span class="line">      <span class="attr">name:</span> <span class="string">游戏资源</span></span><br><span class="line">      <span class="attr">icon:</span> <span class="string">gamepad</span></span><br><span class="line">    <span class="bullet">-</span> <span class="attr">key:</span> <span class="string">mod</span></span><br><span class="line">      <span class="attr">name:</span> <span class="string">游戏</span> <span class="string">MOD</span></span><br><span class="line">      <span class="attr">icon:</span> <span class="string">puzzle</span></span><br><span class="line">    <span class="bullet">-</span> <span class="attr">key:</span> <span class="string">translation</span></span><br><span class="line">      <span class="attr">name:</span> <span class="string">MOD</span> <span class="string">汉化</span></span><br><span class="line">      <span class="attr">icon:</span> <span class="string">language</span></span><br><span class="line">    <span class="bullet">-</span> <span class="attr">key:</span> <span class="string">software</span></span><br><span class="line">      <span class="attr">name:</span> <span class="string">软件工具</span></span><br><span class="line">      <span class="attr">icon:</span> <span class="string">app</span></span><br><span class="line">    <span class="bullet">-</span> <span class="attr">key:</span> <span class="string">other</span></span><br><span class="line">      <span class="attr">name:</span> <span class="string">其他资源</span></span><br><span class="line">      <span class="attr">icon:</span> <span class="string">box</span></span><br></pre></td></tr></table></figure><p>几个要点：</p><ul><li><code>key</code> 要和文章 front-matter 里 <code>resource.type</code> 的值一致，否则会被归到「其他资源」。</li><li><code>icon</code> 取自主题内置图标集（见第四篇的图标清单）。</li><li><code>per_page</code> 同时作用于资源库和文章列表。</li></ul><h2 id="站点配置：文章板块"><a href="#站点配置：文章板块" class="headerlink" title="站点配置：文章板块"></a>站点配置：文章板块</h2><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># --- 文章板块 ---</span></span><br><span class="line"><span class="comment"># 只收录「普通文章」（不含 resource.enable 的资源帖）</span></span><br><span class="line"><span class="attr">articles:</span></span><br><span class="line">  <span class="attr">path:</span> <span class="string">articles</span></span><br><span class="line">  <span class="attr">per_page:</span> <span class="number">12</span></span><br></pre></td></tr></table></figure><h2 id="站点配置：固定链接"><a href="#站点配置：固定链接" class="headerlink" title="站点配置：固定链接"></a>站点配置：固定链接</h2><p>主题默认按「分类 &#x2F; 年 &#x2F; 月 &#x2F; 标题」组织链接，这样资源帖的 URL 天然带分类信息：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">permalink:</span> <span class="string">:category/:year/:month/:title/</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><br><span class="line">  <span class="attr">trailing_html:</span> <span class="literal">true</span></span><br></pre></td></tr></table></figure><p>改 <code>permalink</code> 会导致<strong>已有链接全部失效</strong>，如果站点已经上线过，建议先做跳转再改。</p><h2 id="主题配置总览"><a href="#主题配置总览" class="headerlink" title="主题配置总览"></a>主题配置总览</h2><p>主题自己的配置在 <code>themes/echo/_config.yml</code>，该文件已按功能分好 14 个区块、<br>每一项都带中文注释（含可填值与「站点配置可覆盖」的说明），可以直接当参考手册用。</p><table><thead><tr><th>区块</th><th>作用</th><th>详解位置</th></tr></thead><tbody><tr><td>一、外观与配色</td><td>配色模式、主色、派生变量、圆角</td><td>03 篇</td></tr><tr><td>二、三栏布局尺寸</td><td>总宽、栏距、中栏宽度、侧栏宽度</td><td>03 篇</td></tr><tr><td>三、站点图标</td><td>标签栏 &#x2F; 收藏夹 &#x2F; 导航栏品牌图标</td><td>05 篇</td></tr><tr><td>四、<code>header</code></td><td>内页顶部横幅</td><td>03 篇</td></tr><tr><td>五、<code>hero</code></td><td>首页顶部大图与按钮</td><td>03 篇</td></tr><tr><td>六、<code>menu</code></td><td>导航菜单（单行语法）</td><td>05 篇</td></tr><tr><td>七、<code>index</code></td><td>首页内容区（Hero 关闭时才显示）</td><td>03 篇</td></tr><tr><td>八、<code>rail</code></td><td>左右侧栏开关与宽度</td><td>03 篇</td></tr><tr><td>九、左栏组件</td><td><code>profile</code> &#x2F; <code>music</code> &#x2F; <code>category</code> &#x2F; <code>tags</code></td><td>06 篇</td></tr><tr><td>十、右栏组件</td><td><code>stats</code> &#x2F; <code>toc</code> &#x2F; <code>calendar</code> &#x2F; <code>siteinfo</code></td><td>06 篇</td></tr><tr><td>十一、<code>resource</code></td><td>资源字段、提取码、网盘配色</td><td>04 篇</td></tr><tr><td>十二、<code>post</code></td><td>文章页目录、版权、上下篇、简介</td><td>05 篇</td></tr><tr><td>十三、<code>comments</code></td><td>giscus 评论</td><td>06 篇</td></tr><tr><td>十四、<code>footer</code></td><td>页脚年份、Powered by、备案</td><td>06 篇</td></tr></tbody></table><h3 id="覆盖优先级"><a href="#覆盖优先级" class="headerlink" title="覆盖优先级"></a>覆盖优先级</h3><p>配置读取一律按这个顺序，<strong>前者覆盖后者</strong>：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">站点 _config.yml  &gt;  主题 _config.yml  &gt;  代码内置默认值</span><br></pre></td></tr></table></figure><p>所以想换成自己的图片、宽度、配色，优先写到站点 <code>_config.yml</code> 里（同名同层级即可），<br>不用动主题文件 —— 这样更新主题时不会冲突。目前支持站点覆盖的常用项：</p><table><thead><tr><th>站点配置项</th><th>覆盖主题的</th></tr></thead><tbody><tr><td><code>favicon</code></td><td><code>favicon</code>，同时用作导航栏品牌图标</td></tr><tr><td><code>author</code> &#x2F; <code>description</code></td><td>名片的 <code>name</code> &#x2F; <code>bio</code></td></tr><tr><td><code>title</code> &#x2F; <code>subtitle</code></td><td>导航栏品牌文字</td></tr><tr><td><code>url</code></td><td>站点信息里的 <code>domain</code></td></tr><tr><td><code>resources.path</code> &#x2F; <code>resources.types</code></td><td>资源库路径与类型图标</td></tr><tr><td><code>theme: echo</code></td><td>主题目录名</td></tr></tbody></table><h2 id="首次运行检查清单"><a href="#首次运行检查清单" class="headerlink" title="首次运行检查清单"></a>首次运行检查清单</h2><p>改完配置后，按这个清单过一遍：</p><ul><li><input disabled="" type="checkbox"> <code>theme: echo</code> 已设置</li><li><input disabled="" type="checkbox"> <code>resources.types</code> 里的 <code>key</code> 与文章 <code>resource.type</code> 对应</li><li><input disabled="" type="checkbox"> 站点 <code>url</code> 改成你自己的域名（影响 RSS 与站点地图）</li><li><input disabled="" type="checkbox"> 站点 <code>favicon</code> 换成自己的图标</li><li><input disabled="" type="checkbox"> 主题 <code>profile.avatar</code>、社交链接换成自己的</li><li><input disabled="" type="checkbox"> <code>footer.since</code> 改成建站年份</li><li><input disabled="" type="checkbox"> <code>stats.since</code> 与建站日期一致</li><li><input disabled="" type="checkbox"> <code>comments.giscus.repo</code> 换成你自己的公开仓库</li><li><input disabled="" type="checkbox"> <code>hero.image</code> 换成 1920×1080 以上的横向图</li></ul><h2 id="下一篇"><a href="#下一篇" class="headerlink" title="下一篇"></a>下一篇</h2><p>下一篇讲三栏布局、宽度调节、深色模式与首页大图。</p>]]></content>
    
    
    <summary type="html">Echo 主题指南第二篇：安装启用流程、站点 _config.yml 的关键配置项，以及本地预览与构建命令。</summary>
    
    
    
    <category term="主题指南" scheme="https://blog.126330.xyz/categories/%E4%B8%BB%E9%A2%98%E6%8C%87%E5%8D%97/"/>
    
    
    <category term="Hexo" scheme="https://blog.126330.xyz/tags/Hexo/"/>
    
    <category term="Echo 主题" scheme="https://blog.126330.xyz/tags/Echo-%E4%B8%BB%E9%A2%98/"/>
    
    <category term="教程" scheme="https://blog.126330.xyz/tags/%E6%95%99%E7%A8%8B/"/>
    
    <category term="配置" scheme="https://blog.126330.xyz/tags/%E9%85%8D%E7%BD%AE/"/>
    
  </entry>
  
  <entry>
    <title>Echo 主题使用指南（一）：认识主题与目录结构</title>
    <link href="https://blog.126330.xyz/posts/8eb881c5/"/>
    <id>https://blog.126330.xyz/posts/8eb881c5/</id>
    <published>2026-10-06T01:00:00.000Z</published>
    <updated>2026-10-07T02:00:00.000Z</updated>
    
    <content type="html"><![CDATA[<span id="more"></span><p>这是一套为「资源分享 + 技术博客」混合站点设计的 Hexo 主题。和常见主题最大的区别是：<br>它把<strong>文章</strong>和<strong>网盘资源</strong>当成两种一等公民，而不是让资源去硬凑文章的排版。</p><h2 id="这套主题解决什么问题"><a href="#这套主题解决什么问题" class="headerlink" title="这套主题解决什么问题"></a>这套主题解决什么问题</h2><p>现成的 Hexo 主题大多假设你的内容都是文字。但资源分享站点需要的东西完全不同：</p><table><thead><tr><th>需求</th><th>普通主题</th><th>Echo 主题</th></tr></thead><tbody><tr><td>版本 &#x2F; 平台 &#x2F; 大小 &#x2F; 语言</td><td>手动写进正文</td><td>结构化字段，自动渲染表格</td></tr><tr><td>多个网盘链接</td><td>一长串裸链接</td><td>卡片式列表 + 复制提取码</td></tr><tr><td>按类型筛选资源</td><td>用分类勉强凑</td><td>独立的资源库与筛选条</td></tr><tr><td>文章与资源混在一起</td><td>只能混着</td><td>首页 &#x2F; 文章 &#x2F; 资源库三个入口</td></tr></tbody></table><p>核心设计原则只有一句话：<strong>资源就是带有 <code>resource</code> 字段的文章</strong>。你不用学第二套写法，<br>只要在 front-matter 里加一段配置，同一篇文章就会自动进入资源库。</p><h2 id="三个内容入口"><a href="#三个内容入口" class="headerlink" title="三个内容入口"></a>三个内容入口</h2><p>主题把内容分成三条互不干扰的流：</p><ol><li><strong>首页 <code>/</code></strong> —— 顶部大图 + 资源分类入口 + 最新发布（文章与资源混排）</li><li><strong>文章 <code>/articles/</code></strong> —— 只收录普通文章，不出现资源帖</li><li><strong>资源库 <code>/resources/</code></strong> —— 只收录资源帖，可按影视 &#x2F; 游戏 &#x2F; MOD &#x2F; 汉化筛选</li></ol><p>判断规则非常简单：</p><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">resource.enable === true   →  资源帖，进资源库</span><br><span class="line">resource.enable 不存在/为假  →  普通文章，进文章页</span><br></pre></td></tr></table></figure><p>所以你不会遇到「同一篇内容在两个列表里重复出现」的问题。</p><h2 id="目录结构"><a href="#目录结构" class="headerlink" title="目录结构"></a>目录结构</h2><figure class="highlight text"><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></pre></td><td class="code"><pre><span class="line">themes/echo/</span><br><span class="line">├── _config.yml              # 主题配置（所有开关都在这里）</span><br><span class="line">├── layout/                  # EJS 模板</span><br><span class="line">│   ├── layout.ejs           # 全站骨架</span><br><span class="line">│   ├── index.ejs            # 首页</span><br><span class="line">│   ├── article-index.ejs    # 文章列表页</span><br><span class="line">│   ├── resource-index.ejs   # 资源库列表页</span><br><span class="line">│   ├── post.ejs             # 文章 / 资源详情页（两者共用）</span><br><span class="line">│   ├── page.ejs             # 独立页面</span><br><span class="line">│   ├── archive.ejs          # 归档</span><br><span class="line">│   ├── category.ejs         # 分类</span><br><span class="line">│   ├── tag.ejs              # 标签</span><br><span class="line">│   ├── _partial/            # 可复用组件（导航、卡片、分页…）</span><br><span class="line">│   └── _rail/               # 左右侧栏的各个小组件</span><br><span class="line">├── scripts/                 # 生成器与模板辅助函数</span><br><span class="line">│   ├── helper.js            # 所有 echo_* helper（图标、日期、配色派生…）</span><br><span class="line">│   ├── resource.js          # 资源库与搜索索引生成器</span><br><span class="line">│   ├── articles.js          # 文章列表生成器</span><br><span class="line">│   └── category.js          # 分类页生成器</span><br><span class="line">└── source/                  # 静态资源</span><br><span class="line">    ├── css/echo.css         # 全站样式</span><br><span class="line">    ├── js/echo.js           # 交互脚本</span><br><span class="line">    └── images/              # 主题自带图片</span><br></pre></td></tr></table></figure><h2 id="各部分职责"><a href="#各部分职责" class="headerlink" title="各部分职责"></a>各部分职责</h2><p><strong><code>_config.yml</code></strong> 是你唯一需要经常改的文件。配色、宽度、导航菜单、侧栏组件开关<br>全在这里，每个配置项都带中文注释。</p><p><strong><code>layout/</code></strong> 决定页面长什么样。<code>_partial/</code> 放的是被多个页面复用的片段，<br>比如 <code>post-card.ejs</code>（文章卡片）、<code>pagination.ejs</code>（分页）；<br><code>_rail/</code> 放的是侧栏小组件，比如 <code>profile.ejs</code>、<code>calendar.ejs</code>。<br>注意<strong>资源详情页和文章详情页共用 <code>post.ejs</code></strong> —— 靠 front-matter 里<br>有没有 <code>resource.enable</code> 来决定渲染成哪种形态。</p><p><strong><code>scripts/</code></strong> 是 Hexo 的扩展点。<code>resource.js</code> 负责把带 <code>resource</code> 字段的文章<br>聚合成 <code>/resources/</code> 下面的各个页面，同时输出 <code>search.json</code> 供站内搜索使用。<br><code>helper.js</code> 集中定义所有模板可调用的 <code>echo_*</code> 函数，改它会影响全部模板。</p><p><strong><code>source/</code></strong> 是纯静态资源，构建时会原样复制到 <code>public/</code>。</p><h2 id="内容与主题的边界"><a href="#内容与主题的边界" class="headerlink" title="内容与主题的边界"></a>内容与主题的边界</h2><p>一个容易被搞混的点：<strong>文章内容放在站点根目录的 <code>source/_posts/</code>，而不是主题里</strong>。</p><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">F:\Echo\</span><br><span class="line">├── source/                  # ← 你的内容在这里</span><br><span class="line">│   ├── _posts/              # 文章与资源帖（Markdown）</span><br><span class="line">│   ├── about/               # 独立页面</span><br><span class="line">│   └── images/covers/       # 封面图</span><br><span class="line">├── themes/echo/             # ← 主题（可以整个替换/分享）</span><br><span class="line">└── _config.yml              # 站点配置</span><br></pre></td></tr></table></figure><p>这样做的好处是：主题可以打包分享给别人，内容完全跟着你自己走。</p><h2 id="下一篇"><a href="#下一篇" class="headerlink" title="下一篇"></a>下一篇</h2><p>下一篇讲安装与启用，以及站点配置 <code>_config.yml</code> 里每一项的含义。</p>]]></content>
    
    
    <summary type="html">Echo 主题指南第一篇：这套主题解决什么问题、整体架构、目录结构，以及文件职责划分。</summary>
    
    
    
    <category term="主题指南" scheme="https://blog.126330.xyz/categories/%E4%B8%BB%E9%A2%98%E6%8C%87%E5%8D%97/"/>
    
    
    <category term="Hexo" scheme="https://blog.126330.xyz/tags/Hexo/"/>
    
    <category term="Echo 主题" scheme="https://blog.126330.xyz/tags/Echo-%E4%B8%BB%E9%A2%98/"/>
    
    <category term="教程" scheme="https://blog.126330.xyz/tags/%E6%95%99%E7%A8%8B/"/>
    
  </entry>
  
  <entry>
    <title>Hexo 文章链接优化：告别超长的中文编码 URL</title>
    <link href="https://blog.126330.xyz/posts/686a239/"/>
    <id>https://blog.126330.xyz/posts/686a239/</id>
    <published>2026-10-05T19:30:00.000Z</published>
    <updated>2026-10-05T19:30:00.000Z</updated>
    
    <content type="html"><![CDATA[<p>用 Hexo 写中文博客，早晚会遇到这个问题：文章的 URL 是一长串 <code>%E7%BB%99...</code>。</p><p>这篇记录我如何把链接从「超长乱码」改成「简短固定」的完整过程，包含原理、三种方案对比和踩坑细节。</p><h2 id="问题：中文标题进-URL-会怎样"><a href="#问题：中文标题进-URL-会怎样" class="headerlink" title="问题：中文标题进 URL 会怎样"></a>问题：中文标题进 URL 会怎样</h2><p>Hexo 默认的永久链接格式是这个：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">permalink:</span> <span class="string">:year/:month/:day/:title/</span></span><br></pre></td></tr></table></figure><p><code>:title</code> 会用<strong>文章标题</strong>作为路径。英文标题看着挺正常：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">https://example.com/2026/10/06/hello-world/</span><br></pre></td></tr></table></figure><p>但中文标题就出问题了。我写了一篇《HexoDeck 使用指南》，生成的链接是：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">https://example.com/2026/10/06/HexoDeck-给Hexo找个顺手的桌面客户端/</span><br></pre></td></tr></table></figure><p>浏览器会把它编码成：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">https://example.com/2026/10/06/HexoDeck-%E7%BB%99Hexo%E6%89%BE%E4%B8%AA%E9%A1%BA%E6%89%8B%E7%9A%84%E6%A1%8C%E9%9D%A2%E5%AE%A2%E6%88%B7%E7%AB%AF/</span><br></pre></td></tr></table></figure><p>一个标题变成 150 多个字符的乱码。<strong>这带来三个实际问题</strong>：</p><ol><li><strong>复制分享很难看</strong> —— 发到聊天软件、论坛、社交媒体里，整屏都是 <code>%E7%BB%99</code></li><li><strong>容易出错</strong> —— 手动复制时漏掉一个字符就 404；有些平台不允许这种字符</li><li><strong>改标题就断链</strong> —— 标题改了，URL 跟着变，之前所有的外链、搜索引擎收录、别人收藏的书签全部失效</li></ol><blockquote><p>第三条是最致命的。URL 应该<strong>稳定不变</strong>，而文章标题常常会改。</p></blockquote><h2 id="三种解决方案对比"><a href="#三种解决方案对比" class="headerlink" title="三种解决方案对比"></a>三种解决方案对比</h2><table><thead><tr><th>方案</th><th>链接形式</th><th>可读性</th><th>稳定性</th><th>依赖插件</th></tr></thead><tbody><tr><td><strong>拼音转换</strong></td><td><code>/posts/hexo-wen-zhang-lian-jie/</code></td><td>✅ 可读</td><td>❌ 改标题就变</td><td>hexo-permalink-pinyin</td></tr><tr><td><strong>短码（abbrlink）</strong></td><td><code>/posts/461fc5c1/</code></td><td>❌ 不可读</td><td>✅ 永久固定</td><td>hexo-abbrlink</td></tr><tr><td><strong>缩短结构</strong></td><td><code>/posts/给Hexo.../</code></td><td>✅ 可读</td><td>❌ 改标题就变</td><td>无</td></tr></tbody></table><p><strong>缩短结构</strong>只是把日期段去掉，中文编码问题依然存在 —— 不解决问题。</p><p><strong>拼音方案</strong>可读性最好，还对 SEO 友好（URL 里有关键词）。但长标题会变得非常冗长，比如《HexoDeck —— 给 Hexo 找个顺手的桌面客户端》会变成：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">/posts/hexodeck-gei-hexo-zhao-ge-shun-shou-de-zhuo-mian-ke-hu-duan/</span><br></pre></td></tr></table></figure><p>而且多音字可能转换错误，改标题链接还是会变。</p><p><strong>短码方案</strong>是中文博客最常用的做法，也是我最终选的。链接短、绝对不会有编码问题，最关键的是<strong>链接写入文章元数据后永久不变</strong>。</p><p>代价是不可读、URL 里没有关键词。但对个人博客来说，<strong>链接稳定</strong>比关键词更重要 —— 你不会希望读者收藏的文章链接某天失效。</p><h2 id="实施：改用-abbrlink"><a href="#实施：改用-abbrlink" class="headerlink" title="实施：改用 abbrlink"></a>实施：改用 abbrlink</h2><h3 id="第一步：安装插件"><a href="#第一步：安装插件" class="headerlink" title="第一步：安装插件"></a>第一步：安装插件</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm install hexo-abbrlink --save</span><br></pre></td></tr></table></figure><h3 id="第二步：修改站点配置"><a href="#第二步：修改站点配置" class="headerlink" title="第二步：修改站点配置"></a>第二步：修改站点配置</h3><p>打开站点根目录的 <code>_config.yml</code>，找到 URL 那一段，修改 <code>permalink</code> 并加上 <code>abbrlink</code> 配置：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># URL</span></span><br><span class="line"><span class="attr">url:</span> <span class="string">https://你的域名</span></span><br><span class="line"><span class="attr">permalink:</span> <span class="string">posts/:abbrlink/</span></span><br><span class="line"><span class="attr">permalink_defaults:</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">false</span>   <span class="comment"># 去掉链接尾部的 /index.html</span></span><br><span class="line">  <span class="attr">trailing_html:</span> <span class="literal">false</span>    <span class="comment"># 去掉链接尾部的 .html</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># abbrlink 配置</span></span><br><span class="line"><span class="attr">abbrlink:</span></span><br><span class="line">  <span class="attr">alg:</span> <span class="string">crc32</span>    <span class="comment"># 算法：crc32（默认）或 crc16</span></span><br><span class="line">  <span class="attr">rep:</span> <span class="string">hex</span>      <span class="comment"># 进制：hex（默认）或 dec</span></span><br><span class="line">  <span class="attr">drafts:</span> <span class="literal">false</span> <span class="comment"># 是否也给草稿生成</span></span><br></pre></td></tr></table></figure><p><strong>关于格式的说明</strong>：</p><ul><li><code>permalink: posts/:abbrlink/</code> —— <code>posts/</code> 前缀是我自己加的，让链接看起来有层次。你也可以直接用 <code>:abbrlink/</code> 让链接更短</li><li>如果按日期分目录可以用 <code>:year/:month/:day/:abbrlink/</code>，但短链的意义就在于短，一般不加</li><li><code>trailing_index: false</code> &#x2F; <code>trailing_html: false</code> 建议一起改，去掉链接尾部多余的 <code>/index.html</code></li></ul><p><strong>关于算法的说明</strong>：</p><ul><li><code>crc32</code> 生成十六进制短码（如 <code>461fc5c1</code>、<code>686a239</code> —— 最多 8 位，前导零会省略），<code>crc16</code> 只有 4 位（如 <code>a1b2</code>）</li><li>crc16 更短，但<strong>碰撞概率高</strong>（不同文章可能算出同一个码，导致链接冲突），<strong>建议用 crc32</strong></li><li><code>rep: dec</code> 会生成纯数字（如 <code>1176357825</code>），比 hex 长，一般不用</li></ul><h3 id="第三步：重新生成"><a href="#第三步：重新生成" class="headerlink" title="第三步：重新生成"></a>第三步：重新生成</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">hexo clean</span><br><span class="line">hexo generate</span><br></pre></td></tr></table></figure><p><strong>必须执行 <code>hexo clean</code></strong> —— 否则 Hexo 的增量缓存不会重新计算链接，旧的中文目录还会留在 <code>public/</code> 里。</p><p>生成时日志会显示每篇文章分配到的短码：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">INFO  Generate link [461fc5c1] for post [source/_posts/HexoDeck-给Hexo...md]</span><br><span class="line">INFO  Generated: posts/461fc5c1/index.html</span><br></pre></td></tr></table></figure><h3 id="第四步：验证"><a href="#第四步：验证" class="headerlink" title="第四步：验证"></a>第四步：验证</h3><p>打开 <code>public/posts/</code> 目录，应该看到短码命名的文件夹：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">public/posts/</span><br><span class="line">├── 461fc5c1/</span><br><span class="line">└── 9daba997/</span><br></pre></td></tr></table></figure><p>启动预览确认链接可以访问，旧的中文长链接目录已经消失。</p><h2 id="关键机制：链接写进了文章里"><a href="#关键机制：链接写进了文章里" class="headerlink" title="关键机制：链接写进了文章里"></a>关键机制：链接写进了文章里</h2><p>这一步很重要 —— abbrlink 会把生成的短码<strong>写入每篇文章的 front-matter</strong>：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">---</span></span><br><span class="line"><span class="attr">title:</span> <span class="string">测试</span></span><br><span class="line"><span class="attr">date:</span> <span class="string">&#x27;2026-10-05 08:24:34&#x27;</span></span><br><span class="line"><span class="attr">abbrlink:</span> <span class="string">9daba997</span>     <span class="comment"># ← 插件自动写入</span></span><br><span class="line"><span class="meta">---</span></span><br></pre></td></tr></table></figure><p>这意味着：</p><ul><li><strong>链接从此固定</strong> —— 以后改标题，URL 仍然是 <code>9daba997</code>，外部引用不会失效</li><li><strong>短码可手动指定</strong> —— 想给某篇重要文章一个好看的自定义短码？直接改 front-matter 里的 <code>abbrlink</code> 值即可（注意别和其他文章重复）</li><li><strong>不要手动删除</strong> —— 删掉后下次生成会重新计算，可能得到不同的码，导致链接变化</li></ul><h2 id="踩过的坑"><a href="#踩过的坑" class="headerlink" title="踩过的坑"></a>踩过的坑</h2><h3 id="改完链接后必须-clean"><a href="#改完链接后必须-clean" class="headerlink" title="改完链接后必须 clean"></a>改完链接后必须 clean</h3><p>我第一次改完配置直接 <code>hexo generate</code>，结果 <code>public/</code> 里<strong>新旧目录同时存在</strong> —— 新的短码目录生成了，旧的中文目录却没被删除。原因是 Hexo 的增量生成只处理变化的文件，不会清理已废弃的路径。</p><p><strong>所以改 permalink 后一定要先 <code>hexo clean</code>。</strong></p><h3 id="别忘了同步改-url"><a href="#别忘了同步改-url" class="headerlink" title="别忘了同步改 url"></a>别忘了同步改 url</h3><p>站点配置里的 <code>url</code> 默认为 <code>http://example.com</code>，<strong>这个必须改成你的真实域名</strong>。它影响：</p><ul><li><code>sitemap.xml</code> 里的链接</li><li>RSS 订阅里的链接</li><li>社交分享时的卡片链接</li><li>各种 SEO 元信息</li></ul><p>如果 <code>url</code> 是错的，搜索引擎抓到的是 <code>example.com</code>，得不偿失。</p><h3 id="已经有文章的话要注意"><a href="#已经有文章的话要注意" class="headerlink" title="已经有文章的话要注意"></a>已经有文章的话要注意</h3><p>如果站点<strong>已经上线并且有外链</strong>，改 permalink 会导致所有旧链接 404。这时有两个选择：</p><ol><li><strong>在服务器配 301 重定向</strong> —— 把旧链接永久重定向到新链接，保住已有权重</li><li><strong>保持原样</strong> —— 如果外链很少、影响不大，可以接受</li></ol><p>我的站点还在建设阶段，没有外链负担，所以直接改了。<strong>如果你也刚开始写，越早做越好。</strong></p><h2 id="小结"><a href="#小结" class="headerlink" title="小结"></a>小结</h2><table><thead><tr><th>项目</th><th>配置</th></tr></thead><tbody><tr><td>插件</td><td><code>hexo-abbrlink</code></td></tr><tr><td>permalink</td><td><code>posts/:abbrlink/</code></td></tr><tr><td>算法</td><td><code>crc32</code> + <code>hex</code>（十六进制短码）</td></tr><tr><td>关键操作</td><td>改完必须 <code>hexo clean</code></td></tr><tr><td>附带修改</td><td><code>url</code> 改真实域名、关闭 trailing_index &#x2F; trailing_html</td></tr></tbody></table><p>改完之后链接从 150 多字符的乱码变成 <code>posts/461fc5c1/</code>，复制分享干净多了，而且以后再改标题也不怕断链。</p><p>如果你用的是图形化工具管理博客，这些配置同样可以直接编辑 —— 比如 <a href="https://github.com/wanwuzhishi/HexoDeck">HexoDeck</a> 的「设置 → 高级」页就能直接改 <code>_config.yml</code>，改完预览自动重启。</p>]]></content>
    
    
    <summary type="html">中文标题生成的 URL 是一长串 %E7%BB%99，复制难看、容易出错、改标题就断链。这篇记录用 hexo-abbrlink 换成固定短链的完整过程，含三种方案对比与踩坑细节。</summary>
    
    
    
    <category term="建站笔记" scheme="https://blog.126330.xyz/categories/%E5%BB%BA%E7%AB%99%E7%AC%94%E8%AE%B0/"/>
    
    
    <category term="Hexo" scheme="https://blog.126330.xyz/tags/Hexo/"/>
    
    <category term="SEO" scheme="https://blog.126330.xyz/tags/SEO/"/>
    
    <category term="折腾记录" scheme="https://blog.126330.xyz/tags/%E6%8A%98%E8%85%BE%E8%AE%B0%E5%BD%95/"/>
    
  </entry>
  
  <entry>
    <title>HexoDeck —— 给 Hexo 找个顺手的桌面客户端</title>
    <link href="https://blog.126330.xyz/posts/461fc5c1/"/>
    <id>https://blog.126330.xyz/posts/461fc5c1/</id>
    <published>2026-10-05T19:10:00.000Z</published>
    <updated>2026-10-05T19:10:00.000Z</updated>
    
    <content type="html"><![CDATA[<p>写 Hexo 博客久了，总在重复同一套动作：打开编辑器写 Markdown → 切到终端 <code>hexo generate</code> → 再 <code>hexo deploy</code> → 回到浏览器刷新看效果。中间任何一步出错，都要在终端日志里翻半天。</p><p>于是我做了 <strong>HexoDeck</strong> —— 一个 Hexo 博客的桌面管理工具，把这些动作全搬进图形界面。</p><h2 id="它解决什么问题"><a href="#它解决什么问题" class="headerlink" title="它解决什么问题"></a>它解决什么问题</h2><p><strong>不用碰命令行</strong>。写作、预览、生成、部署、改配置，都在一个窗口里点几下完成。</p><p><strong>不改变你的站点</strong>。直接用它管理你现有的 Hexo 目录，站点里的配置、主题、插件、文章原样读入。改配置时用行级替换，<strong>注释和键顺序完整保留</strong>，首次修改还会自动备份。</p><p><strong>部署不再「假成功」</strong>。这是我自己踩过的坑：<code>hexo deploy</code> 在 git 推送失败时<strong>不会返回非零退出码</strong> —— 终端看起来一切正常，实际上什么都没推上去。HexoDeck 会从输出里识别真正的失败原因（仓库不存在、认证失败、分支为空、推送被拒等）并明确报错，还会在部署前自动生成一次，避免推上旧内容。</p><h2 id="主要功能"><a href="#主要功能" class="headerlink" title="主要功能"></a>主要功能</h2><h3 id="写作"><a href="#写作" class="headerlink" title="写作"></a>写作</h3><p>CodeMirror 6 编辑器，Markdown 语法高亮、格式化工具栏、<code>Ctrl+F</code> 查找替换。图片可以直接<strong>粘贴或拖拽</strong>，自动存到 <code>source/images/</code> 并插入链接。自动保存、分栏实时预览、全文搜索。</p><h3 id="页面与自定义文集"><a href="#页面与自定义文集" class="headerlink" title="页面与自定义文集"></a>页面与自定义文集</h3><p>「页面」页管理 <code>about</code>、<code>friends</code> 这类独立页面，新建时<strong>路径即文件夹</strong>（填 <code>about</code> 就创建 <code>about/index.md</code>）。</p><p>更有意思的是「<strong>自定义文集</strong>」—— 可以把站点里任意文件夹变成独立的文章管理入口。比如我把 <code>source/_dynamics</code> 做成侧栏的「说说」，点进去就能像管理文章一样管理短动态。文集可以加多个，名称和图标都能自定义（内置 15 种矢量图标，也能导入自己的图片）。</p><h3 id="站点配置"><a href="#站点配置" class="headerlink" title="站点配置"></a>站点配置</h3><p>基础配置表单化（标题、作者、语言、URL、永久链接、分页……），也可以直接编辑 <code>_config.yml</code> 原文，带 YAML 高亮和语法校验。</p><p>站点图标可以直接拖图片设置，会写进 <code>source/favicon.*</code> —— 所以<strong>你的网站也会用上这个图标</strong>。</p><h3 id="主题与插件"><a href="#主题与插件" class="headerlink" title="主题与插件"></a>主题与插件</h3><p>主题压缩包拖进窗口就能安装（自动识别并规整目录结构），已装主题一键切换，8 款热门主题可直接从市场安装。插件列表带中文说明，点「设置」直达配置键位置。</p><h3 id="预览"><a href="#预览" class="headerlink" title="预览"></a>预览</h3><p>整屏 iframe 显示<strong>主题渲染后的真实页面</strong>，文件一变自动刷新 —— 边写边看。预览可含草稿。</p><h3 id="统计"><a href="#统计" class="headerlink" title="统计"></a>统计</h3><p>文章数、草稿数、总字数、写作天数、最近 12 个月趋势、标签与分类排行、最长最短文章……</p><h2 id="一些设计上的取舍"><a href="#一些设计上的取舍" class="headerlink" title="一些设计上的取舍"></a>一些设计上的取舍</h2><p><strong>多个博客互不干扰</strong>：所有自定义内容（文集定义、参数配置、配置路径记忆）都<strong>按站点隔离</strong>，切换站点时自动重新加载。</p><p><strong>配置文件不自动定位</strong>：第一次编辑 <code>_config.yml</code> 或主题配置时，会弹窗让你指定文件。这是刻意的 —— 有些项目用 <code>_config.xxx.yml</code> 之类的多配置结构，自动猜测可能改错文件。</p><p><strong>开关参数写布尔值</strong>：自定义参数支持「开关式」，写入的 <code>true</code>&#x2F;<code>false</code> 是 YAML 布尔而非字符串。因为字符串 <code>&#39;false&#39;</code> 在主题模板里会被当成真值 —— 这个坑我想替使用者避开。</p><h2 id="获取与文档"><a href="#获取与文档" class="headerlink" title="获取与文档"></a>获取与文档</h2><div class="hd-dl">  <a class="hd-dl-main" href="https://github.com/wanwuzhishi/HexoDeck/releases/latest" target="_blank" rel="noopener">    <span class="hd-dl-ico">↓</span>    <span class="hd-dl-txt">      <strong>下载 HexoDeck</strong>      <small>前往 GitHub Releases 获取最新版</small>    </span>  </a>  <a class="hd-dl-doc" href="/hexodeck/">📖 查看详细使用文档</a></div><p><strong>安装很简单</strong>：</p><ul><li><strong>安装版</strong>（<code>HexoDeck-Setup-x.y.z.exe</code>）—— 向导式安装，支持自动更新，日常首选</li><li><strong>绿色版</strong>（<code>HexoDeck-x.y.z-win.zip</code>）—— 解压即用，零安装、秒启动</li></ul><blockquote><p>绿色包记得<strong>先解压再运行</strong>。应用内嵌了 Hexo 引擎，<strong>无需在本机装 Node.js</strong>。</p></blockquote><p>完整的使用说明我整理成了文档，建议从 <strong><a href="/posts/108e7a27/">使用指南</a></strong> 开始看，包含：</p><ul><li><a href="/posts/61fdb372/">快速开始</a> —— 从添加站点到发布第一篇</li><li><a href="/posts/9022c20b/">写作功能</a> —— 编辑器、图片、自定义参数</li><li><a href="/posts/59d25f9e/">页面与文集</a> —— 独立页面与自定义文集</li><li><a href="/posts/32270f59/">主题与站点配置</a> —— 主题、插件、配置文件</li><li><a href="/posts/72b2b36f/">发布与部署</a> —— 预览、生成、部署排错</li><li><a href="/posts/269b4e19/">常见问题</a> —— 疑难解答</li></ul><h2 id="最后"><a href="#最后" class="headerlink" title="最后"></a>最后</h2><p>目前<strong>只有 Windows 版本</strong>（10 &#x2F; 11 64 位），界面为中文。代码开源在 GitHub，MIT 协议，欢迎提 issue 或 PR。</p>]]></content>
    
    
    <summary type="html">把 Hexo 的写作、预览、生成、部署全搬进图形界面的桌面工具：不改动现有站点结构，改配置时保留注释与键顺序，部署失败会明确报错而不是假装成功。</summary>
    
    
    
    <category term="折腾记录" scheme="https://blog.126330.xyz/categories/%E6%8A%98%E8%85%BE%E8%AE%B0%E5%BD%95/"/>
    
    
    <category term="Hexo" scheme="https://blog.126330.xyz/tags/Hexo/"/>
    
    <category term="HexoDeck" scheme="https://blog.126330.xyz/tags/HexoDeck/"/>
    
    <category term="工具" scheme="https://blog.126330.xyz/tags/%E5%B7%A5%E5%85%B7/"/>
    
  </entry>
  
  <entry>
    <title>HexoDeck 常见问题</title>
    <link href="https://blog.126330.xyz/posts/269b4e19/"/>
    <id>https://blog.126330.xyz/posts/269b4e19/</id>
    <published>2026-10-05T19:06:00.000Z</published>
    <updated>2026-10-05T19:06:00.000Z</updated>
    
    <content type="html"><![CDATA[<p>汇总使用中的常见疑问与已知限制。</p><blockquote><p>返回 <a href="/posts/108e7a27/">使用指南总览</a></p></blockquote><h2 id="安装与启动"><a href="#安装与启动" class="headerlink" title="安装与启动"></a>安装与启动</h2><p><strong>Q：需要先安装 Node.js 吗？</strong></p><p>日常使用<strong>不需要</strong>。应用内嵌了 Hexo 引擎，写作、预览、生成、部署都能跑。</p><p>只有两个场景需要本机 Node.js：<strong>新建站点</strong>（要装依赖）和<strong>安装 &#x2F; 卸载插件</strong>（走 npm）。</p><p><strong>Q：绿色版双击没反应？</strong></p><p>确认是<strong>解压后</strong>再运行，不要在压缩包预览窗口里直接双击。压缩包内运行会因为解压慢而看起来”没反应”。</p><p><strong>Q：启动时提示找不到站点？</strong></p><p>上次打开的站点目录可能被移动或删除了。重新点「添加站点」选择正确位置即可。</p><h2 id="站点与数据"><a href="#站点与数据" class="headerlink" title="站点与数据"></a>站点与数据</h2><p><strong>Q：HexoDeck 会修改我的站点文件吗？</strong></p><p>只在<strong>你主动执行操作时</strong>修改，且都是最小改动：</p><ul><li>保存配置 → 行级替换，保留注释与键顺序，首改自动备份</li><li>编辑文章 → 只改你编辑的那个文件</li><li>设置站点图标 → 写入 <code>source/favicon.*</code></li></ul><p>应用本身不往站点里写任何自己的状态文件。</p><p><strong>Q：我的站点数据存在哪？</strong></p><p>应用自己的数据（最近站点、文集定义、配置路径记忆、应用设置）都存在 <code>%APPDATA%/hexodeck/hexodeck.json</code>，<strong>不进站点目录</strong>。</p><p>如果删掉这个文件，只会丢失应用记忆（最近站点、文集入口等），站点文件不受影响。</p><p><strong>Q：多个博客会混在一起吗？</strong></p><p>不会。所有自定义内容都<strong>按站点隔离</strong>：</p><table><thead><tr><th>内容</th><th>隔离方式</th></tr></thead><tbody><tr><td>文集定义</td><td>按站点路径分组</td></tr><tr><td>自定义参数定义（含类型与开关值）</td><td>按站点路径分组</td></tr><tr><td><code>_config.yml</code> 路径记忆</td><td>按站点</td></tr><tr><td>主题配置路径记忆</td><td>按「站点 + 主题」</td></tr></tbody></table><p>切换站点时界面会自动重新加载对应的数据。</p><h2 id="写作相关"><a href="#写作相关" class="headerlink" title="写作相关"></a>写作相关</h2><p><strong>Q：文章保存在哪？</strong></p><ul><li>正式文章 → 站点 <code>source/_posts/</code></li><li>草稿 → 站点 <code>source/_drafts/</code></li><li>文集文章 → 你指定的目录</li></ul><p>都是普通的 Markdown 文件，可以直接用其他编辑器打开。</p><p><strong>Q：删除文章能恢复吗？</strong></p><p>可以。删除是移入<strong>系统回收站</strong>，从回收站还原即可。</p><p><strong>Q：开关式参数写了 <code>false</code> 但主题还显示评论？</strong></p><p>这是最容易踩的坑 —— 检查 front-matter 里写的是布尔还是字符串：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">comments:</span> <span class="literal">false</span>      <span class="comment"># ✅ 布尔，主题能正确识别</span></span><br><span class="line"><span class="attr">comments:</span> <span class="string">&#x27;false&#x27;</span>    <span class="comment"># ❌ 字符串，在模板里是真值</span></span><br></pre></td></tr></table></figure><p>HexoDeck 的开关式参数会写<strong>布尔值</strong>，所以用开关式添加的参数不会有这个问题。如果你手动在 YAML 里写，注意别加引号。</p><p><strong>Q：结构化参数能写多复杂？提取码为什么变成了数字？</strong></p><p>结构化参数支持<strong>任意深度的嵌套对象与对象数组</strong> —— 键值对、列表、列表里再套对象都可以，层数不受限制。</p><p>要注意的是 YAML 的<strong>类型推断</strong>：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">password:</span> <span class="number">1234</span>        <span class="comment"># ❌ 被解析成数字</span></span><br><span class="line"><span class="attr">password:</span> <span class="string">&quot;1234&quot;</span>      <span class="comment"># ✅ 字符串</span></span><br><span class="line"><span class="attr">code:</span> <span class="number">001234</span>          <span class="comment"># ❌ 前导零丢失，变成 1234</span></span><br><span class="line"><span class="attr">code:</span> <span class="string">&quot;001234&quot;</span>        <span class="comment"># ✅ 保留前导零</span></span><br></pre></td></tr></table></figure><p>提取码、验证码、卡号这类「号码」都建议<strong>加引号</strong>。HexoDeck 会保留你写的引号，但如果你手写时漏了，YAML 规范层面它就已经是数字了 —— 某些主题模板做字符串比较时会因此出错。</p><p><strong>Q：字数统计是怎么算的？</strong></p><p>中文按<strong>字</strong>计，英文按<strong>单词</strong>计（汉字&#x2F;假名&#x2F;谚文逐字算，拉丁字母连成词算一个）。全应用统一这个口径：编辑器状态栏、文章列表、统计页都一致。</p><h2 id="预览与部署"><a href="#预览与部署" class="headerlink" title="预览与部署"></a>预览与部署</h2><p><strong>Q：预览显示不出来？</strong></p><ol><li>确认站点能正常生成 —— 去「发布」页点「生成静态页面」看有没有报错</li><li>检查端口占用 —— 预览会用 4000 起的空闲端口，一般不会冲突</li><li>如果预览页面空白，看「发布」页日志区有没有 hexo 报错</li></ol><p><strong>Q：部署显示成功但网站没变？</strong></p><p>先确认是不是真成功 —— 看日志区有没有报错。HexoDeck 会识别 git 推送失败并明确报错，如果日志里没有错误提示，说明推送确实成功了。</p><p>那么检查方向转向 GitHub 侧：</p><ul><li>仓库的 commit 时间是否更新</li><li>GitHub Pages 的构建状态（仓库 Settings → Pages）</li><li>浏览器缓存（强制刷新试试）</li></ul><p><strong>Q：部署提示”分支为空”？</strong></p><p>去「设置 → 部署」把分支填上（GitHub Pages 一般是 <code>main</code>），旁边有一键填入按钮。</p><p><strong>Q：仓库地址要加 <code>.git</code> 吗？</strong></p><p>建议加。<code>https://github.com/用户名/仓库</code> 这种形式在某些情况下会被 git 当成路径而非仓库，应用会提示你补全。</p><h2 id="已知限制"><a href="#已知限制" class="headerlink" title="已知限制"></a>已知限制</h2><ul><li><strong>仅支持 Windows</strong>（10 &#x2F; 11，64 位）。macOS &#x2F; Linux 暂无打包版本。</li><li><strong>界面语言为中文</strong>，暂无多语言支持。</li><li><strong>安装 &#x2F; 卸载插件需要本机 Node.js</strong> —— 日常写作、预览、生成、部署都不需要。</li><li><strong>文集内容是否被生成到博客取决于 Hexo 配置</strong> —— 下划线开头的目录（如 <code>source/_dynamics</code>）Hexo 默认跳过；想让内容上线，放进 <code>source/</code> 下的常规目录。</li></ul><h2 id="反馈问题"><a href="#反馈问题" class="headerlink" title="反馈问题"></a>反馈问题</h2><p>使用中遇到问题或有建议，欢迎在 GitHub 提 issue：</p><div class="hd-links">  <a class="hd-link" href="https://github.com/wanwuzhishi/HexoDeck" target="_blank" rel="noopener">项目仓库</a>  <a class="hd-link" href="https://github.com/wanwuzhishi/HexoDeck/issues" target="_blank" rel="noopener">问题反馈</a></div>]]></content>
    
    
    <summary type="html">汇总使用中的常见疑问与已知限制。</summary>
    
    
    
    <category term="HexoDeck" scheme="https://blog.126330.xyz/categories/HexoDeck/"/>
    
    
    <category term="Hexo" scheme="https://blog.126330.xyz/tags/Hexo/"/>
    
    <category term="HexoDeck" scheme="https://blog.126330.xyz/tags/HexoDeck/"/>
    
    <category term="文档" scheme="https://blog.126330.xyz/tags/%E6%96%87%E6%A1%A3/"/>
    
  </entry>
  
  <entry>
    <title>HexoDeck 发布与部署</title>
    <link href="https://blog.126330.xyz/posts/72b2b36f/"/>
    <id>https://blog.126330.xyz/posts/72b2b36f/</id>
    <published>2026-10-05T19:05:00.000Z</published>
    <updated>2026-10-05T19:05:00.000Z</updated>
    
    <content type="html"><![CDATA[<p>本篇介绍本地预览、构建与部署上线。</p><blockquote><p>返回 <a href="/posts/108e7a27/">使用指南总览</a></p></blockquote><h2 id="本地预览"><a href="#本地预览" class="headerlink" title="本地预览"></a>本地预览</h2><p>「<strong>预览</strong>」页提供整屏的本地预览：</p><ul><li>用 <strong>iframe 显示主题渲染后的真实博客页面</strong>（不是简化的 Markdown 预览）</li><li>站点文件一有变化，预览<strong>自动刷新</strong></li><li>顶部显示当前访问地址与运行状态</li></ul><h3 id="控制项"><a href="#控制项" class="headerlink" title="控制项"></a>控制项</h3><table><thead><tr><th>按钮</th><th>作用</th></tr></thead><tbody><tr><td><strong>包含草稿</strong></td><td>勾选后草稿也会被渲染（切换会自动重启预览使其生效）</td></tr><tr><td><strong>启动预览</strong></td><td>启动本地服务</td></tr><tr><td><strong>停止</strong></td><td>停止服务</td></tr><tr><td><strong>浏览器打开</strong></td><td>用系统默认浏览器打开预览地址</td></tr><tr><td><strong>刷新</strong></td><td>手动刷新 iframe</td></tr></tbody></table><p>预览使用随机可用端口（从 4000 起找空闲端口），不会和别的服务冲突。</p><blockquote><p>关闭站点或切换站点时，预览会自动停止。</p></blockquote><h2 id="构建与部署"><a href="#构建与部署" class="headerlink" title="构建与部署"></a>构建与部署</h2><p>「<strong>发布</strong>」页有三个操作：</p><table><thead><tr><th>操作</th><th>对应命令</th><th>说明</th></tr></thead><tbody><tr><td><strong>生成静态页面</strong></td><td><code>hexo generate</code></td><td>把源码渲染成 <code>public/</code> 下的 HTML</td></tr><tr><td><strong>部署上线</strong></td><td>先 <code>generate</code> 再 <code>hexo deploy</code></td><td>推送到远端仓库</td></tr><tr><td><strong>清理缓存</strong></td><td><code>hexo clean</code></td><td>删除 <code>public/</code> 与缓存，问题排查时用</td></tr></tbody></table><p>顶部会显示当前<strong>部署目标</strong>（仓库地址 + 分支），未配置时提示你去设置页填写。</p><h3 id="部署会自动先生成"><a href="#部署会自动先生成" class="headerlink" title="部署会自动先生成"></a>部署会自动先生成</h3><p>点「部署上线」后，流程是：</p><ol><li><strong>先执行一次 <code>hexo generate</code></strong> —— 确保推送的是<strong>最新内容</strong>，而不是上次生成的旧产物</li><li>生成成功后才执行 <code>hexo deploy</code> 推送</li></ol><blockquote><p>为什么这样做：<code>hexo deploy</code> 本身<strong>不会</strong>自动生成。如果只跑 deploy，推上线的是 <code>public/</code> 目录里已有的内容 —— 你新写的文章如果没手动生成过，就不会被推上去。</p></blockquote><h3 id="部署失败会被识别"><a href="#部署失败会被识别" class="headerlink" title="部署失败会被识别"></a>部署失败会被识别</h3><p>这是 HexoDeck 相比手动部署的一个重要改进：</p><p><code>hexo deploy</code> 在 git 推送失败时<strong>不会返回非零退出码</strong>，所以命令行里看起来是「成功」，实际上什么都没推上去 —— 这种「假成功」很容易让人困惑。</p><p>HexoDeck 会从命令输出里识别真正的失败原因并明确报错：</p><table><thead><tr><th>情况</th><th>提示</th></tr></thead><tbody><tr><td>仓库不存在</td><td>远程仓库不存在，请检查仓库地址</td></tr><tr><td>认证失败</td><td>认证失败，请检查 Git 凭据</td></tr><tr><td>推送被拒</td><td>推送被远端拒绝</td></tr><tr><td>分支为空</td><td>分支配置有误（<code>deploy.branch</code> 可能为空）</td></tr><tr><td>网络问题</td><td>无法访问远程仓库，请检查网络与权限</td></tr><tr><td>插件缺失</td><td>未安装部署插件（如 <code>hexo-deployer-git</code>）</td></tr></tbody></table><p>失败时不会给出「部署完成」的假提示，并且日志区能看到完整输出。</p><h3 id="运行日志"><a href="#运行日志" class="headerlink" title="运行日志"></a>运行日志</h3><p>页面底部的日志区实时显示每条命令的输出，可用于排查问题。日志支持一键清空，同时也会落地到日志文件（「设置 → 应用」可打开日志文件夹）。</p><h2 id="首次部署-GitHub-Pages-的完整流程"><a href="#首次部署-GitHub-Pages-的完整流程" class="headerlink" title="首次部署 GitHub Pages 的完整流程"></a>首次部署 GitHub Pages 的完整流程</h2><p>以「用户名.github.io」仓库为例：</p><h3 id="1-创建仓库"><a href="#1-创建仓库" class="headerlink" title="1. 创建仓库"></a>1. 创建仓库</h3><p>在 GitHub 创建一个名为 <code>用户名.github.io</code> 的<strong>公开</strong>仓库。</p><h3 id="2-配置部署信息"><a href="#2-配置部署信息" class="headerlink" title="2. 配置部署信息"></a>2. 配置部署信息</h3><p>在「设置 → 部署」里填：</p><ul><li>部署方式：<code>Git</code></li><li>仓库地址：<code>https://github.com/用户名/用户名.github.io.git</code></li><li>分支：<code>main</code>（点快捷填入按钮）</li></ul><h3 id="3-确认插件"><a href="#3-确认插件" class="headerlink" title="3. 确认插件"></a>3. 确认插件</h3><p>如果提示缺少 <code>hexo-deployer-git</code>，点「一键安装」。</p><h3 id="4-执行部署"><a href="#4-执行部署" class="headerlink" title="4. 执行部署"></a>4. 执行部署</h3><p>回到「发布」页，点「部署上线」。</p><h3 id="5-首次可能需要输入凭据"><a href="#5-首次可能需要输入凭据" class="headerlink" title="5. 首次可能需要输入凭据"></a>5. 首次可能需要输入凭据</h3><p>第一次推送时 git 会要求认证。推荐用 <strong>Personal Access Token</strong> 代替密码：</p><ol><li>GitHub → Settings → Developer settings → Personal access tokens</li><li>生成一个带 <code>repo</code> 权限的 token</li><li>推送时用户名填 GitHub 用户名，密码填这个 token</li></ol><p>或者改用 SSH 地址（<code>git@github.com:用户名/仓库.git</code>）并配置好 SSH 密钥。</p><h3 id="6-等待站点生效"><a href="#6-等待站点生效" class="headerlink" title="6. 等待站点生效"></a>6. 等待站点生效</h3><p>推送成功后，GitHub Pages 需要一两分钟构建。之后访问 <code>https://用户名.github.io</code> 即可看到你的博客。</p><h2 id="排查部署问题"><a href="#排查部署问题" class="headerlink" title="排查部署问题"></a>排查部署问题</h2><p><strong>部署后网站没更新？</strong></p><ol><li>检查日志区有没有报错</li><li>确认部署目标仓库地址与分支正确</li><li>登录 GitHub 看仓库最近的 commit 时间，确认推送是否真的成功</li></ol><p><strong>推送一直失败？</strong></p><ul><li>检查网络能否访问 GitHub</li><li>检查凭据是否有效（token 可能过期）</li><li>确认仓库存在且你有写权限</li></ul><p><strong>想重新开始？</strong></p><p>点「清理缓存」清除 <code>public/</code> 和缓存，再点「生成静态页面」全量重建。</p><hr><p><strong>下一步</strong>：常见问题 → <a href="/posts/269b4e19/">常见问题</a></p>]]></content>
    
    
    <summary type="html">本篇介绍本地预览、构建与部署上线。</summary>
    
    
    
    <category term="HexoDeck" scheme="https://blog.126330.xyz/categories/HexoDeck/"/>
    
    
    <category term="Hexo" scheme="https://blog.126330.xyz/tags/Hexo/"/>
    
    <category term="HexoDeck" scheme="https://blog.126330.xyz/tags/HexoDeck/"/>
    
    <category term="文档" scheme="https://blog.126330.xyz/tags/%E6%96%87%E6%A1%A3/"/>
    
  </entry>
  
  <entry>
    <title>HexoDeck 主题与站点配置</title>
    <link href="https://blog.126330.xyz/posts/32270f59/"/>
    <id>https://blog.126330.xyz/posts/32270f59/</id>
    <published>2026-10-05T19:04:00.000Z</published>
    <updated>2026-10-05T19:04:00.000Z</updated>
    
    <content type="html"><![CDATA[<p>本篇介绍站点配置、主题管理与插件。</p><blockquote><p>返回 <a href="/posts/108e7a27/">使用指南总览</a></p></blockquote><h2 id="基础配置"><a href="#基础配置" class="headerlink" title="基础配置"></a>基础配置</h2><p>「<strong>设置 → 基础配置</strong>」以表单形式管理 <code>_config.yml</code> 的常用项：</p><p>站点标题、副标题、描述、作者、语言、时区、网站 URL、根路径、永久链接格式、每页文章数、文章资源文件夹。</p><p>也可以在这里设置<strong>站点图标</strong> —— 选一张图片（支持 ico &#x2F; png &#x2F; jpg &#x2F; svg &#x2F; webp），也可以直接把图片拖到左侧方块上。</p><blockquote><p><strong>图标会写入站点 <code>source/favicon.*</code></strong>，所以 Hexo 生成后你的网站也会用上这个图标 —— 不只是应用里显示。</p></blockquote><h3 id="写入安全性"><a href="#写入安全性" class="headerlink" title="写入安全性"></a>写入安全性</h3><p>保存配置时，HexoDeck 采用<strong>行级替换</strong>：</p><ul><li>只改动目标键所在的那一行</li><li><strong>注释、空行、键的顺序全部原样保留</strong></li><li>保存前做 YAML 语法校验，写坏文件会被拦下</li><li><strong>首次修改自动备份</strong>为 <code>_config.yml.hexodeck.bak</code></li></ul><p>所以可以放心用 ── 你的配置注释不会丢。</p><h2 id="高级：直接编辑配置文件"><a href="#高级：直接编辑配置文件" class="headerlink" title="高级：直接编辑配置文件"></a>高级：直接编辑配置文件</h2><p>「<strong>设置 → 高级</strong>」提供 <code>_config.yml</code> 的<strong>原文编辑</strong>：</p><ul><li>YAML 语法高亮</li><li><code>Ctrl+F</code> 查找替换</li><li>保存前语法校验</li></ul><p>适合表单没覆盖的字段，或者某些插件的个性化配置。</p><h3 id="配置文件路径需要你指定"><a href="#配置文件路径需要你指定" class="headerlink" title="配置文件路径需要你指定"></a>配置文件路径需要你指定</h3><p><strong>应用不会自动定位配置文件</strong>。第一次打开「高级」页时，会弹窗让你指定要编辑的 <code>_config.yml</code>：</p><ul><li><strong>浏览选择</strong> —— 自己挑文件</li><li><strong>使用默认位置</strong> —— 一键采用站点根的 <code>_config.yml</code></li></ul><p>指定后会<strong>按站点记住</strong>，之后再打开不再询问。想换文件，点面板头部的「<strong>自定义路径</strong>」；想清空记忆重新询问，在弹窗里点「<strong>清除记录</strong>」。</p><blockquote><p>这样设计是为了避免误改 —— 有些项目会用 <code>_config.xxx.yml</code> 之类的多配置结构，自动定位可能改错文件。</p></blockquote><h2 id="部署配置"><a href="#部署配置" class="headerlink" title="部署配置"></a>部署配置</h2><p>「<strong>设置 → 部署</strong>」配置推送到哪里：</p><table><thead><tr><th>字段</th><th>说明</th></tr></thead><tbody><tr><td><strong>部署方式</strong></td><td>Git（GitHub Pages 等）或「不部署（仅本地）」</td></tr><tr><td><strong>仓库地址</strong></td><td>如 <code>https://github.com/用户名/用户名.github.io.git</code></td></tr><tr><td><strong>分支</strong></td><td>一般是 <code>main</code>；旁边有 main &#x2F; master 快捷填入按钮</td></tr></tbody></table><p><strong>配置不完整会提前提示</strong>：</p><ul><li>分支为空 → 明确警告（空分支会导致 git 推送失败）</li><li>仓库地址缺 <code>.git</code> 后缀 → 建议补全</li><li>未安装 <code>hexo-deployer-git</code> → 提供「一键安装」按钮</li></ul><h2 id="主题管理"><a href="#主题管理" class="headerlink" title="主题管理"></a>主题管理</h2><p>「<strong>设置 → 主题</strong>」集中管理主题。</p><h3 id="从压缩包安装"><a href="#从压缩包安装" class="headerlink" title="从压缩包安装"></a>从压缩包安装</h3><p>把主题压缩包<strong>拖进窗口</strong>，或点「浏览文件」选择。支持格式：</p><p><code>.zip</code> &#x2F; <code>.tar</code> &#x2F; <code>.tar.gz</code> &#x2F; <code>.tgz</code></p><p>解压后应用会自动识别主题目录（判断依据是含 <code>_config.yml</code> 或 <code>layout/</code>），并规整到站点的 <code>themes/</code> 目录 —— 单层或多层包裹都会自动处理，不会出现 <code>themes/xxx/xxx</code> 这种嵌套。</p><blockquote><p>同名目录会被拒绝，避免覆盖你已有的主题。</p></blockquote><h3 id="主题列表"><a href="#主题列表" class="headerlink" title="主题列表"></a>主题列表</h3><p>列出所有已安装主题（检测 <code>themes/</code> 目录 + npm 包 <code>hexo-theme-*</code>），点「<strong>一键切换</strong>」即可更换。切换后预览会自动重启。</p><h3 id="主题配置"><a href="#主题配置" class="headerlink" title="主题配置"></a>主题配置</h3><p>主题配置文件同样<strong>不自动定位</strong> —— 第一次编辑某个主题的配置时会弹窗让你指定：</p><ul><li>可以是站点根的<strong>覆盖文件</strong>（<code>_config.主题名.yml</code>，推荐做法）</li><li>也可以是<strong>主题自带的配置</strong>（<code>themes/主题名/_config.yml</code>）</li></ul><p>路径按「<strong>站点 + 主题</strong>」分别记忆 —— 换主题后各自有各自的配置路径，不会混。</p><p>编辑器带 YAML 语法高亮，保存前做语法校验。</p><h3 id="主题市场"><a href="#主题市场" class="headerlink" title="主题市场"></a>主题市场</h3><p>内置 8 款热门主题，点「安装」即通过 npm 装到站点里：</p><p>Butterfly、NexT、Fluid、Shoka、Stellar、安知鱼、Keep、Volantis</p><h2 id="插件管理"><a href="#插件管理" class="headerlink" title="插件管理"></a>插件管理</h2><p>「<strong>设置 → 插件</strong>」列出站点 <code>package.json</code> 里的所有 <code>hexo-*</code> 依赖：</p><ul><li>显示版本号与中文说明</li><li>安装 —— 输入包名（如 <code>hexo-generator-feed</code>）点安装</li><li>卸载 —— 带二次确认（渲染器类插件卸载后站点可能无法生成，会特别提醒）</li><li><strong>设置</strong> —— 点击直达该插件在配置文件里的配置键位置</li></ul><p>底部的「<strong>插件配置键</strong>」区域可以搜索插件名 &#x2F; 配置键 &#x2F; 说明，点击即可在配置文件里定位或插入配置模板。</p><blockquote><p>插件安装 &#x2F; 卸载需要本机有 Node.js。</p></blockquote><hr><p><strong>下一步</strong>：发布与部署 → <a href="/posts/72b2b36f/">发布与部署</a></p>]]></content>
    
    
    <summary type="html">本篇介绍站点配置、主题管理与插件。</summary>
    
    
    
    <category term="HexoDeck" scheme="https://blog.126330.xyz/categories/HexoDeck/"/>
    
    
    <category term="Hexo" scheme="https://blog.126330.xyz/tags/Hexo/"/>
    
    <category term="HexoDeck" scheme="https://blog.126330.xyz/tags/HexoDeck/"/>
    
    <category term="文档" scheme="https://blog.126330.xyz/tags/%E6%96%87%E6%A1%A3/"/>
    
  </entry>
  
  <entry>
    <title>HexoDeck 页面与文集</title>
    <link href="https://blog.126330.xyz/posts/59d25f9e/"/>
    <id>https://blog.126330.xyz/posts/59d25f9e/</id>
    <published>2026-10-05T19:03:00.000Z</published>
    <updated>2026-10-05T19:03:00.000Z</updated>
    
    <content type="html"><![CDATA[<p>本篇介绍两类内容管理：Hexo 的<strong>独立页面</strong>，以及 HexoDeck 特有的<strong>自定义文集</strong>。</p><blockquote><p>返回 <a href="/posts/108e7a27/">使用指南总览</a></p></blockquote><h2 id="页面"><a href="#页面" class="headerlink" title="页面"></a>页面</h2><p>「<strong>页面</strong>」页管理 Hexo 的独立页面 —— 比如「关于」「友链」「留言板」这类不属于文章列表的页面。</p><p>它们存放在 <code>source/</code> 下，<strong>不属于</strong> <code>_posts/</code> 或 <code>_drafts/</code> 目录，可以放在任意层级的子目录里。</p><h3 id="新建页面"><a href="#新建页面" class="headerlink" title="新建页面"></a>新建页面</h3><p>点「<strong>新建页面</strong>」，填写三项：</p><table><thead><tr><th>字段</th><th>说明</th><th>示例</th></tr></thead><tbody><tr><td><strong>页面标题</strong></td><td>页面的显示标题</td><td><code>关于</code></td></tr><tr><td><strong>页面路径</strong></td><td>相对 <code>source/</code> 的路径</td><td><code>about</code></td></tr><tr><td><strong>初始参数</strong></td><td>front-matter（YAML）</td><td><code>layout: page</code></td></tr></tbody></table><p><strong>路径即文件夹</strong>：填 <code>about</code> 就会创建 <code>source/about/index.md</code>；填 <code>docs/guide</code> 则创建 <code>source/docs/guide/index.md</code>。</p><blockquote><p><strong>参数会自动去重</strong>：如果初始参数里也写了 <code>title</code>，表单里的标题优先；写了 <code>date</code> 则沿用你填的日期，否则自动填当前时间。不需要手动避开。</p></blockquote><h3 id="页面编辑器"><a href="#页面编辑器" class="headerlink" title="页面编辑器"></a>页面编辑器</h3><p>页面编辑器与文章编辑器体验一致（分栏预览、自动保存、<code>Ctrl+S</code>），区别是：</p><ul><li><strong>没有分类和标签</strong>（页面通常不需要）</li><li><strong>front-matter 用 YAML 输入框直接编辑</strong> —— 包括标题和日期都在框里改，带语法高亮与实时校验</li><li>顶部只读展示当前标题、日期与路径</li></ul><p>因为标题也在这个框里，所以页面编辑器顶部<strong>不再有独立的标题输入框</strong> —— 同一份数据只在一处可编辑，不会出现两处不同步的问题。</p><h3 id="页面列表"><a href="#页面列表" class="headerlink" title="页面列表"></a>页面列表</h3><p>列表显示每页的标题、路径、日期与字数。<strong>路径可以点击</strong> —— 会直接在资源管理器中打开所在文件夹。</p><hr><h2 id="自定义文集"><a href="#自定义文集" class="headerlink" title="自定义文集"></a>自定义文集</h2><p><strong>文集</strong>是 HexoDeck 的特色功能：把站点里的<strong>任意文件夹</strong>变成独立的文章管理入口。</p><p>典型用法：你有 <code>source/_dynamics</code> 用来放短动态、有 <code>source/notes</code> 放学习笔记 —— 把它们各自做成侧栏入口，点进去就像管理「文章」一样管理它们。</p><h3 id="添加文集"><a href="#添加文集" class="headerlink" title="添加文集"></a>添加文集</h3><p>点侧栏的「<strong>+ 自定义</strong>」，填写三项：</p><ol><li><strong>名称</strong> —— 最多 8 个字（侧栏显示空间有限，超出会省略）</li><li><strong>图标</strong> —— 15 种内置矢量图标可选，或点最右侧的虚线格子<strong>导入自己的图片</strong>（≤200KB）</li><li><strong>目录</strong> —— 点「选择文件夹」，选中站点里的任意文件夹</li></ol><blockquote><p>目录可以是<strong>站点根目录本身、其子目录、或任意更深层级</strong>。选中站点外的文件夹会被拒绝，并有明确提示。</p></blockquote><h3 id="多个文集"><a href="#多个文集" class="headerlink" title="多个文集"></a>多个文集</h3><p><strong>可以添加任意多个文集</strong>。每添加一个，侧栏就多一个独立入口，各有自己的名称、图标和目录。文集定义<strong>按站点记忆</strong> —— 切换站点时只显示该站点的文集。</p><h3 id="管理文章"><a href="#管理文章" class="headerlink" title="管理文章"></a>管理文章</h3><p>点侧栏的文集入口，进入该文集的文章列表：</p><ul><li><strong>新建</strong> —— 点右上角「新建&lt;文集名&gt;」，标题输入后创建并打开编辑器</li><li><strong>编辑</strong> —— 与文章编辑器一致（分栏预览 &#x2F; 自动保存 &#x2F; 自定义参数），但没有分类标签</li><li><strong>删除</strong> —— 移入系统回收站</li><li><strong>刷新</strong> —— 重新读取目录里的文件</li></ul><p>列表里每篇文章显示标题、完整路径、日期与字数，<strong>路径可点击</strong>跳转到所在文件夹。</p><h3 id="编辑与移除文集"><a href="#编辑与移除文集" class="headerlink" title="编辑与移除文集"></a>编辑与移除文集</h3><p>在文集页顶部，标题右侧有「<strong>编辑</strong>」和「<strong>移除</strong>」两个按钮：</p><ul><li><strong>编辑</strong> —— 修改名称和图标（目录创建后不可更改）</li><li><strong>移除</strong> —— 从侧栏移除这个入口</li></ul><blockquote><p><strong>移除文集不会删除任何文件</strong>。目录和里面的 Markdown 原样保留，只是不再显示侧栏入口。重新添加即可恢复。</p></blockquote><h3 id="与「文章」的区别"><a href="#与「文章」的区别" class="headerlink" title="与「文章」的区别"></a>与「文章」的区别</h3><table><thead><tr><th></th><th>文章</th><th>文集</th></tr></thead><tbody><tr><td><strong>位置</strong></td><td>固定为 <code>source/_posts/</code></td><td>站点内任意文件夹</td></tr><tr><td><strong>分类标签</strong></td><td>支持</td><td>不支持（可用自定义参数替代）</td></tr><tr><td><strong>草稿</strong></td><td>支持</td><td>不支持</td></tr><tr><td><strong>hexo 生成</strong></td><td>一定生成</td><td>取决于 Hexo 对该目录的规则</td></tr></tbody></table><blockquote><p>提醒：文集里的 Markdown 是否会被 Hexo 生成到博客，取决于目录位置与你的 Hexo 配置。比如 <code>source/_dynamics</code> 以下划线开头，Hexo 默认会跳过；如果希望内容出现在博客上，请放进 <code>source/</code> 下的常规目录。</p></blockquote><hr><p><strong>下一步</strong>：主题与站点配置 → <a href="/posts/32270f59/">主题与站点配置</a></p>]]></content>
    
    
    <summary type="html">本篇介绍两类内容管理：Hexo 的独立页面，以及 HexoDeck 特有的自定义文集。</summary>
    
    
    
    <category term="HexoDeck" scheme="https://blog.126330.xyz/categories/HexoDeck/"/>
    
    
    <category term="Hexo" scheme="https://blog.126330.xyz/tags/Hexo/"/>
    
    <category term="HexoDeck" scheme="https://blog.126330.xyz/tags/HexoDeck/"/>
    
    <category term="文档" scheme="https://blog.126330.xyz/tags/%E6%96%87%E6%A1%A3/"/>
    
  </entry>
  
  <entry>
    <title>HexoDeck 写作功能</title>
    <link href="https://blog.126330.xyz/posts/9022c20b/"/>
    <id>https://blog.126330.xyz/posts/9022c20b/</id>
    <published>2026-10-05T19:02:00.000Z</published>
    <updated>2026-10-05T19:02:00.000Z</updated>
    
    <content type="html"><![CDATA[<p>本篇介绍文章与草稿的管理，以及编辑器的全部能力。</p><blockquote><p>返回 <a href="/posts/108e7a27/">使用指南总览</a></p></blockquote><h2 id="文章与草稿"><a href="#文章与草稿" class="headerlink" title="文章与草稿"></a>文章与草稿</h2><p>「<strong>文章</strong>」页管理两类内容：</p><table><thead><tr><th>类型</th><th>存放位置</th><th>说明</th></tr></thead><tbody><tr><td><strong>正式文章</strong></td><td><code>source/_posts/</code></td><td>会被生成到博客里</td></tr><tr><td><strong>草稿</strong></td><td><code>source/_drafts/</code></td><td>不会出现在博客，写好后可一键转为正式</td></tr></tbody></table><p>列表里每篇文章显示标题、状态、路径、日期、标签、分类、字数。点标题或「编辑」进入编辑器。</p><p><strong>草稿转正式</strong>：在编辑器顶部点「转为正式文章」，文件会从 <code>_drafts/</code> 移到 <code>_posts/</code>。</p><p><strong>删除</strong>：删除的文章会移入<strong>系统回收站</strong>，可以恢复；误删了去回收站找回来即可。</p><h2 id="编辑器工具栏"><a href="#编辑器工具栏" class="headerlink" title="编辑器工具栏"></a>编辑器工具栏</h2><p>编辑器顶部有两行格式化工具栏：</p><p><strong>第一行</strong>：标题（H1–H4）、加粗、斜体、代码块、引用、有序列表、无序列表、任务列表</p><p><strong>第二行</strong>：链接、图片、表格、分割线、清除格式、撤销、重做、<strong>＋</strong>（自定义片段）</p><p>选中文本后点对应按钮即可套用格式。所有按钮都有中文悬停提示。</p><h3 id="自定义插入片段"><a href="#自定义插入片段" class="headerlink" title="自定义插入片段"></a>自定义插入片段</h3><p>写文章时常要重复输入同样的内容 —— 版权声明、更新时间、标准结尾。第二行末尾的「<strong>＋</strong>」可以把这些做成<strong>一键插入的按钮</strong>：</p><ol><li>点「＋」打开「自定义插入片段」</li><li>填<strong>按钮名称</strong>（限 6 字，如「版权」「更新」）与<strong>要插入的内容</strong></li><li>添加后工具栏立刻出现该按钮，写文章时点一下即插入光标处</li></ol><p>内容支持 <code>&#123;&#123;date&#125;&#125;</code> 占位符，插入时自动替换为<strong>当天日期</strong> —— 适合做「本文更新于 2026-01-01」这类模板。</p><p>片段的编辑与删除都在同一个弹窗里完成。它是<strong>全局共用</strong>的（不像文集和参数定义按站点隔离），因为版权声明这类内容换站点时通常也要用。</p><h2 id="图片处理"><a href="#图片处理" class="headerlink" title="图片处理"></a>图片处理</h2><p>三种方式都能插图，都会<strong>自动保存到站点 <code>source/images/</code></strong> 并插入正确的 Markdown 链接：</p><ol><li><strong>直接粘贴</strong> —— 截图后 <code>Ctrl+V</code> 即插入</li><li><strong>拖拽</strong> —— 把图片文件拖进编辑区</li><li><strong>选择文件</strong> —— 用工具栏的图片按钮浏览选择</li></ol><p>图片文件名会自动处理（空格转连字符、加时间戳去重），避免中文名导致的路径问题。</p><h2 id="自动保存与分栏预览"><a href="#自动保存与分栏预览" class="headerlink" title="自动保存与分栏预览"></a>自动保存与分栏预览</h2><ul><li><strong>自动保存</strong>：停止输入后自动存盘，延迟可在「设置 → 应用」调整（0.5–10 秒）</li><li><strong>分栏预览</strong>：编辑器右侧实时渲染 Markdown 效果，开关状态会记住</li><li><strong><code>Ctrl+F</code></strong>：在正文中查找替换</li><li><strong>状态栏</strong>：底部显示字数与保存状态（有未保存改动时会提示）</li></ul><h2 id="全文搜索"><a href="#全文搜索" class="headerlink" title="全文搜索"></a>全文搜索</h2><p>「文章」页顶部的搜索框支持<strong>全文检索</strong>：</p><ul><li>搜标题、标签、分类 —— 立即匹配</li><li>搜正文 —— 稍等片刻，命中结果会显示<strong>上下文摘录</strong></li></ul><h2 id="文章参数"><a href="#文章参数" class="headerlink" title="文章参数"></a>文章参数</h2><p>编辑器右侧的「<strong>文章参数</strong>」侧栏（默认收起，点顶部按钮展开）包含：</p><p><strong>分类与标签</strong> —— 输入后回车即可新建，支持多级分类。</p><p><strong>自定义参数</strong> —— 给文章加任意 front-matter 字段。参数有三种类型：</p><table><thead><tr><th>类型</th><th>界面形态</th><th>写入方式</th></tr></thead><tbody><tr><td><strong>键值式</strong></td><td>文本输入框</td><td>原样写入字符串</td></tr><tr><td><strong>开关式</strong></td><td>可勾选的方框</td><td>勾选&#x2F;取消写入你指定的值</td></tr><tr><td><strong>结构化</strong></td><td>YAML 编辑框（语法高亮）</td><td>支持嵌套对象与对象数组</td></tr></tbody></table><p>添加参数时可以选择类型、填中文显示名与英文键名。开关式还能自定义选中&#x2F;取消时写入的值（默认 <code>true</code> &#x2F; <code>false</code>）。</p><blockquote><p><strong>关于开关式参数</strong>：写入的 <code>true</code> &#x2F; <code>false</code> 是 <strong>YAML 布尔值</strong>而不是字符串。这点很重要 —— 字符串 <code>&#39;false&#39;</code> 在主题模板里会被当成真值，导致开关失效。</p></blockquote><h3 id="结构化参数：写资源卡这类复杂字段"><a href="#结构化参数：写资源卡这类复杂字段" class="headerlink" title="结构化参数：写资源卡这类复杂字段"></a>结构化参数：写资源卡这类复杂字段</h3><p>游戏资源、网盘分享类文章常有这样的 front-matter —— 一个 <code>resource</code> 键，里面既有标量字段，又有多条下载链接：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">resource:</span></span><br><span class="line">  <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">type:</span> <span class="string">mod</span></span><br><span class="line">  <span class="attr">version:</span> <span class="string">v3.1.4</span></span><br><span class="line">  <span class="attr">platform:</span> <span class="string">Windows</span></span><br><span class="line">  <span class="attr">size:</span> <span class="number">1.8</span> <span class="string">GB</span></span><br><span class="line">  <span class="attr">language:</span> <span class="string">简体中文</span></span><br><span class="line">  <span class="attr">links:</span></span><br><span class="line">    <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">蓝奏云</span></span><br><span class="line">      <span class="attr">url:</span> <span class="string">https://example.com</span></span><br><span class="line">      <span class="attr">password:</span> <span class="string">echo</span></span><br><span class="line">      <span class="attr">note:</span> <span class="string">不限速</span></span><br><span class="line">    <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">百度网盘</span></span><br><span class="line">      <span class="attr">url:</span> <span class="string">https://example.com</span></span><br><span class="line">      <span class="attr">password:</span> <span class="string">&quot;1234&quot;</span></span><br></pre></td></tr></table></figure><p>这种嵌套结构用普通文本输入框写不了（会被压成字符串而丢失数据），所以「结构化」类型提供一个<strong>带语法高亮的 YAML 编辑框</strong>，直接写或粘贴即可。</p><p><strong>模板一键套用</strong>：点参数卡片上的「<strong>模板</strong>」按钮，内置 5 个骨架可选 ——</p><table><thead><tr><th>模板</th><th>内容</th></tr></thead><tbody><tr><td>游戏资源卡</td><td>资源信息 + 多网盘链接（含版本、平台、大小）</td></tr><tr><td>多网盘链接</td><td>只有下载链接列表</td></tr><tr><td>更新日志</td><td>多版本更新记录（版本号 &#x2F; 日期 &#x2F; 变更项）</td></tr><tr><td>视频嵌入</td><td>视频地址 &#x2F; 封面 &#x2F; 作者</td></tr><tr><td>图片画廊</td><td>多张图 + 说明文字</td></tr></tbody></table><p>点一下即填入，改值就行。也可以把当前填好的内容<strong>存为自己的模板</strong>，下次直接套用。</p><p><strong>自动识别</strong>：打开已有文章时，只要某个字段的值是嵌套对象或对象数组，就会自动按结构化类型处理 —— 不用手动改类型，也不会被写坏。</p><p><strong>语法校验</strong>：YAML 写错时输入框标红、暂停自动保存并在状态栏提示，不会把坏数据写进文件。</p><blockquote><p><strong>小提示</strong>：提取码、验证码这类值建议<strong>加引号</strong>（<code>password: &quot;1234&quot;</code>）。YAML 规范里裸写的 <code>1234</code> 会被解析成数字，加引号才是字符串 —— 否则某些主题模板做字符串比较时会出错。</p></blockquote><p><strong>参数定义按站点记忆</strong>：在 A 站配置的参数不会跑到 B 站；同一站点里，新文章会自动带上本站在用的参数名，你只需要逐篇填值。</p><h2 id="其他元数据"><a href="#其他元数据" class="headerlink" title="其他元数据"></a>其他元数据</h2><p>侧栏底部还有「其他元数据」区域，只读展示 front-matter 里的其余字段（比如主题注入的 <code>layout</code>、<code>comments</code>），避免误改这些由主题或插件控制的键。</p><hr><p><strong>下一步</strong>：页面管理与自定义文集 → <a href="/posts/59d25f9e/">页面与文集</a></p>]]></content>
    
    
    <summary type="html">本篇介绍文章与草稿的管理，以及编辑器的全部能力。</summary>
    
    
    
    <category term="HexoDeck" scheme="https://blog.126330.xyz/categories/HexoDeck/"/>
    
    
    <category term="Hexo" scheme="https://blog.126330.xyz/tags/Hexo/"/>
    
    <category term="HexoDeck" scheme="https://blog.126330.xyz/tags/HexoDeck/"/>
    
    <category term="文档" scheme="https://blog.126330.xyz/tags/%E6%96%87%E6%A1%A3/"/>
    
  </entry>
  
  <entry>
    <title>HexoDeck 快速开始</title>
    <link href="https://blog.126330.xyz/posts/61fdb372/"/>
    <id>https://blog.126330.xyz/posts/61fdb372/</id>
    <published>2026-10-05T19:01:00.000Z</published>
    <updated>2026-10-05T19:01:00.000Z</updated>
    
    <content type="html"><![CDATA[<p>本篇带你完成从零到发布第一篇博客的完整流程。</p><blockquote><p>返回 <a href="/posts/108e7a27/">使用指南总览</a></p></blockquote><h2 id="一、添加站点"><a href="#一、添加站点" class="headerlink" title="一、添加站点"></a>一、添加站点</h2><p>首次启动 HexoDeck，会看到欢迎页。点击「<strong>添加站点</strong>」，在文件选择器里选中你的 Hexo 博客根目录 —— 也就是<strong>包含 <code>_config.yml</code> 的那个文件夹</strong>。</p><p>选中后应用会校验这个目录：</p><ul><li>找不到 <code>_config.yml</code> → 会明确提示”所选目录不是 Hexo 站点”</li><li>校验通过 → 站点信息（标题、副标题、文章数）立刻显示在界面里</li></ul><p>添加过的站点会记住。下次启动会自动打开上次使用的站点。</p><h2 id="二、认识界面"><a href="#二、认识界面" class="headerlink" title="二、认识界面"></a>二、认识界面</h2><p>界面分为三个区域：</p><table><thead><tr><th>区域</th><th>位置</th><th>作用</th></tr></thead><tbody><tr><td><strong>侧边导航</strong></td><td>最左</td><td>切换功能页：站点 &#x2F; 文章 &#x2F; 页面 &#x2F; 自定义文集 &#x2F; 统计 &#x2F; 预览 &#x2F; 发布 &#x2F; 设置</td></tr><tr><td><strong>主工作区</strong></td><td>中间</td><td>当前页面的内容，随导航切换</td></tr><tr><td><strong>信息栏</strong></td><td>最右</td><td>站点信息、统计概览、快捷操作、最近文章</td></tr></tbody></table><p>侧边栏底部有两个按钮：<strong>主题切换</strong>（亮色 &#x2F; 暗色 &#x2F; 跟随系统三态循环）和<strong>收起侧边栏</strong>。</p><blockquote><p>窗口顶部是自绘的标题栏，会显示当前站点的图标与名称。按住它拖动可以移动窗口，双击可最大化。</p></blockquote><h2 id="三、写第一篇文章"><a href="#三、写第一篇文章" class="headerlink" title="三、写第一篇文章"></a>三、写第一篇文章</h2><ol><li>左侧导航点「<strong>文章</strong>」</li><li>点右上角「<strong>新建文章</strong>」，输入标题，回车</li><li>自动进入编辑器，开始写作</li></ol><p>编辑器右侧可以随时开启：</p><ul><li><strong>预览面板</strong>（顶部「◨ 预览已开」）—— 分栏看渲染效果</li><li><strong>参数侧栏</strong>（顶部「▥ 参数已关」）—— 填分类、标签、自定义参数</li></ul><p>写作内容会<strong>自动保存</strong>（默认停止输入 1.5 秒后），也可以随时按 <code>Ctrl+S</code> 手动保存。</p><h2 id="四、看效果"><a href="#四、看效果" class="headerlink" title="四、看效果"></a>四、看效果</h2><p>左侧导航点「<strong>预览</strong>」，点「<strong>启动预览</strong>」：</p><ul><li>整屏显示主题渲染后的<strong>真实博客页面</strong></li><li>你在编辑器里的改动一保存，预览<strong>自动刷新</strong></li><li>想看得更大，点「浏览器打开」用系统浏览器查看</li></ul><p>如果文章还没写完，勾上「<strong>包含草稿</strong>」也能预览（切换后预览会自动重启使其生效）。</p><h2 id="五、发布上线"><a href="#五、发布上线" class="headerlink" title="五、发布上线"></a>五、发布上线</h2><p>左侧导航点「<strong>发布</strong>」：</p><ol><li>先确认顶部显示的<strong>部署目标</strong>是否正确（仓库地址 + 分支）</li><li>如果显示「未配置部署目标」，去「设置 → 部署」填写仓库地址与分支</li><li>点「<strong>部署上线</strong>」，确认后开始</li></ol><p>部署流程会<strong>自动先生成</strong>静态页面，再推送到远端 —— 所以不用担心推上去的是旧内容。</p><blockquote><p>首次使用 Git 部署如果提示缺少 <code>hexo-deployer-git</code> 插件，在「设置 → 部署」页点「一键安装」即可。</p></blockquote><h2 id="六、下次打开"><a href="#六、下次打开" class="headerlink" title="六、下次打开"></a>六、下次打开</h2><p>再次启动 HexoDeck 会自动打开上次的站点，直接继续写作即可。想切换博客，点右栏站点卡片的「切换站点」，在列表里点另一个站点。</p><hr><p><strong>下一步</strong>：了解完整的写作功能 → <a href="/posts/9022c20b/">写作功能</a></p>]]></content>
    
    
    <summary type="html">本篇带你完成从零到发布第一篇博客的完整流程。</summary>
    
    
    
    <category term="HexoDeck" scheme="https://blog.126330.xyz/categories/HexoDeck/"/>
    
    
    <category term="Hexo" scheme="https://blog.126330.xyz/tags/Hexo/"/>
    
    <category term="HexoDeck" scheme="https://blog.126330.xyz/tags/HexoDeck/"/>
    
    <category term="文档" scheme="https://blog.126330.xyz/tags/%E6%96%87%E6%A1%A3/"/>
    
  </entry>
  
  <entry>
    <title>HexoDeck 使用指南</title>
    <link href="https://blog.126330.xyz/posts/108e7a27/"/>
    <id>https://blog.126330.xyz/posts/108e7a27/</id>
    <published>2026-10-05T19:00:00.000Z</published>
    <updated>2026-10-05T19:00:00.000Z</updated>
    
    <content type="html"><![CDATA[<p><strong>HexoDeck</strong> 是一个 Hexo 博客的桌面管理工具，把写作、预览、发布、配置整个流程搬进图形界面 —— 不用碰命令行。</p><p>它不会要求你改变现有的站点结构：直接使用你已有的 Hexo 目录，站点里的配置、主题、插件、文章原样读入；应用只做增量编辑，改配置时<strong>注释与键顺序都完整保留</strong>。</p><h2 id="下载安装"><a href="#下载安装" class="headerlink" title="下载安装"></a>下载安装</h2><div class="hd-download">  <a class="hd-download-btn" href="https://github.com/wanwuzhishi/HexoDeck/releases/latest" target="_blank" rel="noopener">    <span class="hd-download-icon">↓</span>    <span class="hd-download-text">      <strong>下载 HexoDeck</strong>      <small>前往 GitHub Releases 获取最新版（安装版 / 绿色版）</small>    </span>  </a></div><p>打开下载页面后，选择其中一个即可：</p><table><thead><tr><th>版本</th><th>文件名</th><th>说明</th></tr></thead><tbody><tr><td><strong>安装版</strong>（推荐）</td><td><code>HexoDeck-Setup-x.y.z.exe</code></td><td>向导式安装，可选安装目录；<strong>支持自动更新</strong></td></tr><tr><td><strong>绿色版</strong></td><td><code>HexoDeck-x.y.z-win.zip</code></td><td>解压即用，零安装、秒启动，可放 U 盘</td></tr></tbody></table><blockquote><p><strong>绿色包请先解压再运行</strong>，不要在压缩包里直接双击。解压后启动不到 1 秒。</p></blockquote><p><strong>环境要求</strong>：Windows 10 &#x2F; 11（64 位）。</p><blockquote><p>无需安装 Node.js —— 应用内嵌了 Hexo 引擎；站点里已有的 hexo 与插件会优先使用，与你的原有环境保持一致。</p></blockquote><h2 id="文档目录"><a href="#文档目录" class="headerlink" title="文档目录"></a>文档目录</h2><p>本指南分为以下几个部分，建议按顺序阅读：</p><ol><li><strong><a href="/posts/61fdb372/">快速开始</a></strong> —— 添加站点、认识界面、发布第一篇文章</li><li><strong><a href="/posts/9022c20b/">写作功能</a></strong> —— 文章、草稿、编辑器工具栏、图片、全文搜索</li><li><strong><a href="/posts/59d25f9e/">页面与文集</a></strong> —— 独立页面管理，以及把任意文件夹当作文章库</li><li><strong><a href="/posts/32270f59/">主题与站点配置</a></strong> —— 主题安装切换、站点配置、配置文件直编</li><li><strong><a href="/posts/72b2b36f/">发布与部署</a></strong> —— 本地预览、生成、一键部署到 GitHub Pages</li><li><strong><a href="/posts/269b4e19/">常见问题</a></strong> —— 疑难解答与已知限制</li></ol><h2 id="三分钟上手"><a href="#三分钟上手" class="headerlink" title="三分钟上手"></a>三分钟上手</h2><ol><li>安装并启动 HexoDeck</li><li>点击「<strong>添加站点</strong>」，选择你的 Hexo 博客根目录（含 <code>_config.yml</code> 的文件夹）</li><li>在「<strong>文章</strong>」页点「新建文章」，写完自动保存</li><li>在「<strong>预览</strong>」页点「启动预览」，实时查看主题渲染效果</li><li>在「<strong>发布</strong>」页点「部署上线」，推送到你的仓库</li></ol><p>就这五步。下面各篇会展开说明每个环节的细节与技巧。</p><h2 id="核心特点"><a href="#核心特点" class="headerlink" title="核心特点"></a>核心特点</h2><ul><li><strong>零侵入</strong>：不改变你的站点结构，配置改动保留注释与键顺序，首改自动备份</li><li><strong>多站点隔离</strong>：可管理多个博客，站点信息、文集、参数定义、配置路径记忆全部按站点隔离</li><li><strong>本地可见即可得</strong>：内嵌 iframe 预览真实渲染效果，文件一变自动刷新</li><li><strong>部署不假成功</strong>：自动识别 git 推送失败并明确报错，部署前自动生成最新内容</li><li><strong>玻璃拟态界面</strong>：深空霓虹（暗）&#x2F; 冰白清新（亮）双主题，支持跟随系统</li></ul><h2 id="写作增强"><a href="#写作增强" class="headerlink" title="写作增强"></a>写作增强</h2><p>除了常规的 Markdown 编辑，有几个专为中文博客设计的能力：</p><ul><li><strong>自定义参数（三种类型）</strong>：键值式（文本）、开关式（勾选框，写 YAML 布尔）、<strong>结构化</strong>（YAML 编辑框，支持嵌套对象与对象数组）。写游戏资源卡、多网盘链接这类复杂 front-matter 时，可以<strong>一键套用内置模板</strong>，改值即可 —— 详见<a href="/posts/9022c20b/">写作功能</a></li><li><strong>自定义插入片段</strong>：把常写的版权声明、更新时间做成工具栏按钮，点一下插入光标处，支持 <code>&#123;&#123;date&#125;&#125;</code> 自动替换为当天日期</li><li><strong>自定义文集</strong>：把站点里任意文件夹变成独立的文章管理入口（如把 <code>source/_dynamics</code> 做成「说说」）—— 详见<a href="/posts/59d25f9e/">页面与文集</a></li><li><strong>站点图标</strong>：站点页点头像或拖入图片即可设置，写入站点 <code>source/favicon.*</code>，你的网站也会用上</li><li><strong>路径可点击</strong>：文章 &#x2F; 页面 &#x2F; 文集的文件路径与目录都能点，直接在资源管理器打开并选中</li></ul>]]></content>
    
    
    <summary type="html">HexoDeck 是一个 Hexo 博客的桌面管理工具，把写作、预览、发布、配置整个流程搬进图形界面 —— 不用碰命令行。</summary>
    
    
    
    <category term="HexoDeck" scheme="https://blog.126330.xyz/categories/HexoDeck/"/>
    
    
    <category term="Hexo" scheme="https://blog.126330.xyz/tags/Hexo/"/>
    
    <category term="HexoDeck" scheme="https://blog.126330.xyz/tags/HexoDeck/"/>
    
    <category term="文档" scheme="https://blog.126330.xyz/tags/%E6%96%87%E6%A1%A3/"/>
    
  </entry>
  
  <entry>
    <title>演示：MOD 汉化补丁 v3.1.4 完整汉化</title>
    <link href="https://blog.126330.xyz/posts/71a1b152/"/>
    <id>https://blog.126330.xyz/posts/71a1b152/</id>
    <published>2026-10-05T03:05:00.000Z</published>
    <updated>2026-10-05T03:05:00.000Z</updated>
    
    <content type="html"><![CDATA[<span id="more"></span><h2 id="汉化说明"><a href="#汉化说明" class="headerlink" title="汉化说明"></a>汉化说明</h2><p>本补丁为 <strong>《示例模组》v3.1.4</strong> 的完整汉化，覆盖 UI、任务、物品与提示文本。</p><h2 id="汉化范围"><a href="#汉化范围" class="headerlink" title="汉化范围"></a>汉化范围</h2><table><thead><tr><th>模块</th><th>覆盖率</th></tr></thead><tbody><tr><td>界面 UI</td><td>100%</td></tr><tr><td>任务文本</td><td>100%</td></tr><tr><td>物品描述</td><td>100%</td></tr><tr><td>剧情对话</td><td>96%</td></tr></tbody></table><h2 id="安装方法"><a href="#安装方法" class="headerlink" title="安装方法"></a>安装方法</h2><ol><li>先安装原版 MOD <strong>v3.1.4</strong></li><li>将汉化包内的 <code>Localization</code> 文件夹覆盖到 MOD 根目录</li><li>在游戏设置里把语言切换为「简体中文」</li><li>重启游戏生效</li></ol><blockquote><p>如果游戏更新导致 MOD 版本变化，请等待对应版本的汉化更新，不要跨版本覆盖。</p></blockquote>]]></content>
    
    
    <summary type="html">汉化补丁类资源演示，展示语言、版本对应关系等信息。</summary>
    
    
    
    <category term="MOD汉化" scheme="https://blog.126330.xyz/categories/MOD%E6%B1%89%E5%8C%96/"/>
    
    
    <category term="演示" scheme="https://blog.126330.xyz/tags/%E6%BC%94%E7%A4%BA/"/>
    
    <category term="汉化" scheme="https://blog.126330.xyz/tags/%E6%B1%89%E5%8C%96/"/>
    
    <category term="补丁" scheme="https://blog.126330.xyz/tags/%E8%A1%A5%E4%B8%81/"/>
    
  </entry>
  
  <entry>
    <title>演示：游戏 MOD《示例模组》v3.1.4</title>
    <link href="https://blog.126330.xyz/posts/c7d4ae22/"/>
    <id>https://blog.126330.xyz/posts/c7d4ae22/</id>
    <published>2026-10-04T07:20:00.000Z</published>
    <updated>2026-10-04T07:20:00.000Z</updated>
    
    <content type="html"><![CDATA[<span id="more"></span><h2 id="MOD-简介"><a href="#MOD-简介" class="headerlink" title="MOD 简介"></a>MOD 简介</h2><p>这是一个玩法扩展 MOD，新增了 40+ 建筑、12 条任务线，并重做了经济系统。</p><h2 id="主要改动"><a href="#主要改动" class="headerlink" title="主要改动"></a>主要改动</h2><ul><li>新增 40 个建筑与 15 种科技</li><li>重做经济系统，削弱后期滚雪球</li><li>新增 12 条支线任务</li><li>修复原版 30 余个已知 BUG</li></ul><h2 id="安装方法"><a href="#安装方法" class="headerlink" title="安装方法"></a>安装方法</h2><ol><li>确认游戏版本为 <strong>v1.9.x</strong></li><li>解压 MOD 包到 <code>Documents/My Games/游戏名/Mods</code></li><li>启动器内勾选启用</li><li>新建存档（旧存档可能不兼容）</li></ol><h2 id="兼容性"><a href="#兼容性" class="headerlink" title="兼容性"></a>兼容性</h2><table><thead><tr><th>MOD</th><th>状态</th></tr></thead><tbody><tr><td>官方 DLC</td><td>兼容</td></tr><tr><td>中文语言包</td><td>兼容</td></tr><tr><td>大型平衡 MOD</td><td>不兼容</td></tr></tbody></table>]]></content>
    
    
    <summary type="html">MOD 类资源演示，展示多版本、多网盘链接的呈现。</summary>
    
    
    
    <category term="游戏MOD" scheme="https://blog.126330.xyz/categories/%E6%B8%B8%E6%88%8FMOD/"/>
    
    
    <category term="演示" scheme="https://blog.126330.xyz/tags/%E6%BC%94%E7%A4%BA/"/>
    
    <category term="MOD" scheme="https://blog.126330.xyz/tags/MOD/"/>
    
    <category term="玩法扩展" scheme="https://blog.126330.xyz/tags/%E7%8E%A9%E6%B3%95%E6%89%A9%E5%B1%95/"/>
    
  </entry>
  
  <entry>
    <title>演示：游戏资源《示例游戏》v1.2.0 免安装整合版</title>
    <link href="https://blog.126330.xyz/posts/162b2e44/"/>
    <id>https://blog.126330.xyz/posts/162b2e44/</id>
    <published>2026-10-02T10:45:00.000Z</published>
    <updated>2026-10-02T10:45:00.000Z</updated>
    
    <content type="html"><![CDATA[<span id="more"></span><h2 id="版本说明"><a href="#版本说明" class="headerlink" title="版本说明"></a>版本说明</h2><p>已整合全部 DLC 与官方简体中文，解压即玩，无需安装。</p><h2 id="配置要求"><a href="#配置要求" class="headerlink" title="配置要求"></a>配置要求</h2><table><thead><tr><th>项目</th><th>最低配置</th><th>推荐配置</th></tr></thead><tbody><tr><td>CPU</td><td>i5-8400</td><td>i7-12700</td></tr><tr><td>内存</td><td>8 GB</td><td>16 GB</td></tr><tr><td>显卡</td><td>GTX 1060 6G</td><td>RTX 3060</td></tr><tr><td>硬盘</td><td>50 GB</td><td>60 GB SSD</td></tr></tbody></table><h2 id="安装步骤"><a href="#安装步骤" class="headerlink" title="安装步骤"></a>安装步骤</h2><ol><li>下载全部分卷，放在同一个文件夹</li><li>右键第一个分卷解压到当前目录</li><li>进入 <code>Binaries</code> 目录，双击主程序运行</li><li>如果提示缺少运行库，请安装目录下的 <code>_CommonRedist</code></li></ol><blockquote><p>解压密码：<code>echo</code></p></blockquote>]]></content>
    
    
    <summary type="html">游戏类资源演示，展示版本、平台、大小等字段的呈现。</summary>
    
    
    
    <category term="游戏资源" scheme="https://blog.126330.xyz/categories/%E6%B8%B8%E6%88%8F%E8%B5%84%E6%BA%90/"/>
    
    
    <category term="单机游戏" scheme="https://blog.126330.xyz/tags/%E5%8D%95%E6%9C%BA%E6%B8%B8%E6%88%8F/"/>
    
    <category term="整合版" scheme="https://blog.126330.xyz/tags/%E6%95%B4%E5%90%88%E7%89%88/"/>
    
    <category term="演示" scheme="https://blog.126330.xyz/tags/%E6%BC%94%E7%A4%BA/"/>
    
  </entry>
  
  <entry>
    <title>演示：影视资源《示例电影》4K 蓝光原盘</title>
    <link href="https://blog.126330.xyz/posts/76ddbdea/"/>
    <id>https://blog.126330.xyz/posts/76ddbdea/</id>
    <published>2026-09-30T12:10:00.000Z</published>
    <updated>2026-09-30T12:10:00.000Z</updated>
    
    <content type="html"><![CDATA[<span id="more"></span><h2 id="影片信息"><a href="#影片信息" class="headerlink" title="影片信息"></a>影片信息</h2><table><thead><tr><th>项目</th><th>内容</th></tr></thead><tbody><tr><td>片名</td><td>示例电影</td></tr><tr><td>年份</td><td>2026</td></tr><tr><td>分辨率</td><td>3840 × 2160（4K HDR）</td></tr><tr><td>音轨</td><td>国语 DTS-HD 5.1</td></tr><tr><td>字幕</td><td>中英双语（外挂 + 内嵌）</td></tr></tbody></table><h2 id="资源说明"><a href="#资源说明" class="headerlink" title="资源说明"></a>资源说明</h2><p>本资源为 4K 蓝光原盘 Remux，保留完整音轨与字幕，适合大屏观看。</p><ul><li>视频：HEVC 10bit，码率约 45 Mbps</li><li>音轨：国语 DTS-HD MA 5.1、英语 AC3 5.1</li><li>字幕：简中、繁中、中英双语</li></ul><h2 id="播放建议"><a href="#播放建议" class="headerlink" title="播放建议"></a>播放建议</h2><p>推荐使用 <strong>PotPlayer</strong> 或 <strong>MPV</strong> 播放，显卡硬解支持 HEVC 10bit 即可流畅播放。</p><blockquote><p>注意：本页仅为排版演示，网盘链接为占位地址。</p></blockquote>]]></content>
    
    
    <summary type="html">这是一条资源演示，展示影视类资源在主题里的完整呈现方式。</summary>
    
    
    
    <category term="影视资源" scheme="https://blog.126330.xyz/categories/%E5%BD%B1%E8%A7%86%E8%B5%84%E6%BA%90/"/>
    
    
    <category term="演示" scheme="https://blog.126330.xyz/tags/%E6%BC%94%E7%A4%BA/"/>
    
    <category term="电影" scheme="https://blog.126330.xyz/tags/%E7%94%B5%E5%BD%B1/"/>
    
    <category term="4K" scheme="https://blog.126330.xyz/tags/4K/"/>
    
  </entry>
  
  <entry>
    <title>博客搭建完成：用 Hexo 写一个自己的主题</title>
    <link href="https://blog.126330.xyz/posts/ed505ebd/"/>
    <id>https://blog.126330.xyz/posts/ed505ebd/</id>
    <published>2026-09-28T13:30:00.000Z</published>
    <updated>2026-09-28T13:30:00.000Z</updated>
    
    <content type="html"><![CDATA[<span id="more"></span><h2 id="为什么要自己写主题"><a href="#为什么要自己写主题" class="headerlink" title="为什么要自己写主题"></a>为什么要自己写主题</h2><p>现成的 Hexo 主题大多是为「纯文字博客」设计的，而我的站点里有一大半内容是<strong>网盘资源</strong>。<br>资源需要的字段和文章完全不同：版本号、平台、文件大小、语言、提取码、多个网盘链接……</p><p>这些用普通文章硬凑也能写，但排版会很难看，维护起来也很痛苦。所以我干脆自己写一个主题，<br>让「文章」和「资源」成为两种一等公民。</p><h2 id="资源是怎么定义的"><a href="#资源是怎么定义的" class="headerlink" title="资源是怎么定义的"></a>资源是怎么定义的</h2><p>核心思路非常简单：<strong>资源就是带有 <code>resource</code> 字段的文章</strong>。</p><figure class="highlight yaml"><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"><span class="meta">---</span></span><br><span class="line"><span class="attr">title:</span> <span class="string">某某游戏</span> <span class="string">v1.2.0</span> <span class="string">整合版</span></span><br><span class="line"><span class="attr">categories:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">游戏资源</span></span><br><span class="line"><span class="attr">resource:</span></span><br><span class="line">  <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">type:</span> <span class="string">game</span></span><br><span class="line">  <span class="attr">version:</span> <span class="string">v1.2.0</span></span><br><span class="line">  <span class="attr">platform:</span> <span class="string">Windows</span></span><br><span class="line">  <span class="attr">size:</span> <span class="number">42.6</span> <span class="string">GB</span></span><br><span class="line">  <span class="attr">language:</span> <span class="string">简体中文</span></span><br><span class="line">  <span class="attr">links:</span></span><br><span class="line">    <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">百度网盘</span></span><br><span class="line">      <span class="attr">url:</span> <span class="string">https://pan.baidu.com/s/xxxx</span></span><br><span class="line">      <span class="attr">password:</span> <span class="string">abcd</span></span><br><span class="line"><span class="meta">---</span></span><br></pre></td></tr></table></figure><p>只要 <code>resource.enable</code> 为 <code>true</code>，主题就会：</p><ol><li>把它归入 <code>/resources/</code> 资源库</li><li>按 <code>type</code> 自动进入对应分类（movie &#x2F; game &#x2F; mod &#x2F; translation …）</li><li>在详情页渲染出网盘下载区块和复制提取码按钮</li></ol><h2 id="目录结构"><a href="#目录结构" class="headerlink" title="目录结构"></a>目录结构</h2><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">themes/echo/</span><br><span class="line">├── layout/          # EJS 模板</span><br><span class="line">│   ├── _partial/    # 卡片、导航、下载区块等组件</span><br><span class="line">│   └── _widget/     # 侧边栏小组件</span><br><span class="line">├── scripts/         # 生成器与辅助函数</span><br><span class="line">└── source/          # CSS / JS / 图片</span><br></pre></td></tr></table></figure><h2 id="下一步"><a href="#下一步" class="headerlink" title="下一步"></a>下一步</h2><ul><li><input disabled="" type="checkbox"> 接入评论系统</li><li><input disabled="" type="checkbox"> 资源页加上排序和搜索</li><li><input disabled="" type="checkbox"> 支持磁力链接和 BT 种子</li></ul>]]></content>
    
    
    <summary type="html">记录 Echo 主题从零开始的搭建过程，以及资源板块的设计思路。</summary>
    
    
    
    <category term="建站笔记" scheme="https://blog.126330.xyz/categories/%E5%BB%BA%E7%AB%99%E7%AC%94%E8%AE%B0/"/>
    
    
    <category term="Hexo" scheme="https://blog.126330.xyz/tags/Hexo/"/>
    
    <category term="前端" scheme="https://blog.126330.xyz/tags/%E5%89%8D%E7%AB%AF/"/>
    
    <category term="主题" scheme="https://blog.126330.xyz/tags/%E4%B8%BB%E9%A2%98/"/>
    
  </entry>
  
</feed>
