<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <author>
    <name>阿木</name>
  </author>
  <generator uri="https://hexo.io/">Hexo</generator>
  <id>http://example.com/</id>
  <link href="http://example.com/" rel="alternate"/>
  <link href="http://example.com/atom.xml" rel="self"/>
  <rights>All rights reserved 2026, 阿木</rights>
  <subtitle>一直在努力，从未成功过。</subtitle>
  <title>Amu博客-一直在努力，从未成功过。</title>
  <updated>2026-09-30T18:13:23.819Z</updated>
  <entry>
    <author>
      <name>阿木</name>
    </author>
    <category term="AI 摘要" scheme="http://example.com/categories/AI-%E6%91%98%E8%A6%81/"/>
    <content>
      <![CDATA[<a href="https://github.com/willow-god/hexo-ai-summary" target="_blank" rel="noopener noreferrer" style="display: inline-block; text-decoration: none; color: #ffffff; background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); border-radius: 12px; padding: 14px 24px; font-weight: bold; font-size: 15px; cursor: pointer; box-shadow: 0 4px 15px rgba(102, 126, 234, 0.4); transition: all 0.3s ease;">  🤖 hexo-ai-summary-liushen · AI 智能摘要插件 →</a><h1 id="umami-view-js-写法"><a href="#umami-view-js-写法" class="headerlink" title="umami-view.js 写法"></a>umami-view.js 写法</h1><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br></pre></td><td class="code"><pre><code class="hljs javascript">&#123;<br>  <span class="hljs-comment">// 从配置文件中获取 umami 的配置</span><br><span class="hljs-keyword">const</span> website_id = <span class="hljs-variable constant_">CONFIG</span>.<span class="hljs-property">web_analytics</span>.<span class="hljs-property">umami</span>.<span class="hljs-property">website_id</span>;<br><span class="hljs-comment">// 拼接请求地址</span><br><span class="hljs-keyword">const</span> request_url = <span class="hljs-string">`<span class="hljs-subst">$&#123;CONFIG.web_analytics.umami.api_server&#125;</span>/api/websites/<span class="hljs-subst">$&#123;website_id&#125;</span>/stats`</span>;<br><br><span class="hljs-keyword">const</span> start_time = <span class="hljs-keyword">new</span> <span class="hljs-title class_">Date</span>(<span class="hljs-variable constant_">CONFIG</span>.<span class="hljs-property">web_analytics</span>.<span class="hljs-property">umami</span>.<span class="hljs-property">start_time</span>).<span class="hljs-title function_">getTime</span>();<br><span class="hljs-keyword">const</span> end_time = <span class="hljs-keyword">new</span> <span class="hljs-title class_">Date</span>().<span class="hljs-title function_">getTime</span>();<br><span class="hljs-keyword">const</span> token = <span class="hljs-variable constant_">CONFIG</span>.<span class="hljs-property">web_analytics</span>.<span class="hljs-property">umami</span>.<span class="hljs-property">token</span>;<br><br><span class="hljs-comment">// 检查配置是否为空</span><br><span class="hljs-keyword">if</span> (!website_id) &#123;<br>  <span class="hljs-keyword">throw</span> <span class="hljs-keyword">new</span> <span class="hljs-title class_">Error</span>(<span class="hljs-string">&quot;Umami website_id is empty&quot;</span>);<br>&#125;<br><span class="hljs-keyword">if</span> (!request_url) &#123;<br>  <span class="hljs-keyword">throw</span> <span class="hljs-keyword">new</span> <span class="hljs-title class_">Error</span>(<span class="hljs-string">&quot;Umami request_url is empty&quot;</span>);<br>&#125;<br><span class="hljs-keyword">if</span> (!start_time) &#123;<br>  <span class="hljs-keyword">throw</span> <span class="hljs-keyword">new</span> <span class="hljs-title class_">Error</span>(<span class="hljs-string">&quot;Umami start_time is empty&quot;</span>);<br>&#125;<br><span class="hljs-keyword">if</span> (!token) &#123;<br>  <span class="hljs-keyword">throw</span> <span class="hljs-keyword">new</span> <span class="hljs-title class_">Error</span>(<span class="hljs-string">&quot;Umami token is empty&quot;</span>);<br>&#125;<br><br><span class="hljs-comment">// 构造请求参数</span><br><span class="hljs-keyword">const</span> params = <span class="hljs-keyword">new</span> <span class="hljs-title class_">URLSearchParams</span>(&#123;<br>  <span class="hljs-attr">startAt</span>: start_time,<br>  <span class="hljs-attr">endAt</span>: end_time,<br>&#125;);<br><span class="hljs-comment">// 构造请求头</span><br><span class="hljs-keyword">const</span> request_header = &#123;<br>  <span class="hljs-attr">method</span>: <span class="hljs-string">&quot;GET&quot;</span>,<br>  <span class="hljs-attr">headers</span>: &#123;<br>    <span class="hljs-string">&quot;Content-Type&quot;</span>: <span class="hljs-string">&quot;application/json&quot;</span>,<br>    <span class="hljs-string">&quot;Authorization&quot;</span>: <span class="hljs-string">&quot;Bearer &quot;</span> + token,<br>  &#125;,<br>&#125;;<br><br><span class="hljs-comment">// 获取站点统计数据</span><br><span class="hljs-keyword">async</span> <span class="hljs-keyword">function</span> <span class="hljs-title function_">siteStats</span>(<span class="hljs-params"></span>) &#123;<br>  <span class="hljs-keyword">try</span> &#123;<br>    <span class="hljs-keyword">const</span> response = <span class="hljs-keyword">await</span> <span class="hljs-title function_">fetch</span>(<span class="hljs-string">`<span class="hljs-subst">$&#123;request_url&#125;</span>?<span class="hljs-subst">$&#123;params&#125;</span>`</span>, request_header);<br>    <span class="hljs-keyword">const</span> data = <span class="hljs-keyword">await</span> response.<span class="hljs-title function_">json</span>();<br>    <span class="hljs-keyword">const</span> uniqueVisitors = data.<span class="hljs-property">visitors</span>.<span class="hljs-property">value</span>; <span class="hljs-comment">// 获取独立访客数</span><br>    <span class="hljs-keyword">const</span> pageViews = data.<span class="hljs-property">pageviews</span>.<span class="hljs-property">value</span>; <span class="hljs-comment">// 获取页面浏览量</span><br><br>    <span class="hljs-keyword">let</span> pvCtn = <span class="hljs-variable language_">document</span>.<span class="hljs-title function_">querySelector</span>(<span class="hljs-string">&quot;#umami-site-pv-container&quot;</span>);<br>    <span class="hljs-keyword">if</span> (pvCtn) &#123;<br>      <span class="hljs-keyword">let</span> ele = <span class="hljs-variable language_">document</span>.<span class="hljs-title function_">querySelector</span>(<span class="hljs-string">&quot;#umami-site-pv&quot;</span>);<br>      <span class="hljs-keyword">if</span> (ele) &#123;<br>        ele.<span class="hljs-property">textContent</span> = pageViews; <span class="hljs-comment">// 设置页面浏览量</span><br>        pvCtn.<span class="hljs-property">style</span>.<span class="hljs-property">display</span> = <span class="hljs-string">&quot;inline&quot;</span>; <span class="hljs-comment">// 将元素显示出来</span><br>      &#125;<br>    &#125;<br><br>    <span class="hljs-keyword">let</span> uvCtn = <span class="hljs-variable language_">document</span>.<span class="hljs-title function_">querySelector</span>(<span class="hljs-string">&quot;#umami-site-uv-container&quot;</span>);<br>    <span class="hljs-keyword">if</span> (uvCtn) &#123;<br>      <span class="hljs-keyword">let</span> ele = <span class="hljs-variable language_">document</span>.<span class="hljs-title function_">querySelector</span>(<span class="hljs-string">&quot;#umami-site-uv&quot;</span>);<br>      <span class="hljs-keyword">if</span> (ele) &#123;<br>        ele.<span class="hljs-property">textContent</span> = uniqueVisitors;<br>        uvCtn.<span class="hljs-property">style</span>.<span class="hljs-property">display</span> = <span class="hljs-string">&quot;inline&quot;</span>;<br>      &#125;<br>    &#125;<br>  &#125; <span class="hljs-keyword">catch</span> (error) &#123;<br>    <span class="hljs-variable language_">console</span>.<span class="hljs-title function_">error</span>(error);<br>    <span class="hljs-keyword">return</span> <span class="hljs-string">&quot;-1&quot;</span>;<br>  &#125;<br>&#125;<br><br><span class="hljs-comment">// 获取页面浏览量</span><br><span class="hljs-keyword">async</span> <span class="hljs-keyword">function</span> <span class="hljs-title function_">pageStats</span>(<span class="hljs-params">path</span>) &#123;<br>  <span class="hljs-keyword">try</span> &#123;<br>    <span class="hljs-keyword">const</span> response = <span class="hljs-keyword">await</span> <span class="hljs-title function_">fetch</span>(<span class="hljs-string">`<span class="hljs-subst">$&#123;request_url&#125;</span>?<span class="hljs-subst">$&#123;params&#125;</span>&amp;url=<span class="hljs-subst">$&#123;path&#125;</span>`</span>, request_header);<br>    <span class="hljs-keyword">const</span> data = <span class="hljs-keyword">await</span> response.<span class="hljs-title function_">json</span>();<br>    <span class="hljs-keyword">const</span> pageViews = data.<span class="hljs-property">pageviews</span>.<span class="hljs-property">value</span>;<br><br>    <span class="hljs-keyword">let</span> viewCtn = <span class="hljs-variable language_">document</span>.<span class="hljs-title function_">querySelector</span>(<span class="hljs-string">&quot;#umami-page-views-container&quot;</span>);<br>    <span class="hljs-keyword">if</span> (viewCtn) &#123;<br>      <span class="hljs-keyword">let</span> ele = <span class="hljs-variable language_">document</span>.<span class="hljs-title function_">querySelector</span>(<span class="hljs-string">&quot;#umami-page-views&quot;</span>);<br>      <span class="hljs-keyword">if</span> (ele) &#123;<br>        ele.<span class="hljs-property">textContent</span> = pageViews;<br>        viewCtn.<span class="hljs-property">style</span>.<span class="hljs-property">display</span> = <span class="hljs-string">&quot;inline&quot;</span>;<br>      &#125;<br>    &#125;<br>  &#125; <span class="hljs-keyword">catch</span> (error) &#123;<br>    <span class="hljs-variable language_">console</span>.<span class="hljs-title function_">error</span>(error);<br>    <span class="hljs-keyword">return</span> <span class="hljs-string">&quot;-1&quot;</span>;<br>  &#125;<br>&#125;<br><br><span class="hljs-title function_">siteStats</span>();<br><br><span class="hljs-comment">// 获取页面容器</span><br><span class="hljs-keyword">let</span> viewCtn = <span class="hljs-variable language_">document</span>.<span class="hljs-title function_">querySelector</span>(<span class="hljs-string">&quot;#umami-page-views-container&quot;</span>);<br><span class="hljs-comment">// 如果页面容器存在，则获取页面浏览量</span><br><span class="hljs-keyword">if</span> (viewCtn) &#123;<br>  <span class="hljs-keyword">let</span> path = <span class="hljs-variable language_">window</span>.<span class="hljs-property">location</span>.<span class="hljs-property">pathname</span>;<br>  <span class="hljs-keyword">let</span> target = path<br>    .<span class="hljs-title function_">replace</span>(<span class="hljs-regexp">/(\/[^/]+\.html)\/$/</span>, <span class="hljs-string">&quot;$1&quot;</span>)  <span class="hljs-comment">// 如果是 &#x27;/xxxx.html/&#x27; 格式的路径，则去掉最后那个 &#x27;/&#x27;</span><br>    .<span class="hljs-title function_">replace</span>(<span class="hljs-regexp">/\/index\.html$/</span>, <span class="hljs-string">&quot;/&quot;</span>);      <span class="hljs-comment">// 如果是 &#x27;/index.html&#x27; 格式，则合并成 &#x27;/&#x27;</span><br>  <span class="hljs-title function_">pageStats</span>(target);<br>&#125;<br><br>&#125;<br></code></pre></td></tr></table></figure><h1 id="ai-summary-css-写法"><a href="#ai-summary-css-写法" class="headerlink" title="ai-summary.css 写法"></a>ai-summary.css 写法</h1><figure class="highlight css"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br></pre></td><td class="code"><pre><code class="hljs css">&#123;<br> <span class="hljs-selector-class">.ai-summary-typing</span> &#123;<br>  <span class="hljs-attribute">margin</span>: <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">1.2em</span> <span class="hljs-number">0</span>;<br>  <span class="hljs-attribute">padding</span>: <span class="hljs-number">0.8em</span> <span class="hljs-number">1em</span>;<br>  <span class="hljs-attribute">border-left</span>: <span class="hljs-number">3px</span> solid <span class="hljs-number">#4a9eff</span>;<br>  <span class="hljs-attribute">background</span>: <span class="hljs-built_in">rgba</span>(<span class="hljs-number">74</span>, <span class="hljs-number">158</span>, <span class="hljs-number">255</span>, <span class="hljs-number">0.06</span>);<br>  <span class="hljs-attribute">border-radius</span>: <span class="hljs-number">4px</span>;<br>  <span class="hljs-attribute">font-size</span>: <span class="hljs-number">0.95em</span>;<br>  <span class="hljs-attribute">line-height</span>: <span class="hljs-number">1.7</span>;<br>  <span class="hljs-attribute">min-height</span>: <span class="hljs-number">1.7em</span>;<br>&#125;<br><span class="hljs-selector-class">.ai-summary-cursor</span> &#123;<br>  <span class="hljs-attribute">display</span>: inline-block;<br>  <span class="hljs-attribute">width</span>: <span class="hljs-number">2px</span>;<br>  <span class="hljs-attribute">height</span>: <span class="hljs-number">1em</span>;<br>  <span class="hljs-attribute">margin-left</span>: <span class="hljs-number">2px</span>;<br>  <span class="hljs-attribute">vertical-align</span>: -<span class="hljs-number">0.15em</span>;<br>  <span class="hljs-attribute">background</span>: <span class="hljs-number">#4a9eff</span>;<br>  <span class="hljs-attribute">animation</span>: ai-cursor-blink <span class="hljs-number">0.8s</span> <span class="hljs-built_in">steps</span>(<span class="hljs-number">1</span>) infinite;<br>&#125;<br><span class="hljs-keyword">@keyframes</span> ai-cursor-blink &#123;<br>  <span class="hljs-number">50%</span> &#123; <span class="hljs-attribute">opacity</span>: <span class="hljs-number">0</span>; &#125;<br>&#125;<br>&#125;<br></code></pre></td></tr></table></figure><h1 id="scripts目录加js"><a href="#scripts目录加js" class="headerlink" title="scripts目录加js"></a>scripts目录加js</h1><figure class="highlight pgsql"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br></pre></td><td class="code"><pre><code class="hljs pgsql">&#123;<br>  hexo.extend.<span class="hljs-keyword">filter</span>.register(<span class="hljs-string">&#x27;after_post_render&#x27;</span>, <span class="hljs-keyword">function</span> (data) &#123;<br>  <span class="hljs-keyword">if</span> (data.layout !== <span class="hljs-string">&#x27;post&#x27;</span> || !data.excerpt) <span class="hljs-keyword">return</span> data;<br>  <span class="hljs-keyword">if</span> (data.content &amp;&amp; data.content.indexOf(<span class="hljs-string">&#x27;ai-summary-typing&#x27;</span>) !== <span class="hljs-number">-1</span>) <span class="hljs-keyword">return</span> data;<br><br>  var <span class="hljs-type">text</span> = data.excerpt.trim().replace(/&quot;/g, &#x27;&amp;quot;&#x27;);<br><br>  var css = &#x27;&lt;style&gt;&#x27;<br>    + &#x27;.ai-summary-box&#123;margin:0 0 1.5em 0;border:1px solid #d8e6ff;border-radius:8px;overflow:hidden;font-size:0.95em;background:#fff&#125;&#x27;<br>    + &#x27;.ai-summary-box-header&#123;display:flex;align-items:center;gap:6px;padding:0.5em 1em;background:linear-gradient(90deg,rgba(74,158,255,0.12),rgba(74,158,255,0.03));border-bottom:1px solid #d8e6ff;font-weight:600;color:#2b7de9&#125;&#x27;<br>    + &#x27;.ai-summary-box-header svg&#123;width:1.1em;height:1.1em;flex:none&#125;&#x27;<br>    + &#x27;.ai-summary-typing&#123;padding:0.8em 1em;line-height:1.7;min-height:1.7em;color:#444&#125;&#x27;<br>    + &#x27;.ai-summary-cursor&#123;display:inline-block;width:2px;height:1em;margin-left:2px;vertical-align:-0.15em;background:#4a9eff;animation:ai-cursor-blink 0.8s steps(1) infinite&#125;&#x27;<br>    + &#x27;@keyframes ai-cursor-blink&#123;50%&#123;opacity:0&#125;&#125;&#x27;<br>    + &#x27;&lt;\/style&gt;&#x27;;<br><br>  var icon = &#x27;&lt;svg viewBox=&quot;<span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">24</span> <span class="hljs-number">24</span>&quot; fill=&quot;<span class="hljs-keyword">none</span>&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;<span class="hljs-number">2</span>&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;path d=&quot;M12 <span class="hljs-number">2</span>a4 <span class="hljs-number">4</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">1</span> <span class="hljs-number">4</span> <span class="hljs-number">4</span>c0 <span class="hljs-number">1.1</span><span class="hljs-number">-.45</span> <span class="hljs-number">2.1</span><span class="hljs-number">-1.17</span> <span class="hljs-number">2.83</span>L12 <span class="hljs-number">12</span>l<span class="hljs-number">-2.83</span><span class="hljs-number">-3.17</span>A4 <span class="hljs-number">4</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">1</span> <span class="hljs-number">12</span> <span class="hljs-number">2</span>z&quot;/&gt;&lt;circle cx=&quot;<span class="hljs-number">12</span>&quot; cy=&quot;<span class="hljs-number">6</span>&quot; r=&quot;<span class="hljs-number">1</span>&quot;/&gt;&lt;path d=&quot;M5 <span class="hljs-number">10</span>v4l7 <span class="hljs-number">4</span> <span class="hljs-number">7</span><span class="hljs-number">-4</span>v<span class="hljs-number">-4</span>&quot;/&gt;&lt;path d=&quot;M12 <span class="hljs-number">18</span>v4&quot;/&gt;&lt;/svg&gt;&#x27;;<br><br>  var block = &#x27;&lt;div class=&quot;ai-<span class="hljs-keyword">summary</span>-<span class="hljs-type">box</span>&quot;&gt;&#x27;<br>    + &#x27;&lt;div class=&quot;ai-<span class="hljs-keyword">summary</span>-<span class="hljs-type">box</span>-<span class="hljs-keyword">header</span>&quot;&gt;&#x27; + icon + &#x27;&lt;span&gt;AI 摘要&lt;/span&gt;&lt;/div&gt;&#x27;<br>    + &#x27;&lt;div class=&quot;ai-<span class="hljs-keyword">summary</span>-typing&quot; data-text=&quot;<span class="hljs-string">&#x27; + text + &#x27;</span>&quot;&gt;&lt;span class=&quot;ai-<span class="hljs-keyword">summary</span>-<span class="hljs-type">text</span>&quot;&gt;&lt;/span&gt;&lt;span class=&quot;ai-<span class="hljs-keyword">summary</span>-<span class="hljs-keyword">cursor</span>&quot;&gt;&lt;/span&gt;&lt;/div&gt;&#x27;<br>    + &#x27;&lt;\/div&gt;&#x27;;<br><br>  var js = &#x27;&lt;script&gt;(function()&#123;&#x27;<br>    + &#x27;function init()&#123;var els=document.querySelectorAll(&quot;.ai-<span class="hljs-keyword">summary</span>-typing&quot;);&#x27;<br>    + &#x27;for(var k=0;k&lt;els.length;k++)&#123;(function(el)&#123;&#x27;<br>    + &#x27;if(el.getAttribute(&quot;data-done&quot;))return;el.setAttribute(&quot;data-done&quot;,&quot;<span class="hljs-number">1</span>&quot;);&#x27;<br>    + &#x27;var text=el.getAttribute(&quot;data-<span class="hljs-type">text</span>&quot;)||&quot;&quot;;&#x27;<br>    + &#x27;var target=el.querySelector(&quot;.ai-<span class="hljs-keyword">summary</span>-<span class="hljs-type">text</span>&quot;);&#x27;<br>    + &#x27;var i=0;var timer=setInterval(function()&#123;&#x27;<br>    + &#x27;target.textContent=text.slice(0,++i);&#x27;<br>    + &#x27;if(i&gt;=text.length)&#123;clearInterval(timer);&#x27;<br>    + &#x27;setTimeout(function()&#123;var c=el.querySelector(&quot;.ai-<span class="hljs-keyword">summary</span>-<span class="hljs-keyword">cursor</span>&quot;);if(c)c.style.display=&quot;<span class="hljs-keyword">none</span>&quot;;&#125;,2000);&#125;&#x27;<br>    + &#x27;&#125;,45);&#125;)(els[k]);&#125;&#125;&#x27;<br>    + &#x27;if(document.readyState===&quot;loading&quot;)&#123;document.addEventListener(&quot;DOMContentLoaded&quot;,init);&#125;else&#123;init();&#125;&#x27;<br>    + &#x27;&#125;)();&lt;\/script&gt;&#x27;;<br><br>  data.content = css + block + js + (data.content || &#x27;&#x27;);<br>  return data;<br>&#125;);<br>&#125;<br></code></pre></td></tr></table></figure>]]>
    </content>
    <id>http://example.com/2026/09/30/AI%20%E6%91%98%E8%A6%81%E6%8F%90%E7%A4%BA/</id>
    <link href="http://example.com/2026/09/30/AI%20%E6%91%98%E8%A6%81%E6%8F%90%E7%A4%BA/"/>
    <published>2026-09-30T18:13:23.819Z</published>
    <summary>
      <![CDATA[<a href="https://github.com/willow-god/hexo-ai-summary" target="_blank" rel="noopener noreferrer" style="display: inline-block;]]>
    </summary>
    <title>Hexo AI 摘要提示添加</title>
    <updated>2026-09-30T18:13:23.819Z</updated>
  </entry>
  <entry>
    <author>
      <name>阿木</name>
    </author>
    <category term="个人博客" scheme="http://example.com/categories/%E4%B8%AA%E4%BA%BA%E5%8D%9A%E5%AE%A2/"/>
    <content>
      <![CDATA[<p><span style="background: linear-gradient(transparent 60%, #ffd54f 60%);">还没有想好</span></p>]]>
    </content>
    <id>http://example.com/2026/09/30/%E4%BB%8E0%E5%88%B0%E6%94%BE%E5%BC%83%E6%88%91%E7%9A%84%E5%8D%9A%E5%AE%A2/</id>
    <link href="http://example.com/2026/09/30/%E4%BB%8E0%E5%88%B0%E6%94%BE%E5%BC%83%E6%88%91%E7%9A%84%E5%8D%9A%E5%AE%A2/"/>
    <published>2026-09-30T18:13:23.819Z</published>
    <summary>
      <![CDATA[<p><span style="background: linear-gradient(transparent 60%, #ffd54f]]>
    </summary>
    <title>从零到放弃-我的博客</title>
    <updated>2026-09-30T18:13:23.819Z</updated>
  </entry>
  <entry>
    <author>
      <name>阿木</name>
    </author>
    <category term="Vercel" scheme="http://example.com/categories/Vercel/"/>
    <content>
      <![CDATA[<p>如何安装 Vercel CLI？</p><p>你只需要在电脑的终端（Windows 的 CMD&#x2F;PowerShell，或者 Mac 的 Terminal）中，运行以下 Node.js 命令进行全局安装：</p><div class="pCTyYe" dir="ltr" data-processed="true"><pre data-processed="true"><code jsuid="IcYX5b_k3" data-processed="true"><span class="undefined" data-processed="true">npm install -g vercel</span></code></pre></div><p>安装后如何使用？</p><ol><li>安装完成后，你可以在博客根目录下执行以下三步：</li></ol><div class="pCTyYe" dir="ltr" data-processed="true"><pre data-processed="true"><code jsuid="IcYX5b_mi" data-processed="true"><span class="undefined" data-processed="true">vercel login</span></code></pre></div><em class="eujQNb" jsaction="" jscontroller="yHWXO" data-sfc-root="c" jsuid="IcYX5b_n1" data-sfc-cb="" data-complete="true" data-processed="true">(根据提示选择你的登录方式，如 GitHub)<!--TgQPHd|[]--></em><ol start="2"><li>初始化&#x2F;关联项目：</li></ol><div class="pCTyYe" dir="ltr" data-processed="true"><pre data-processed="true"><code jsuid="IcYX5b_mi" data-processed="true"><span class="undefined" data-processed="true">vercel login</span></code></pre></div><em class="eujQNb" jsaction="" jscontroller="yHWXO" data-sfc-root="c" jsuid="IcYX5b_nv" data-sfc-cb="" data-complete="true" data-processed="true" aria-owns="action-menu-parent-container">(一路按回车确认默认设置即可，它会把本地项目和 Vercel 账号关联)<!--TgQPHd|[]--></em><ol start="3"><li>本地开发预览（选做）：</li></ol><div class="pHpOfb" data-animation-atomic="" data-processed="true"><div class="z0e9Qd" data-processed="true"><div class="vVRw1d" data-processed="true">bash</div></div><div class="pCTyYe" dir="ltr" data-processed="true"><pre data-processed="true"><code jsuid="IcYX5b_o8" data-processed="true"><span class="undefined" data-processed="true">vercel dev</span></code></pre></div></div><script src="https://utteranc.es/client.js"        repo="[https://github.com/915964222/GitHub]"        issue-term="GitHub"        theme="github-light"        crossorigin="anonymous"        async></script>]]>
    </content>
    <id>http://example.com/2026/09/22/%E5%AE%89%E8%A3%85Vercel%20CLI/</id>
    <link href="http://example.com/2026/09/22/%E5%AE%89%E8%A3%85Vercel%20CLI/"/>
    <published>2026-09-22T16:00:00.000Z</published>
    <summary>
      <![CDATA[<p>如何安装 Vercel CLI？</p>
<p>你只需要在电脑的终端（Windows 的 CMD&#x2F;PowerShell，或者 Mac 的 Terminal）中，运行以下 Node.js 命令进行全局安装：</p>
<div class="pCTyYe"]]>
    </summary>
    <title>安装Vercel CLI</title>
    <updated>2026-09-30T18:13:23.819Z</updated>
  </entry>
</feed>
