<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>青云工作室-博客</title>
  
  <subtitle>qystudio</subtitle>
  <link href="https://www.qystu.cc/atom.xml" rel="self"/>
  
  <link href="https://www.qystu.cc/"/>
  <updated>2023-04-27T13:17:49.000Z</updated>
  <id>https://www.qystu.cc/</id>
  
  <author>
    <name>青云工作室</name>
    
  </author>
  
  <generator uri="https://hexo.io/">Hexo</generator>
  
  <entry>
    <title>云寄2.0全新回归！用一生去抵达遥远的未来！让我们一起期待云寄时光邮局2.0正式发布！</title>
    <link href="https://www.qystu.cc/posts/55413.html"/>
    <id>https://www.qystu.cc/posts/55413.html</id>
    <published>2023-04-27T13:17:49.000Z</published>
    <updated>2023-04-27T13:17:49.000Z</updated>
    
    <content type="html"><![CDATA[<p>云寄2.0全新回归！用一生去抵达遥远的未来！让我们一起期待云寄时光邮局2.0正式发布</p><div class="aspect-ratio"><iframe src="https://player.bilibili.com/player.html?aid=442914362&page=1" allowfullscreen="allowfullscreen" width="100%" height="500" scrolling="no" frameborder="0" sandbox="allow-top-navigation allow-same-origin allow-forms allow-scripts"> </iframe></div>]]></content>
    
    
    <summary type="html">云寄2.0全新回归！用一生去抵达遥远的未来！让我们一起期待云寄时光邮局2.0正式发布！</summary>
    
    
    
    <category term="totime" scheme="https://www.qystu.cc/categories/totime/"/>
    
    <category term="chuqis" scheme="https://www.qystu.cc/categories/chuqis/"/>
    
    
    <category term="totime" scheme="https://www.qystu.cc/tags/totime/"/>
    
    <category term="云寄" scheme="https://www.qystu.cc/tags/%E4%BA%91%E5%AF%84/"/>
    
  </entry>
  
  <entry>
    <title>初七云测评</title>
    <link href="https://www.qystu.cc/posts/25124.html"/>
    <id>https://www.qystu.cc/posts/25124.html</id>
    <published>2023-04-27T11:27:30.000Z</published>
    <updated>2023-04-27T11:27:30.000Z</updated>
    
    <content type="html"><![CDATA[<div class="story post-story"><h2 id="初七云怎么样"><a href="#初七云怎么样" class="headerlink" title="初七云怎么样"></a>初七云怎么样</h2><blockquote><p><a href="https://www.chuqiyun.com/aff/IDRGMZMW">初七云</a>怎么样？<a href="https://www.chuqiyun.com/aff/IDRGMZMW">初七云</a>是一家国人主机商，提供 VPS、CDN 等，数据中心包括中国香港、美国等，国内直连优化或者 CN2 GIA 等优秀线路，还有 CERA 低价服务器。</p></blockquote><p><a href="https://www.chuqiyun.com/aff/IDRGMZMW">初七云</a>中 VPS 包括常规 VPS (经典轻量云服务器) 和 ECS (弹性云)，支持自定义配置。</p><p><a href="https://www.chuqiyun.com/aff/IDRGMZMW">初七云</a>致力于创新IDC业内新平台，目前真正研发全新IDC财务结算系统，CDN插件，智慧虚拟主机管理系统，IDS网络管理系统</p><p>同时我们希望可以与业内同行互利共赢，实现IDC行业健康规范发展</p><p><img src="https://cdn.chuqis.com/img/37a45efb11ae5548148700f194128686.png" class="lazyload" data-srcset="https://cdn.chuqis.com/img/37a45efb11ae5548148700f194128686.png" srcset="data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="https://cdn.chuqis.com/img/37a45efb11ae5548148700f194128686.png"></p></div><div class="story post-story"><h2 id="官方网站"><a href="#官方网站" class="headerlink" title="官方网站"></a>官方网站</h2><p><a href="https://www.chuqiyun.com/aff/IDRGMZMW">https://www.chuqiyun.com/</a></p></div><div class="story post-story"><h2 id="最新特惠活动"><a href="#最新特惠活动" class="headerlink" title="最新特惠活动"></a>最新特惠活动</h2><p><img src="https://www.mryunqi.com/wp-content/uploads/2023/01/1675161489-%E7%94%BB%E6%9D%BF-1-1024x493.png" class="lazyload" data-srcset="https://www.mryunqi.com/wp-content/uploads/2023/01/1675161489-%E7%94%BB%E6%9D%BF-1-1024x493.png" srcset="data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=="></p><p>活动一：</p><ul><li>华中高防16-32 180月 续费同价</li><li>不限量 66 折・骨折码：[qystu] (所有产品)</li><li>全球加速体验版 月流量：20G 域名：3 防护：自定义 网站预热： 支持 全球多节点负载</li></ul><p>活动二：</p><ul><li>aff推介计划 新购返点7%以上，更多查看官网</li><li>代理75折 5元永久</li></ul></div><div class="story post-story"><h2 id="香港精品云"><a href="#香港精品云" class="headerlink" title="香港精品云"></a>香港精品云</h2><p>包括CTG GIA等线路 大陆方向优化</p><p>评论获取6折码</p><p>10-16评论获取99折扣码</p><p><img src="https://cdn.chuqis.com/img/c6031c890ce5726fcc8dbef6d4af2dd4.png" class="lazyload" data-srcset="https://cdn.chuqis.com/img/c6031c890ce5726fcc8dbef6d4af2dd4.png" srcset="data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="https://cdn.chuqis.com/img/c6031c890ce5726fcc8dbef6d4af2dd4.png"></p></div><div class="story post-story"><h2 id="纽约服务器"><a href="#纽约服务器" class="headerlink" title="纽约服务器"></a>纽约服务器</h2><p>低价钜惠 线路优秀 利好建站</p><p><img src="https://cdn.chuqis.com/img/fcb66aff0fc673e38db85fdb3be8646f.png" class="lazyload" data-srcset="https://cdn.chuqis.com/img/fcb66aff0fc673e38db85fdb3be8646f.png" srcset="data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="纽约服务器"></p></div><div class="story post-story"><h2 id="蜂鸟云桌面"><a href="#蜂鸟云桌面" class="headerlink" title="蜂鸟云桌面"></a>蜂鸟云桌面</h2><p>全新技术，支持显卡云桌面，欢迎对接</p><h3 id="普通体验型"><a href="#普通体验型" class="headerlink" title="普通体验型"></a>普通体验型</h3><p><img src="https://cdn.chuqis.com/img/e5b72cdd660cc26ca25b89ff235197cf.png" class="lazyload" data-srcset="https://cdn.chuqis.com/img/e5b72cdd660cc26ca25b89ff235197cf.png" srcset="data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="蜂鸟服务器"></p><h3 id="gcc显卡云"><a href="#gcc显卡云" class="headerlink" title="gcc显卡云"></a>gcc显卡云</h3><p><img src="https://cdn.chuqis.com/img/22094522cf4b56e6ad3b416c87ee4c07.png" class="lazyload" data-srcset="https://cdn.chuqis.com/img/22094522cf4b56e6ad3b416c87ee4c07.png" srcset="data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="gcc显卡云"></p><h3 id="gcpm高性能（适合各种游戏、软件、直播、模拟器多开、虚拟机多开、渲染、模型训练等）"><a href="#gcpm高性能（适合各种游戏、软件、直播、模拟器多开、虚拟机多开、渲染、模型训练等）" class="headerlink" title="gcpm高性能（适合各种游戏、软件、直播、模拟器多开、虚拟机多开、渲染、模型训练等）"></a>gcpm高性能（<strong>适合各种游戏、软件、直播、模拟器多开、虚拟机多开、渲染、模型训练等</strong>）</h3><p><img src="https://cdn.chuqis.com/img/fdca154c89da57f7377fd38ce34b1cab.png" class="lazyload" data-srcset="https://cdn.chuqis.com/img/fdca154c89da57f7377fd38ce34b1cab.png" srcset="data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="gcpm高性能服务器"></p></div>]]></content>
    
    
    <summary type="html">初七云是一家国人主机商，提供 VPS、CDN 等，数据中心包括中国香港、美国等，国内直连优化或者 CN2 GIA 等优秀线路，还有 CERA 低价服务器。</summary>
    
    
    
    
    <category term="初七云" scheme="https://www.qystu.cc/tags/%E5%88%9D%E4%B8%83%E4%BA%91/"/>
    
    <category term="IDC" scheme="https://www.qystu.cc/tags/IDC/"/>
    
  </entry>
  
  <entry>
    <title>胡杨礼赞</title>
    <link href="https://www.qystu.cc/posts/52176.html"/>
    <id>https://www.qystu.cc/posts/52176.html</id>
    <published>2023-01-14T09:08:53.000Z</published>
    <updated>2023-01-14T12:41:23.000Z</updated>
    
    <content type="html"><![CDATA[<p>我赞美胡杨，赞美它那挺立的身姿，赞美它那无尽的毅力，所以我要高声地赞美胡杨。<br>我初见胡杨，是一段干巴巴的树枝，干裂的树皮同被一个身强力壮的人硬扭的麻花一样，一条条不齐地盘旋在表面上。一个一个凹凹凸凸的小点，同麻疹一样撒在一条条纵横的沟壑间，给人一种就是普通的木头段子，在落叶堆间唾手可得的平凡之物，而不用给予任何理睬时，因一段家尊的口述后，我要高声赞美胡杨。<br>“这段胡杨，是我去西北时，路过一片树林，起初我还不知道那是什么树，枝条一个个旁逸斜出，但这段胡杨的故事使我难忘，这段胡杨就是我在那捡的。”我爸顿了顿，饮了口茶。从他对我的简述我还没有领会到胡杨的特别，但后来的这样一句话，让我一开始看到胡杨时，那种从这段胡杨中渐渐溢出矗立西域千年的古老气息是从何而来的了。<br>“胡杨生则三千年不死，死则三千年不倒，倒则三千年不朽。”这是在我内心最震撼的一句话。细看它之后才发现，这一截虬枝上，本是断折处应棱立而起的木碴，是被荒漠岁月的雄风磨去了棱角。枝条落在地上，向上的那一面已被西北沙漠的烈日烤得发黄发焦，这些是绝非一日而就的。<br>家尊至西北关塞之日亦为四月，胡杨之叶乃未发也，枯叶存枝头，尚犹金也。予枝虽不齐，但生志犹高也。日挂枝头，大江东去，杨满金沙丘。登丘而望其林也，树虽旁逸斜出，日照投其影，影布石上，甚异之。<br>虽然这样的胡杨相貌不扬，但岁月嵌在上面，那种难以掩饰的威严每每能震慑住我。这是生命与时间迸发出的火焰，把鼻子凑上去细细地嗅，有一种檀木发出的被岁月冲淡的浅浅香气。<br>我用手抚摸这这从千里外来的“老人”，本是对破木头的鄙夷，以全然转变为对岁月的仰望了。日日夜夜浓缩在这样一段胡杨里，是生命，是历史，也是我感受到华夏大地不屈服的毅力。<br>“我把一段小胡杨枝送给了一位叔叔，他一开始也以为这是块破木头，但他听了胡杨背后的故事，也突然使他迷上了胡杨的精神品质，他说将会把段胡杨好好收藏，也是我寓意着他的事业如胡杨一样常青。”我爸最后向我说，“我这还有一小段胡杨，虽然不能拿来当做封存美术馆的艺术品，但有时候吧，胡杨的意志才是人们追求的。不论日晒雨淋，都不应倒下。生命给我们种种坎坷，究竟是一种恩赐，还是一种折磨？”父亲向我抛下了一个疑问。<br>自愧不如，这个问题我还尚无得到解释，但我却理解了胡杨崎岖表面上一条条沟壑的深意，这是生命一定会有的，生命必须有裂缝，阳光才照得进来。<br>听故事的人变成讲故事的人，讲故事的人变成了故事里的人，生命即如胡杨，时间能证明一切。这是从胡杨的一生中得出的道理。<br>是啊！没有什么能够超脱时间的束缚，我们虽没有千年的寿命，但我们能做的，只有自强不息，因为这样，时间才永远无法击败我们的心志。<br>谨以此文，记矛盾老先生和送给我的父亲。</p>]]></content>
    
    
    <summary type="html">虽然这样的胡杨相貌不扬，但岁月嵌在上面，那种难以掩饰的威严每每能震慑住我。这是生命与时间迸发出的火焰，把鼻子凑上去细细地嗅，有一种檀木发出的被岁月冲淡的浅浅香气。</summary>
    
    
    
    <category term="散文" scheme="https://www.qystu.cc/categories/%E6%95%A3%E6%96%87/"/>
    
    
    <category term="散文" scheme="https://www.qystu.cc/tags/%E6%95%A3%E6%96%87/"/>
    
    <category term="抒情" scheme="https://www.qystu.cc/tags/%E6%8A%92%E6%83%85/"/>
    
  </entry>
  
  <entry>
    <title>小米12su与vivox90pro+综合对比及机圈未来趋势</title>
    <link href="https://www.qystu.cc/posts/10907.html"/>
    <id>https://www.qystu.cc/posts/10907.html</id>
    <published>2023-01-12T05:16:56.000Z</published>
    <updated>2023-01-12T05:16:56.000Z</updated>
    
    <content type="html"><![CDATA[<p><img src="https://cdn.chuqis.com/img/4d793a087a3c14c54dc00eb30f512f2f.webp" class="lazyload" data-srcset="https://cdn.chuqis.com/img/4d793a087a3c14c54dc00eb30f512f2f.webp" srcset="data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="https://cdn.chuqis.com/img/4d793a087a3c14c54dc00eb30f512f2f.webp"></p><div class="story post-story"><h2 id="性能方面"><a href="#性能方面" class="headerlink" title="性能方面"></a>性能方面</h2><p><code>小米12su</code>和 <code>vivo x90pro+</code>作为2022年的年度影像旗舰，综合实力两者不相上下，但性能方面vivo会强些。12su由于是7月发布，只能用上骁龙8＋，其闪存和内存分别是 <code>ufs3.1</code>和LPDDR5。而vivo x90pro+为12月发布，用上了高通最新的骁龙8Gen2，内存和闪存也分别升级到了最新规格，为 <code>ufs4.0</code>和 <code>LPDDR5x</code></p><div class="img-wrap"><div class="img-bg"><img class="img lazyload" src="https://cdn.chuqis.com/img/42c9607fba71b879cb7f7988923c1861.jpeg" class="lazyload" data-srcset="https://cdn.chuqis.com/img/42c9607fba71b879cb7f7988923c1861.jpeg" srcset="data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="image" style="width:300px;"/></div></div><p>此次骁龙 8 Gen2 采用了 1+2+2+3 四丛集方案，具体为 1 颗 3.19GHz 主频 Cortex-X3 超大核，2 个 2.8GHz 主频 A715 大核心，2 个 2.8GHz 主频 A710 中核以及 3 个 2.0GHz 主频 A510 小核心，GPU 为 Adreno 740。</p><p><img src="https://cdn.chuqis.com/img/7e1b569135fc7a86a1631c58d47e3cfd.jpg" class="lazyload" data-srcset="https://cdn.chuqis.com/img/7e1b569135fc7a86a1631c58d47e3cfd.jpg" srcset="data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="https://cdn.chuqis.com/img/7e1b569135fc7a86a1631c58d47e3cfd.jpg"></p><p>CPU方面为正常迭代升级，主要为降低功耗。而GPU则有亮点，高通增加GPU面积高达50％，但频率却大幅降低至680兆，为的是在低频下得到更好的能效比。根据极客湾的测试，骁龙 <code>8gen2</code>的GPU在性能上比A16高出了18％，且满载功耗仅有8w，表现非常不错。</p></div><div class="story post-story"><h2 id="屏幕"><a href="#屏幕" class="headerlink" title="屏幕"></a>屏幕</h2><p><code>小米12su</code>采用三星E5屏幕，<code>vivo x90pro+</code>采用三星E6，都为2k+120hz，且都有微棱镜技术。虽然显示效果方面大差不差，但E6屏幕的激发亮度更高，并且E6屏幕有1920hzPWM调光，护眼效果比E5好很多。都有ltpo技术。</p></div><div class="story post-story"><h2 id="充电"><a href="#充电" class="headerlink" title="充电"></a>充电</h2><p><code>小米12su</code>采用4860mAh＋67w有线＋50w无线</p><p><code>vivo x90pro+</code>采用4700mAh＋80w有线＋50w无线</p></div><div class="story post-story"><h2 id="影像"><a href="#影像" class="headerlink" title="影像"></a>影像</h2><p><code>小米12su</code>：主摄采用索尼IMX989感光器，其尺寸规格1英寸，这是目前主流手机中所用到最大尺寸的感光器。5000万总像素，默认四合一输出约1250万像素，镜头集成光学防抖，等效焦距23毫米，F/1.9光圈。除了感光器之外，镜头镀膜也采用了ALD镀膜以及IRCF旋涂技术，旨在减少眩光和鬼影。</p><p>超广采用索尼IMX586感光器，尺寸规格1/2英寸，4800万像素，默认四合一输出1200万像素，镜头等效焦距13毫米，镜头光圈f/2.2。</p><p>潜望长焦也是采用的IMX586感光器，5x光学变焦，等效焦距120毫米，光圈F/4.1，集成光学防抖。</p><p><code>vivo x90pro+</code>：主摄为5000万像素IMX989，1英寸，支持OIS防抖，f/1.75大光圈，外加T*镀膜，抗鬼影和炫光效果十分不错。</p><p>人像为5000万像素IMX758，2x光学变焦，支持OIS，1/2.51英寸底，f/1.6大光圈。</p><p>超广角为4800万像素IMX598，1/2英寸底，f/2.2光圈。</p><p>潜望长焦为6400万像素OV64B，3.5x光学变焦，支持OIS防抖，1/2英寸底，f/3.5光圈。</p></div><div class="story post-story"><h2 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h2><p>小米12su和vivo x90pro+影像规格都非常高。由于vivo有 <code>T*</code>镀膜，因此抗炫光能力更强。得益于2x人像镜头的加入，vivo的焦段覆盖更全面，但也造成了vivo在10x以上画质不如小米。vivo还采用了自研影像芯片v2，使得极限暗光场景和夜景视频表现更为出色。但整体来说，这两部机器的影像都非常出色。</p></div><div class="story post-story"><h2 id="看法"><a href="#看法" class="headerlink" title="看法"></a>看法</h2><p>但受限于机身内部空间，vivo本次并没有上微云台，但由于机圈内卷现状，各厂商也不得不最求更大的底。</p><p>如果vivo去掉2x镜头，再引入融合算法，让2x由主摄裁切＋潜望融合的方式可能会更好，由于融合只能是画面中心，正好在人像模式下，背景能得到自然的虚化，中心人物的解析力也会不错。去掉2x镜头，还可以节省内部空间，使的超广角或潜望的底更大或者加入微云台，使视频效果更好。</p><p>或者vivo保留人像镜头，但主摄还是用之前的Gn1。众所周知，在白天光线充足的场景，GN1的效果和1英寸基本没什么差距。而夜景，得益于影响芯片的加入，即使是GN1，也会有非常不错的效果。并且这样还能加入微云台技术，使视频稳定性更好</p><p> </p></div>]]></content>
    
    
    <summary type="html">小米12su与vivox90pro+综合对比及机圈未来趋势</summary>
    
    
    
    <category term="手机" scheme="https://www.qystu.cc/categories/%E6%89%8B%E6%9C%BA/"/>
    
    
    <category term="手机" scheme="https://www.qystu.cc/tags/%E6%89%8B%E6%9C%BA/"/>
    
    <category term="vivo" scheme="https://www.qystu.cc/tags/vivo/"/>
    
    <category term="天玑" scheme="https://www.qystu.cc/tags/%E5%A4%A9%E7%8E%91/"/>
    
    <category term="x90" scheme="https://www.qystu.cc/tags/x90/"/>
    
    <category term="小米" scheme="https://www.qystu.cc/tags/%E5%B0%8F%E7%B1%B3/"/>
    
    <category term="高通" scheme="https://www.qystu.cc/tags/%E9%AB%98%E9%80%9A/"/>
    
    <category term="骁龙 8 Gen2" scheme="https://www.qystu.cc/tags/%E9%AA%81%E9%BE%99-8-Gen2/"/>
    
  </entry>
  
  <entry>
    <title>qexo多作者解决方案</title>
    <link href="https://www.qystu.cc/posts/32667.html"/>
    <id>https://www.qystu.cc/posts/32667.html</id>
    <published>2023-01-12T04:45:34.000Z</published>
    <updated>2023-01-14T12:31:13.000Z</updated>
    
    <content type="html"><![CDATA[<p><img src="https://cdn.chuqis.com/img/ba28b505cd1c674036c0a05d3f70c6ae.jpg" class="lazyload" data-srcset="https://cdn.chuqis.com/img/ba28b505cd1c674036c0a05d3f70c6ae.jpg" srcset="data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="https://cdn.chuqis.com/img/ba28b505cd1c674036c0a05d3f70c6ae.jpg"></p><p>在一个博客可能会有多个作者在写文章，比如我的博客，所以我折腾abudu大大好久</p><p>abudu大大真是一个好开发，满足用户需求</p><div class="story post-story"><h2 id="方法"><a href="#方法" class="headerlink" title="方法"></a>方法</h2><p>废话不说了，直接上方法</p><p>打开 <code>qexo域名/userscrpits.html</code>创建子账号</p><p>然后是否为管理按需填写</p><p>然后完结撒花</p></div><div class="story post-story"><h2 id="再次感谢abudu大佬"><a href="#再次感谢abudu大佬" class="headerlink" title="再次感谢abudu大佬"></a>再次感谢abudu大佬</h2><p>成功又水一篇文章</p><div></div><div class="story post-story"><h2>推荐文章<span style="font-size:0.45em; color:gray">（由<a href="https://github.com/huiwang/hexo-recommended-posts">hexo文章推荐插件</a>驱动）</span></h2><ul><li><a href="https://www.qystu.cc/posts/11159.html">DIY最低成本图床</a></li><li><a href="https://www.qystu.cc/posts/52948.html">serviceworkers首屏优化</a></li><li><a href="https://www.qystu.cc/posts/61056.html">为hexo加一个自动部署</a></li></ul></div></div>]]></content>
    
    
    <summary type="html">qexo多作者解决方案</summary>
    
    
    
    <category term="hexo" scheme="https://www.qystu.cc/categories/hexo/"/>
    
    
    <category term="hexo" scheme="https://www.qystu.cc/tags/hexo/"/>
    
    <category term="博客" scheme="https://www.qystu.cc/tags/%E5%8D%9A%E5%AE%A2/"/>
    
    <category term="qexo" scheme="https://www.qystu.cc/tags/qexo/"/>
    
  </entry>
  
  <entry>
    <title>DIY最低成本图床</title>
    <link href="https://www.qystu.cc/posts/11159.html"/>
    <id>https://www.qystu.cc/posts/11159.html</id>
    <published>2023-01-01T05:12:55.000Z</published>
    <updated>2023-01-01T06:09:45.000Z</updated>
    
    <content type="html"><![CDATA[<div class="story post-story"><h2 id="backblaze"><a href="#backblaze" class="headerlink" title="backblaze"></a>backblaze</h2><p>我在使用了许许多多的图床后一直没有很好的解决方案</p><p>我早期使用过了jsd+github的图床，但是因为jsd的icp备案被注销，且不能使用国内的cdn节点，这个方法随之不可用了</p><p>后来我将cdn仓库通过npm发包，并且使用知乎和饿了么的加速服务，但是知乎添加的白名单而不可用，随后饿了么也停止了服务，但是后来又重启了服务</p><p>这几个方案的潜在不稳定性告诉我，迫切需要一个自建的图床</p><p>不久我在cyfan的博客中发现了Backblaze自建图床的方案</p><blockquote><p>2015年9月，Backblaze推出了新产品B2 Cloud Storage。作为基础架构即服务（IaaS），它的目标是软件集成（尽管也提供Web前端和API）。它直接与类似服务Amazon S3，Microsoft Azure和Google Cloud竞争。在2018年4月，Backblaze宣布了云计算合作伙伴关系，它将直接将Backblaze的数据中心与其合作伙伴Packet和ServerCentral连接起来，为存储在B2 Cloud Storage中的数据提供高性能的云计算，而无需支付任何费用。</p></blockquote><p>B2 Cloud Storage非常客气，有以下优点：</p><ul><li>用户永久免费<strong>10GB</strong>直链存储</li><li>每天<strong>1GB</strong>下行流量</li><li>无限量的上传流量</li><li>每天下载请求<strong>2500</strong>次免费</li><li>每天上传请求<strong>2500</strong>次免费</li><li>基于CloudFlareCDN</li></ul><p>而且超出免费额度的价钱也十分合理【不过我不会往里头冲一分钱的！】 <a href="https://npm.elemecdn.com/chenyfan-oss@1.0.0/pic/postpic/2020-07-09%20100931.jpg"><img src="https://npm.elemecdn.com/chenyfan-oss@1.0.0/pic/postpic/2020-07-09%20100931.jpg" class="lazyload" data-srcset="https://npm.elemecdn.com/chenyfan-oss@1.0.0/pic/postpic/2020-07-09%20100931.jpg" srcset="data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="https://npm.elemecdn.com/chenyfan-oss@1.0.0/pic/postpic/2020-07-09%20100931.jpg"></a></p><p>然而我偶然得知，Backblaze加入了CloudFlare的 <a href="https://www.cloudflare.com/bandwidth-alliance/">带宽联盟（ Bandwidth Alliance）</a> Backblaze与CloudFlare之间的流量直接免费，也就是每天<strong>无限量</strong>下行流量，配上CloudFlare超长缓存，每天下载请求无限次免费。</p></div><div class="story post-story"><h2 id="注册"><a href="#注册" class="headerlink" title="注册"></a>注册</h2><p>我们点击<a href="https://www.backblaze.com/zh_CN/cloud-storage.html">这里</a>去注册一个账号，建议使用google账号注册，会更加方便</p><p><img src="https://npm.elemecdn.com/chenyfan-oss@1.0.0/pic/postpic/2020-07-09%20101845.jpg" class="lazyload" data-srcset="https://npm.elemecdn.com/chenyfan-oss@1.0.0/pic/postpic/2020-07-09%20101845.jpg" srcset="data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=="></p><h3 id="新建桶"><a href="#新建桶" class="headerlink" title="新建桶"></a>新建桶</h3><p><img src="https://cdn.chuqis.com/img/139f85370f4bba46aa0fd4dba32d3d8b.jpg" class="lazyload" data-srcset="https://cdn.chuqis.com/img/139f85370f4bba46aa0fd4dba32d3d8b.jpg" srcset="data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="https://cdn.chuqis.com/img/139f85370f4bba46aa0fd4dba32d3d8b.jpg"></p><p>新建一个桶，设置为公开：</p><p>上传一个文件，点击右边的信息按钮，我们要在这里获取一些信息：</p><p><img src="https://cdn.chuqis.com/img/da3fd7366e8d1026b23d1ec85439ea4e.jpg" class="lazyload" data-srcset="https://cdn.chuqis.com/img/da3fd7366e8d1026b23d1ec85439ea4e.jpg" srcset="data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="https://cdn.chuqis.com/img/da3fd7366e8d1026b23d1ec85439ea4e.jpg"></p></div><div class="story post-story"><h2 id="自定义域名"><a href="#自定义域名" class="headerlink" title="自定义域名"></a>自定义域名</h2><p>这一步需要你有个域名，开个子域给图床：</p><p>看到你上面的friendly url，把他的域名f00x.backblaze2.com解析到你想要的域名</p><p>这里我们先去<code>Cloudflare</code>新建一个<code>workers</code></p><p>代码如下</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><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></pre></td><td class="code"><pre><span class="line">&#x27;use strict&#x27;;</span><br><span class="line">const b2Domain = &#x27;assets.qystudio.ml&#x27;; // configure this as per instructions above</span><br><span class="line">const b2Bucket = &#x27;qystupic&#x27;; // configure this as per instructions above</span><br><span class="line">const b2UrlPath = `/file/$&#123;b2Bucket&#125;/`;</span><br><span class="line">addEventListener(&#x27;fetch&#x27;, event =&gt; &#123;</span><br><span class="line">return event.respondWith(fileReq(event));</span><br><span class="line">&#125;);</span><br><span class="line"></span><br><span class="line">// define the file extensions we wish to add basic access control headers to</span><br><span class="line">const corsFileTypes = [&#x27;png&#x27;, &#x27;jpg&#x27;, &#x27;gif&#x27;, &#x27;jpeg&#x27;, &#x27;webp&#x27;, &#x27;css&#x27;, &#x27;js&#x27;, &#x27;html&#x27;];</span><br><span class="line"></span><br><span class="line">// backblaze returns some additional headers that are useful for debugging, but unnecessary in production. We can remove these to save some size</span><br><span class="line">const removeHeaders = [</span><br><span class="line">&#x27;x-bz-content-sha1&#x27;,</span><br><span class="line">&#x27;x-bz-file-id&#x27;,</span><br><span class="line">&#x27;x-bz-file-name&#x27;,</span><br><span class="line">&#x27;x-bz-info-src_last_modified_millis&#x27;,</span><br><span class="line">&#x27;X-Bz-Upload-Timestamp&#x27;,</span><br><span class="line">&#x27;Expires&#x27;</span><br><span class="line">];</span><br><span class="line">const expiration = 31536000; // override browser cache for images - 1 year</span><br><span class="line"></span><br><span class="line">// define a function we can re-use to fix headers</span><br><span class="line">const fixHeaders = function(url, status, headers)&#123;</span><br><span class="line">let newHdrs = new Headers(headers);</span><br><span class="line">// add basic cors headers for images</span><br><span class="line">if(corsFileTypes.includes(url.pathname.split(&#x27;.&#x27;).pop()))&#123;</span><br><span class="line">newHdrs.set(&#x27;Access-Control-Allow-Origin&#x27;, &#x27;*&#x27;);</span><br><span class="line">&#125;</span><br><span class="line">// override browser cache for files when 200</span><br><span class="line">if(status === 200)&#123;</span><br><span class="line">newHdrs.set(&#x27;Cache-Control&#x27;, &quot;public, max-age=&quot; + expiration);</span><br><span class="line">&#125;else&#123;</span><br><span class="line">// only cache other things for 5 minutes</span><br><span class="line">newHdrs.set(&#x27;Cache-Control&#x27;, &#x27;public, max-age=300&#x27;);</span><br><span class="line">&#125;</span><br><span class="line">// set ETag for efficient caching where possible</span><br><span class="line">const ETag = newHdrs.get(&#x27;x-bz-content-sha1&#x27;) || newHdrs.get(&#x27;x-bz-info-src_last_modified_millis&#x27;) || newHdrs.get(&#x27;x-bz-file-id&#x27;);</span><br><span class="line">if(ETag)&#123;</span><br><span class="line">newHdrs.set(&#x27;ETag&#x27;, ETag);</span><br><span class="line">&#125;</span><br><span class="line">// remove unnecessary headers</span><br><span class="line">removeHeaders.forEach(header =&gt; &#123;</span><br><span class="line">newHdrs.delete(header);</span><br><span class="line">&#125;);</span><br><span class="line">return newHdrs;</span><br><span class="line">&#125;;</span><br><span class="line">async function fileReq(event)&#123;</span><br><span class="line">const cache = caches.default; // Cloudflare edge caching</span><br><span class="line">const url = new URL(event.request.url);</span><br><span class="line">if(url.host === b2Domain &amp;&amp; !url.pathname.startsWith(b2UrlPath))&#123;</span><br><span class="line">url.pathname = b2UrlPath + url.pathname;</span><br><span class="line">&#125;</span><br><span class="line">let response = await cache.match(url); // try to find match for this request in the edge cache</span><br><span class="line">if(response)&#123;</span><br><span class="line">// use cache found on Cloudflare edge. Set X-Worker-Cache header for helpful debug</span><br><span class="line">let newHdrs = fixHeaders(url, response.status, response.headers);</span><br><span class="line">newHdrs.set(&#x27;X-Worker-Cache&#x27;, &quot;true&quot;);</span><br><span class="line">return new Response(response.body, &#123;</span><br><span class="line">status: response.status,</span><br><span class="line">statusText: response.statusText,</span><br><span class="line">headers: newHdrs</span><br><span class="line">&#125;);</span><br><span class="line">&#125;</span><br><span class="line">// no cache, fetch image, apply Cloudflare lossless compression</span><br><span class="line">response = await fetch(url, &#123;cf: &#123;polish: &quot;lossless&quot;&#125;&#125;);</span><br><span class="line">let newHdrs = fixHeaders(url, response.status, response.headers);</span><br><span class="line"></span><br><span class="line">  if(response.status === 200)&#123;</span><br><span class="line"></span><br><span class="line">    response = new Response(response.body, &#123;</span><br><span class="line">      status: response.status,</span><br><span class="line">      statusText: response.statusText,</span><br><span class="line">      headers: newHdrs</span><br><span class="line">    &#125;);</span><br><span class="line">  &#125;else&#123;</span><br><span class="line">    response = new Response(&#x27;File not found!&#x27;, &#123; status: 404 &#125;)</span><br><span class="line">  &#125;</span><br><span class="line"></span><br><span class="line">event.waitUntil(cache.put(url, response.clone()));</span><br><span class="line">return response;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>然后在workers的触发器里面找到路由设置为 <code>域名/*</code></p><p>到这里我们离成功只有一步之遥</p></div><div class="story post-story"><h2 id="配置缓存"><a href="#配置缓存" class="headerlink" title="配置缓存"></a>配置缓存</h2><h3 id="储存桶设置"><a href="#储存桶设置" class="headerlink" title="储存桶设置"></a>储存桶设置</h3><p>我们打开这里</p><p><img src="https://cdn.chuqis.com/img/e68f1676e4b19b20964509662f00beb1.png" class="lazyload" data-srcset="https://cdn.chuqis.com/img/e68f1676e4b19b20964509662f00beb1.png" srcset="data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="https://cdn.chuqis.com/img/e68f1676e4b19b20964509662f00beb1.png"></p><p>点击桶，进入桶设定：</p><p><img src="https://cdn.chuqis.com/img/9d25ac6ef84af13c6bf1e41c44fc2f97.jpg" class="lazyload" data-srcset="https://cdn.chuqis.com/img/9d25ac6ef84af13c6bf1e41c44fc2f97.jpg" srcset="data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="https://cdn.chuqis.com/img/9d25ac6ef84af13c6bf1e41c44fc2f97.jpg"></p><p>里头写上:</p><p><code>&#123;&quot;cache-control&quot;:&quot;max-age=43200000&quot;&#125;</code></p><p>这个意思是强制缓存 43200000 ,大约是50天.然而这里注意一下，时间太长有个问题，你修改一张图片，外面可以能要50天才能更改，这样只能通过手动清除缓存做到了。</p><p>点击CORS设置,选择:</p><p>与所有HTTPS来源共享此存储桶中的所有内容。</p><h3 id="cf缓存设置"><a href="#cf缓存设置" class="headerlink" title="cf缓存设置"></a>cf缓存设置</h3><p>在域名里面找到规则，新建规则如下设置</p><p><img src="https://cdn.chuqis.com/img/9d25ac6ef84af13c6bf1e41c44fc2f97.jpg" class="lazyload" data-srcset="https://cdn.chuqis.com/img/9d25ac6ef84af13c6bf1e41c44fc2f97.jpg" srcset="data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="https://cdn.chuqis.com/img/9d25ac6ef84af13c6bf1e41c44fc2f97.jpg"></p><p>到这里我们就大功告成了，完结撒花</p></div><div class="story post-story"><h2 id="其他"><a href="#其他" class="headerlink" title="其他"></a>其他</h2><p>你甚至还可以配置国内cdn回源到这里，以提升速度</p><p>就像这样</p><p><img src="https://cdn.chuqis.com/img/228be3eb21e55bde29a1fff1e13f8d0e.png" class="lazyload" data-srcset="https://cdn.chuqis.com/img/228be3eb21e55bde29a1fff1e13f8d0e.png" srcset="data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="https://cdn.chuqis.com/img/228be3eb21e55bde29a1fff1e13f8d0e.png"></p><div></div><div class="story post-story"><h2>推荐文章<span style="font-size:0.45em; color:gray">（由<a href="https://github.com/huiwang/hexo-recommended-posts">hexo文章推荐插件</a>驱动）</span></h2><ul><li><a href="https://www.qystu.cc/posts/32667.html">qexo多作者解决方���</a></li><li><a href="https://www.qystu.cc/posts/61056.html">为hexo加一个自动部署</a></li><li><a href="https://www.qystu.cc/posts/34886.html">github图床之弃用jsd(图床���用npm镜像加速)</a></li></ul></div></div>]]></content>
    
    
    <summary type="html">DIY最低成本图床</summary>
    
    
    
    <category term="hexo" scheme="https://www.qystu.cc/categories/hexo/"/>
    
    <category term="建站" scheme="https://www.qystu.cc/categories/hexo/%E5%BB%BA%E7%AB%99/"/>
    
    
    <category term="hexo" scheme="https://www.qystu.cc/tags/hexo/"/>
    
    <category term="图床" scheme="https://www.qystu.cc/tags/%E5%9B%BE%E5%BA%8A/"/>
    
  </entry>
  
  <entry>
    <title>年度回顾与展望</title>
    <link href="https://www.qystu.cc/posts/47618.html"/>
    <id>https://www.qystu.cc/posts/47618.html</id>
    <published>2022-12-30T10:43:35.000Z</published>
    <updated>2022-12-31T03:40:08.000Z</updated>
    
    <content type="html"><![CDATA[<p><img src="https://cdn.chuqis.com/img/06b72ec6217f5f65616fa132b779fb97.png" class="lazyload" data-srcset="https://cdn.chuqis.com/img/06b72ec6217f5f65616fa132b779fb97.png" srcset="data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="https://cdn.chuqis.com/img/06b72ec6217f5f65616fa132b779fb97.png"></p><div class="story post-story"><h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>又到了年末之时距离2023你还剩下两天，这时写这篇文章正好</p></div><div class="story post-story"><h2 id="回顾"><a href="#回顾" class="headerlink" title="回顾"></a>回顾</h2><p>回顾这一年青云做了许许多多的改动</p><p>青云工作室博客更新了主题，更加简洁大方</p><p>青云更换了域名 由<code>qystudio.ltd</code>改为<code>qystu.cc</code></p><p>青云迁移了所有服务</p><p>青云工作室进行了备案，主体为拾小染网络科技（上海）有限责任公司</p><p>青云工作室转移了主体，隶属于武汉初柒网络科技有限公司，保留独立性</p><p>青云负责人加入了武汉初柒网络科技有限公司</p><p>青云将网站移动到了dcloud中，提高了网络速度</p><p>青云招收了3位作者为青云提供文章</p><p>青云更换了serviceworker脚本来加速网站</p><p>青云更换了sw安装脚本</p><p>青云部署了新的jsd代理<code>cdn.chuqis.com</code>不仅支持<code>jsd</code>的常规使用同时代理了<code>cdnjs</code>且支持了青云的图床使用</p></div><div class="story post-story"><h2 id="展望"><a href="#展望" class="headerlink" title="展望"></a>展望</h2><p>我们希望未来可以</p><p>招收更多作者加入青云博客，尝试多作者模式</p><p>与携手初柒科技获得更多发展</p><p>更新博客主题，极致优化速度</p><p>优化SEO，对蜘蛛优化，增加搜索引擎流量</p><p>推广青云博客，收获更多流量</p><p>更多参与开源社区活动，聚焦公益项目</p></div><div class="story post-story"><h2 id="远航"><a href="#远航" class="headerlink" title="远航"></a>远航</h2><p>最后希望在新的一年了，青云可以扬帆远航</p><p>同时预祝大家新年快乐😀 大吉大利</p><p><img src="https://cdn.chuqis.com/img/6ac67d6e38b3796d8b5316f8a6c22624.png" class="lazyload" data-srcset="https://cdn.chuqis.com/img/6ac67d6e38b3796d8b5316f8a6c22624.png" srcset="data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="https://cdn.chuqis.com/img/6ac67d6e38b3796d8b5316f8a6c22624.png"></p></div>]]></content>
    
    
    <summary type="html">初柒青云团队年度回顾与展望</summary>
    
    
    
    <category term="qystudio" scheme="https://www.qystu.cc/categories/qystudio/"/>
    
    
    <category term="生活" scheme="https://www.qystu.cc/tags/%E7%94%9F%E6%B4%BB/"/>
    
    <category term="青云" scheme="https://www.qystu.cc/tags/%E9%9D%92%E4%BA%91/"/>
    
    <category term="2023" scheme="https://www.qystu.cc/tags/2023/"/>
    
  </entry>
  
  <entry>
    <title>netlify反代</title>
    <link href="https://www.qystu.cc/posts/23787.html"/>
    <id>https://www.qystu.cc/posts/23787.html</id>
    <published>2022-12-29T13:18:42.000Z</published>
    <updated>2022-12-30T08:38:37.000Z</updated>
    
    <content type="html"><![CDATA[<div class="story post-story"><h2 id="起因"><a href="#起因" class="headerlink" title="起因"></a>起因</h2><p>我在使用netlify部署博客后，经过测试速度，我觉得作为一款非国内产品速度相当不错</p><p><img src="https://cdn.chuqis.com/img/35b2aaa74553ddcf3b4e9765d2a3df0b.jpg" class="lazyload" data-srcset="https://cdn.chuqis.com/img/35b2aaa74553ddcf3b4e9765d2a3df0b.jpg" srcset="data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="https://cdn.chuqis.com/img/35b2aaa74553ddcf3b4e9765d2a3df0b.jpg"></p><p>所以我想到了我部署在vercel的jsd反代<br>如果我把反代部署在netlify那么cdn的速度会有提升<br>说干就干</p><p>ps:如果你不想看我叨叨，你可以点击跳转到<a href="/posts/23787.html#%E5%AE%9E%E8%B7%B5%E4%BB%A3%E7%A0%81">代码处</a>直接查看代码使用</p></div><div class="story post-story"><h2 id="需要的东西"><a href="#需要的东西" class="headerlink" title="需要的东西"></a>需要的东西</h2><p>一个netlify账号</p><p><img src="https://cdn.chuqis.com/img/4c8a395ea13de4893afb0921e74afeef.jpg" class="lazyload" data-srcset="https://cdn.chuqis.com/img/4c8a395ea13de4893afb0921e74afeef.jpg" srcset="data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="https://cdn.chuqis.com/img/4c8a395ea13de4893afb0921e74afeef.jpg"></p><p>一个github账号</p></div><div class="story post-story"><h2 id="查阅文档"><a href="#查阅文档" class="headerlink" title="查阅文档"></a>查阅文档</h2><p>打开netlify的<a href="https://docs.netlify.com/routing/redirects/">文档</a>查看</p><h3 id="格式"><a href="#格式" class="headerlink" title="格式"></a>格式</h3><p>找到了路由设置的相关内容后可以看到这些内容和格式</p><p>If you specify your redirect rules in your Netlify configuration file, you can use a more structured configuration format with additional capabilities such as signed proxy redirects. In a netlify.toml file, we use TOML’s array of tables to specify each individual redirect rule. The following keywords are available:</p><p><code>from</code>: The path you want to redirect.</p><p><code>to</code>: The URL or path you want to redirect to.</p><p><code>status</code>: The HTTP status code you want to use in that redirect; 301 by default.</p><p><code>force</code>: Whether to override any existing content in the path or not; false by default. Visit the shadowing instructions for more details.</p><p><code>query</code>: Query string parameters REQUIRED to match the redirect. Visit the query parameters instructions for more details.</p><p><code>conditions</code>: Conditions to match the redirect, including country, role, and cookie presence conditions.</p><p><code>headers</code>: Additional request headers to send in proxy redirects.</p><p><code>signed</code>: Name of an environment variable for signed proxy redirects.</p><h3 id="目录反代目录匹配"><a href="#目录反代目录匹配" class="headerlink" title="目录反代目录匹配"></a>目录反代目录匹配</h3><p>因为反代jsd同时需要反代jsd目录下的所有文件，所以这里需要有一个路径匹配</p><p>原文如下</p><p>An asterisk indicates a splat that will match anything that follows it.</p><p>You can use the splat in your rewrites or redirects like this:</p><p>/news/*  /blog/:splat</p><p>This would redirect paths like /news/2004/01/10/my-story to /blog/2004/01/10/my-story.</p><p>所以我需要在 <code>from</code>的/后面添加* <code>to</code>的/后面添加:splat</p></div><div class="story post-story"><h2 id="实践代码"><a href="#实践代码" class="headerlink" title="实践代码"></a>实践代码</h2><p>这里我需要http返回状态码为200</p><blockquote><p>这样我的国内服务器就能再次反代netlify的cdn</p></blockquote><p>整合完上面的设置配置就是这样了</p><p>这里我们需要把下面的代码放在新建名为 <code>netlify.toml</code>的文件中</p><blockquote><p>注意这里的文件必须在仓库的根目录</p></blockquote><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">[[redirects]]</span><br><span class="line">from = &quot;/*&quot;</span><br><span class="line">to = &quot;https://cdn.jsdelivr.net/:splat&quot;</span><br><span class="line">status = 200</span><br><span class="line">force = true</span><br><span class="line">headers = &#123;X-From = &quot;Netlify&quot;&#125;</span><br></pre></td></tr></table></figure><p>然后把这个仓库上传到github</p><p>之后我们点击<a href="https://app.netlify.com/start">这里</a>在netlify新建一个项目并且选择已经上传到github仓库</p><p>然后等待部署完成即可</p><p>完结撒花👏</p></div>]]></content>
    
    
    <summary type="html">netlify配置反代</summary>
    
    
    
    <category term="web" scheme="https://www.qystu.cc/categories/web/"/>
    
    
    <category term="netlify" scheme="https://www.qystu.cc/tags/netlify/"/>
    
    <category term="反代" scheme="https://www.qystu.cc/tags/%E5%8F%8D%E4%BB%A3/"/>
    
    <category term="jsdelivr" scheme="https://www.qystu.cc/tags/jsdelivr/"/>
    
  </entry>
  
  <entry>
    <title>serviceworkers首屏优化</title>
    <link href="https://www.qystu.cc/posts/52948.html"/>
    <id>https://www.qystu.cc/posts/52948.html</id>
    <published>2022-11-18T06:40:54.000Z</published>
    <updated>2023-04-27T13:32:33.385Z</updated>
    
    <content type="html"><![CDATA[<div class="note info"><p>本片文章默认你已经会使用sw来加速网站了</p></div><div class="story post-story"><h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>前阵子，我开始用cyf大佬的sw加速方案，前前后后我使用了三个不同作者所开发的sw加速，但是因cyf的代码过于难以了解（我菜），而去使用了yfun大佬的代码，以便网页在前端被更新</p></div><div class="story post-story"><h2 id="为什么要首屏优化"><a href="#为什么要首屏优化" class="headerlink" title="为什么要首屏优化"></a>为什么要首屏优化</h2><p>在使用cyf大佬的方案是我发现了cyf的首屏优化方案</p><blockquote><p>事实上，ServiceWorker最显著的缺点是要在第一次加载网页安装后，刷新一次才能激活。即访客第一次访问是不受sw控制的。换句话说，访客首屏不受加速，其加载速度与你的服务器有直接联系 <del>[虽然安装完成后就起飞了,但安装前就是屑]</del>。</p></blockquote><blockquote><p>更加令人抓狂的是，在首屏加载时，静态资源会被直接获取，并且不缓存，而sw激活后又会强制第二次获取，拉跨速度。不过我们可以尽可能弱化这一劣势。我们可以用js打断所有的请求，以确保首屏只加载一个html和一个sw.js，其余资源都不会加载，降低首屏加载延迟。</p></blockquote><p>所以我尝试使用了cyf大佬的首屏优化，而且有一个帅气的sw安装页面谁不爱呢</p><p>我前后使用了两种首屏优化样式这里都分享出来</p><h3 id="方案1（by-cyfan）"><a href="#方案1（by-cyfan）" class="headerlink" title="方案1（by cyfan）"></a>方案1（by cyfan）</h3><details cyan><summary> 打开复制源码 </summary>              <div class='content'>              <figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br></pre></td><td class="code"><pre><span class="line">&lt;!-- sw前端竞速 --&gt;</span><br><span class="line">&lt;script&gt;</span><br><span class="line">(async () =&gt; &#123;//使用匿名函数确保body已载入</span><br><span class="line">    /*</span><br><span class="line">    QYBlogHelper_Set 存储在LocalStorage中,用于指示sw安装状态</span><br><span class="line">    0 或不存在 未安装</span><br><span class="line">    1 已打断</span><br><span class="line">    2 已安装</span><br><span class="line">    3 已激活,并且已缓存必要的文件(此处未写出,无需理会)</span><br><span class="line">    */</span><br><span class="line">    if (&#x27;serviceWorker&#x27; in navigator) &#123; //如果支持sw</span><br><span class="line">        if (Number(window.localStorage.getItem(&#x27;QYBlogHelper_Set&#x27;)) &lt; 1) &#123;</span><br><span class="line">            setTimeout(async () =&gt; &#123;</span><br><span class="line">                console.log(&#x27;检测到您的浏览器没有安装QYBlogHelper，开始注册&#x27;)</span><br><span class="line">                window.stop()</span><br><span class="line">                window.localStorage.setItem(&#x27;QYBlogHelper_Set&#x27;, 1)</span><br><span class="line">                const replacehtml = await fetch(&#x27;https://npm.elemecdn.com/chenyfan-blog@1.0.13/public/notice.html&#x27;)</span><br><span class="line">                document.body.innerHTML = await replacehtml.text()</span><br><span class="line">                $(&#x27;#info&#x27;).innerText = &#x27;尝试安装QYBlogHelper...&#x27;;</span><br><span class="line">            &#125;, 0);</span><br><span class="line">        &#125;</span><br><span class="line">        const $ = document.querySelector.bind(document);//语法糖</span><br><span class="line">        navigator.serviceWorker.register(`/sw.js?time=$&#123;new Date().getTime()&#125;`)//随机数,强制更新</span><br><span class="line">            .then(async () =&gt; &#123;</span><br><span class="line">                if (Number(window.localStorage.getItem(&#x27;QYBlogHelper_Set&#x27;)) &lt; 2) &#123;</span><br><span class="line">                    setTimeout(() =&gt; &#123;</span><br><span class="line">                        $(&#x27;#info&#x27;).innerText = &#x27;安装成功,稍等片刻...&#x27;;</span><br><span class="line">                    &#125;, 0);</span><br><span class="line">                    setTimeout(() =&gt; &#123;</span><br><span class="line">                        window.localStorage.setItem(&#x27;QYBlogHelper_Set&#x27;, 2)</span><br><span class="line">                        console.log(&#x27;准备跳转&#x27;)</span><br><span class="line">                        window.location.reload()//刷新,以载入sw</span><br><span class="line">                    &#125;, 500)//安装后等待500ms使其激活</span><br><span class="line">                &#125;</span><br><span class="line">            &#125;)</span><br><span class="line">            .catch(err =&gt; console.error(`QYBlogHelperError:$&#123;err&#125;`))</span><br><span class="line">    &#125; else &#123;</span><br><span class="line">        setTimeout(() =&gt; &#123;</span><br><span class="line">            $(&#x27;#info&#x27;).innerText = &#x27;很抱歉,我们已不再支持您的浏览器.&#x27;;</span><br><span class="line">        &#125;, 0);</span><br><span class="line">    &#125;</span><br><span class="line">&#125;)()</span><br><span class="line">&lt;/script&gt;</span><br></pre></td></tr></table></figure>              </div>            </details><h3 id="方案2（by-yfun）"><a href="#方案2（by-yfun）" class="headerlink" title="方案2（by yfun）"></a>方案2（by yfun）</h3><details cyan><summary> 打开复制源码 </summary>              <div class='content'>              <figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br></pre></td><td class="code"><pre><span class="line">&lt;!-- sw前端竞速 --&gt;</span><br><span class="line">&lt;script&gt;</span><br><span class="line">(async () =&gt; &#123;//使用匿名函数确保body已载入</span><br><span class="line">    /*</span><br><span class="line">    QYBlogHelper_Set 存储在LocalStorage中,用于指示sw安装状态</span><br><span class="line">    0 或不存在 未安装</span><br><span class="line">    1 已打断</span><br><span class="line">    2 已安装</span><br><span class="line">    3 已激活,并且已缓存必要的文件(此处未写出,无需理会)</span><br><span class="line">    */</span><br><span class="line">    if (&#x27;serviceWorker&#x27; in navigator) &#123; //如果支持sw</span><br><span class="line">        if (Number(window.localStorage.getItem(&#x27;QYBlogHelper_Set&#x27;)) &lt; 1) &#123;</span><br><span class="line">            setTimeout(async () =&gt; &#123;</span><br><span class="line">                console.log(&#x27;检测到您的浏览器没有安装QYBlogHelper，开始注册&#x27;)</span><br><span class="line">                window.stop()</span><br><span class="line">                window.localStorage.setItem(&#x27;QYBlogHelper_Set&#x27;, 1)</span><br><span class="line">                const replacehtml = await fetch(&#x27;https://npm.elemecdn.com/qycdn@0.9.13/html/swinstall.html&#x27;)</span><br><span class="line">                document.body.innerHTML = await replacehtml.text()</span><br><span class="line">            &#125;, 0);</span><br><span class="line">        &#125;</span><br><span class="line">        const $ = document.querySelector.bind(document);//语法糖</span><br><span class="line">        navigator.serviceWorker.register(`/sw.js?time=$&#123;new Date().getTime()&#125;`)//随机数,强制更新</span><br><span class="line">            .then(async () =&gt; &#123;</span><br><span class="line">                if (Number(window.localStorage.getItem(&#x27;QYBlogHelper_Set&#x27;)) &lt; 2) &#123;</span><br><span class="line">                    setTimeout(() =&gt; &#123;</span><br><span class="line">                        window.localStorage.setItem(&#x27;QYBlogHelper_Set&#x27;, 2)</span><br><span class="line">                        console.log(&#x27;准备跳转&#x27;)</span><br><span class="line">                        window.location.reload()//刷新,以载入sw</span><br><span class="line">                    &#125;, 500)//安装后等待500ms使其激活</span><br><span class="line">                &#125;</span><br><span class="line">            &#125;)</span><br><span class="line">            .catch(err =&gt; console.error(`QYBlogHelperError:$&#123;err&#125;`))</span><br><span class="line">    &#125; else &#123;</span><br><span class="line">        setTimeout(() =&gt; &#123;</span><br><span class="line">            console.log(&#x27;很抱歉,我们已不再支持您的浏览器&#x27;);</span><br><span class="line">        &#125;, 0);</span><br><span class="line">    &#125;</span><br><span class="line">&#125;)()</span><br><span class="line">&lt;/script&gt;</span><br></pre></td></tr></table></figure>              </div>            </details><h3 id="注意事项"><a href="#注意事项" class="headerlink" title="注意事项"></a>注意事项</h3><div class="note warning"><p>我们尽可能将打断代码提到<code>&lt;head&gt;</code> 以确保不被其他资源堵塞，对于hexo来说打开主题的head.ejs，在<code>&lt;head&gt;</code>标签靠前的位置中加入，否则可能达不到理想的加速效果</p></div><div></div><div class="story post-story"><h2>推荐文章<span style="font-size:0.45em; color:gray">（由<a href="https://github.com/huiwang/hexo-recommended-posts">hexo文章推荐插件</a>驱动）</span></h2><ul><li><a href="https://www.qystu.cc/posts/32667.html">qexo多作者解决方案</a></li><li><a href="https://www.qystu.cc/posts/61056.html">为hexo加一个自动部署</a></li><li><a href="https://www.qystu.cc/posts/37212.html">qexo的搭建与使用</a></li><li><a href="https://songxwn.com/team_nav/">部署团队服务导航网站 Team-nav</a></li></ul></div></div>]]></content>
    
    
    <summary type="html">serviceworkers首屏优化</summary>
    
    
    
    <category term="web" scheme="https://www.qystu.cc/categories/web/"/>
    
    
    <category term="前端" scheme="https://www.qystu.cc/tags/%E5%89%8D%E7%AB%AF/"/>
    
    <category term="博客" scheme="https://www.qystu.cc/tags/%E5%8D%9A%E5%AE%A2/"/>
    
    <category term="web" scheme="https://www.qystu.cc/tags/web/"/>
    
    <category term="sw" scheme="https://www.qystu.cc/tags/sw/"/>
    
  </entry>
  
  <entry>
    <title>阿里云搭建frp服务实现本地内网穿透</title>
    <link href="https://www.qystu.cc/posts/38304.html"/>
    <id>https://www.qystu.cc/posts/38304.html</id>
    <published>2022-10-23T03:15:33.000Z</published>
    <updated>2022-10-23T03:34:51.000Z</updated>
    
    <content type="html"><![CDATA[<div class="story post-story"><h2 id="背景"><a href="#背景" class="headerlink" title="背景"></a>背景</h2><p>利用阿里云搭建frp服务，本地frp客户端来实现内网穿透，来达到访问没有公网ip的远程机器</p></div><div class="story post-story"><h2 id="frp服务端搭建"><a href="#frp服务端搭建" class="headerlink" title="frp服务端搭建"></a>frp服务端搭建</h2><p>首先我们先安装一键部署frp的<a href="https://github.com/MvsCode/frps-onekey">脚本</a>,如果是阿里云的服务器直接用以下源：</p><h3 id="Aliyun"><a href="#Aliyun" class="headerlink" title="Aliyun"></a>Aliyun</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">wget https://code.aliyun.com/MvsCode/frps-onekey/raw/master/install-frps.sh -O ./install-frps.sh</span><br><span class="line">chmod 700 ./install-frps.sh</span><br><span class="line">./install-frps.sh install</span><br></pre></td></tr></table></figure><p>首先选择下载源：：</p><p><img src="https://oss.overme.cn/img/image-20210316094929755.png" class="lazyload" data-srcset="https://oss.overme.cn/img/image-20210316094929755.png" srcset="data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="image-20210316094929755"></p><p>默认是阿里云 回车</p><p><img src="https://oss.overme.cn/img/image-20210316095103012.png" class="lazyload" data-srcset="https://oss.overme.cn/img/image-20210316095103012.png" srcset="data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="image-20210316095103012"></p><p>frp的监听端口我选7000 默认是5443默认就直接回车</p><p><img src="https://oss.overme.cn/img/image-20210316095159157.png" class="lazyload" data-srcset="https://oss.overme.cn/img/image-20210316095159157.png" srcset="data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="image-20210316095159157"></p><p>vhost_http_port端口默认是80,但是我80端口已经给nginx了所以随便设置了8080,因为我用不到这个</p><p>同上我默认的443端口也是被占用了，所以直接随机给了4433</p><p><img src="https://oss.overme.cn/img/image-20210316095446628.png" class="lazyload" data-srcset="https://oss.overme.cn/img/image-20210316095446628.png" srcset="data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="image-20210316095446628"></p><p>dashboard是监控面板网址的端口我们直接用默认的回车就行</p><p><img src="https://oss.overme.cn/img/image-20210316095608395.png" class="lazyload" data-srcset="https://oss.overme.cn/img/image-20210316095608395.png" srcset="data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="image-20210316095608395"></p><p>监控面板的用户名和密码设置,接下来的一些日志配置直接回车就行,配置好后:</p><p><img src="https://oss.overme.cn/img/image-20210316095740349.png" class="lazyload" data-srcset="https://oss.overme.cn/img/image-20210316095740349.png" srcset="data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="image-20210316095740349"></p><p>以上是我的frp服务器的配置</p><p>我已经把6443端口用nginx转发到我自己的域名上了登录就可以看到各种仪表盘</p><p><img src="https://oss.overme.cn/img/image-20210316100059776.png" class="lazyload" data-srcset="https://oss.overme.cn/img/image-20210316100059776.png" srcset="data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="image-20210316100059776"></p></div><div class="story post-story"><h2 id="本地frp客户端搭建"><a href="#本地frp客户端搭建" class="headerlink" title="本地frp客户端搭建"></a>本地frp客户端搭建</h2><p><a href="https://github.com/fatedier/frp/releases">进入github下载</a>,我选择的是64位windows</p><p><img src="https://oss.overme.cn/img/image-20210316100512822.png" class="lazyload" data-srcset="https://oss.overme.cn/img/image-20210316100512822.png" srcset="data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="image-20210316100512822"></p><p>解压后修改frpc.ini文件配置,这是我的配置</p><p><img src="https://oss.overme.cn/img/image-20210316100715807.png" class="lazyload" data-srcset="https://oss.overme.cn/img/image-20210316100715807.png" srcset="data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="image-20210316100715807"></p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">[common]</span><br><span class="line">server_addr = 47.110.134.2  #frp服务器地址</span><br><span class="line">server_port = 7000    #frp服务器监听端口</span><br><span class="line">token = hBanuRmGrwNlNe10 #服务器token是随机的在上图的配置中有</span><br><span class="line"></span><br><span class="line">[mstsc]</span><br><span class="line">type = tcp</span><br><span class="line">local_ip = 127.0.0.1 </span><br><span class="line">local_port = 3389  #因为我是开远程桌面RDP所以是映射3389端口</span><br><span class="line">remote_port = 6000</span><br></pre></td></tr></table></figure><p>进入cmd 运行frp客户端</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">frpc.exe -c frpc.ini</span><br></pre></td></tr></table></figure><p><img src="https://oss.overme.cn/img/image-20210316101149626.png" class="lazyload" data-srcset="https://oss.overme.cn/img/image-20210316101149626.png" srcset="data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="image-20210316101149626"></p><p>报错：<code>[service.go:103] login to server failed</code></p><p>原因是没有打开阿里云服务器安全组的7000端口,现在去打开</p><p><img src="https://oss.overme.cn/img/image-20210316101351051.png" class="lazyload" data-srcset="https://oss.overme.cn/img/image-20210316101351051.png" srcset="data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="image-20210316101351051"></p><p>再次运行后, <code>login to server success</code>成功</p><p><img src="https://oss.overme.cn/img/image-20210316101424738.png" class="lazyload" data-srcset="https://oss.overme.cn/img/image-20210316101424738.png" srcset="data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="image-20210316101424738"></p><p>试试远程连接，连不上</p><p><img src="https://oss.overme.cn/img/image-20210316101608046.png" class="lazyload" data-srcset="https://oss.overme.cn/img/image-20210316101608046.png" srcset="data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="image-20210316101608046"></p><p>原因是没有打开阿里云安全组的6000端口,现在去打开</p><p><img src="https://oss.overme.cn/img/image-20210316101656122.png" class="lazyload" data-srcset="https://oss.overme.cn/img/image-20210316101656122.png" srcset="data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="image-20210316101656122"></p><p>再次连接可以连上了</p><p><img src="https://oss.overme.cn/img/image-20210316101730454.png" class="lazyload" data-srcset="https://oss.overme.cn/img/image-20210316101730454.png" srcset="data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="image-20210316101730454"></p><p>最后还有一点小坑，这里的登陆密码不能用pin码,我用户密码忘记了,需要用cmd管理员模式运行</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">net user username password</span><br></pre></td></tr></table></figure><p>重置密码,这里非常感谢<a href="https://www.yuque.com/revang/blog/tgnnyz">钢明兄</a></p></div><div class="story post-story"><h2 id="其他命令"><a href="#其他命令" class="headerlink" title="其他命令"></a>其他命令</h2><h3 id="Uninstall（卸载）"><a href="#Uninstall（卸载）" class="headerlink" title="Uninstall（卸载）"></a>Uninstall（卸载）</h3><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">./install-frps.sh uninstall</span><br></pre></td></tr></table></figure><p><img src="https://oss.overme.cn/img/image-20210316094815230.png" class="lazyload" data-srcset="https://oss.overme.cn/img/image-20210316094815230.png" srcset="data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="image-20210316094815230"></p><h3 id="Update（更新）"><a href="#Update（更新）" class="headerlink" title="Update（更新）"></a>Update（更新）</h3><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">./install-frps.sh update</span><br></pre></td></tr></table></figure></div>]]></content>
    
    
    <summary type="html">阿里云搭建frp服务实现本地内网穿透</summary>
    
    
    
    <category term="web" scheme="https://www.qystu.cc/categories/web/"/>
    
    
    <category term="阿里云" scheme="https://www.qystu.cc/tags/%E9%98%BF%E9%87%8C%E4%BA%91/"/>
    
    <category term="frp" scheme="https://www.qystu.cc/tags/frp/"/>
    
    <category term="内网穿透" scheme="https://www.qystu.cc/tags/%E5%86%85%E7%BD%91%E7%A9%BF%E9%80%8F/"/>
    
  </entry>
  
  <entry>
    <title>为hexo加一个自动部署</title>
    <link href="https://www.qystu.cc/posts/61056.html"/>
    <id>https://www.qystu.cc/posts/61056.html</id>
    <published>2022-07-14T06:40:10.000Z</published>
    <updated>2022-12-30T08:34:07.000Z</updated>
    
    <content type="html"><![CDATA[<p><img src="https://cdn.chuqis.com/img/1658139167.6203759.jpg" class="lazyload" data-srcset="https://cdn.chuqis.com/img/1658139167.6203759.jpg" srcset="data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="https://cdn.chuqis.com/img/1658139167.6203759.jpg"></p><div class="story post-story"><h2 id="Hexo-博客的Github-Action自动化部署是什么？"><a href="#Hexo-博客的Github-Action自动化部署是什么？" class="headerlink" title="Hexo 博客的Github Action自动化部署是什么？"></a>Hexo 博客的Github Action自动化部署是什么？</h2><p>简单说，就是把hexo博客的源代码上传到github代码仓库，github在代码发生变动的时候，自动通过安装一系列nodejs环境和相关依赖，生成html页面到github pages仓库。</p><p>再简单点说，就是把本地生成博客的工作，全部交给github执行。</p></div><div class="story post-story"><h2 id="为什么要action"><a href="#为什么要action" class="headerlink" title="为什么要action"></a>为什么要action</h2><p>hexo 是一款快速、简洁且高效的静态博客框架，因为它的高可定制性，所以深受各个程序员的喜爱，我也曾一头扎进去研究过，魔改了vlts主题，在使用过程中，也渐渐的发现了一些问题</p><p>情景一，当浏览自己某篇博客时发现了一些错误之后想要马上修改时，将要经历经历一下步骤<br>在本地的hexo博客文件夹中找到source/_post文件夹<br>找到那个md文件，打开修改<br>然后还要经历<code>hexo clean</code>,<code>hexo g</code>，<code>hexo d</code></p><p>情景二，当想要马上写一篇博客时，需要经历以下步骤<br>在博客根目录中hexo n “博客名”<br>点击进入source/_post文件夹中找到这个md文件并打开写博客<br>然后还要经历<code>hexo clean</code>,<code>hexo g</code>，<code>hexo d</code><br>且hexo是由nodejs编写的，性能不佳，生产需要较长时间<br>action的高性能可以解决这些问题</p></div><div class="story post-story"><h2 id="这样做的好处"><a href="#这样做的好处" class="headerlink" title="这样做的好处"></a>这样做的好处</h2><p>随时随地都能修改或增加博文</p><p>使用<code>hpp</code>,<code>qexo</code>,<code>wexa</code>等编辑器</p></div><div class="story post-story"><h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>网上这种教程一大堆，有的装了插件不一样（gulp等等），有的部署方法（ssh、令牌）不一样，以至于自动化部署的文件写法也不一样。</p><p>我这里尽量写一个适合小白和大多数hexo博客的一个自动化部署的教程。</p><p><strong>总体步骤</strong> ：</p><ul><li>使用Github令牌部署hexo博客</li><li>Github新建一个私有仓库，并上传hexo博客源码</li><li>配置Github Action实现自动化部署</li></ul></div><div class="story post-story"><h2 id="How-to-do"><a href="#How-to-do" class="headerlink" title="How to do"></a>How to do</h2><h3 id="获取github令牌"><a href="#获取github令牌" class="headerlink" title="获取github令牌"></a>获取github令牌</h3><p>前往<a href="https://github.com/settings/tokens">github</a>新建一个token</p><blockquote><p>注意token只会显示一次注意保存，同时<code>注意``注意``注意</code>千万不要暴露token</p></blockquote><p>注意先保存，等新建仓库后填入</p><p>在源码仓库的密钥处填入</p><p><img src="https://cdn.chuqis.com/img/1658138422.8459709.jpg" class="lazyload" data-srcset="https://cdn.chuqis.com/img/1658138422.8459709.jpg" srcset="data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="https://cdn.chuqis.com/img/1658138422.8459709.jpg"></p><p><code>PERSONAL_TOKEN</code>里面写密钥即可</p><h3 id="上传源码"><a href="#上传源码" class="headerlink" title="上传源码"></a>上传源码</h3><p>首先初始化本地仓库</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">git init </span><br><span class="line">git add . </span><br><span class="line">git commit -m <span class="string">&quot;first commit&quot;</span> </span><br><span class="line">git branch -M main git remote add origin https://github.com/username/xxx.git </span><br></pre></td></tr></table></figure><p>注意自己看着改</p><p>然后把在<code>.git/config</code>里面修改类似这样的远程路径<a href="https://github.com/username/xxx.git%E6%94%B9%E6%88%90https://TOKEN@github.com/username/xxx.git">https://github.com/username/xxx.git改成https://TOKEN@github.com/username/xxx.git</a></p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">git push -u origin main</span><br></pre></td></tr></table></figure><p>然后你就可以看到你的源码被推送到了远程仓库</p><h3 id="配置自动流程"><a href="#配置自动流程" class="headerlink" title="配置自动流程"></a>配置自动流程</h3><p>既然做的这一步了，就只差一步了配置自动化流程，帮助我们自动生成网页文件并推送到静态页面仓库</p><p>打开action new workflow 或者在本地新建<code>.github/workflows/main.yml</code>的文件</p><p>填入以下代码</p><blockquote><p>已经很详细的看了上面的阐述，并且我不会直接照搬</p></blockquote><figure class="highlight yml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">name:</span> <span class="string">Deploy</span></span><br><span class="line"><span class="attr">&#x27;on&#x27;:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">workflow_dispatch</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">push</span></span><br><span class="line"><span class="attr">jobs:</span></span><br><span class="line">  <span class="attr">build:</span></span><br><span class="line">    <span class="attr">runs-on:</span> <span class="string">ubuntu-latest</span></span><br><span class="line">    <span class="attr">steps:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">Checkout</span></span><br><span class="line">        <span class="attr">uses:</span> <span class="string">actions/checkout@v3</span></span><br><span class="line">        <span class="attr">with:</span></span><br><span class="line">          <span class="attr">ref:</span> <span class="string">main</span></span><br><span class="line">      <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">Setup</span> <span class="string">Node</span></span><br><span class="line">        <span class="attr">uses:</span> <span class="string">actions/setup-node@v2</span></span><br><span class="line">        <span class="attr">with:</span></span><br><span class="line">          <span class="attr">node-version:</span> <span class="number">16.</span><span class="string">x</span></span><br><span class="line">      <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">Install</span> <span class="string">Hexo</span></span><br><span class="line">        <span class="attr">run:</span> <span class="string">|</span></span><br><span class="line"><span class="string">          npm install hexo-cli -g</span></span><br><span class="line"><span class="string">          npm install -g gulp //如果没有gulp把这行去掉</span></span><br><span class="line"><span class="string"></span>      <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">Cache</span> <span class="string">Modules</span></span><br><span class="line">        <span class="attr">uses:</span> <span class="string">actions/cache@v2.1.1</span></span><br><span class="line">        <span class="attr">id:</span> <span class="string">cache-modules</span></span><br><span class="line">        <span class="attr">with:</span></span><br><span class="line">          <span class="attr">path:</span> <span class="string">node_modules</span></span><br><span class="line">          <span class="attr">key:</span> <span class="string">$&#123;&#123;runner.OS&#125;&#125;-$&#123;&#123;hashFiles(&#x27;**/package-lock.json&#x27;)&#125;&#125;</span></span><br><span class="line">      <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">Install</span> <span class="string">Dependencies</span></span><br><span class="line">        <span class="attr">if:</span> <span class="string">steps.cache-modules.outputs.cache-hit</span> <span class="type">!=</span> <span class="string">&#x27;true&#x27;</span></span><br><span class="line">        <span class="attr">run:</span> <span class="string">|</span></span><br><span class="line"><span class="string">          npm ci</span></span><br><span class="line"><span class="string"></span>      <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">Setting</span> <span class="string">Token</span></span><br><span class="line">        <span class="attr">run:</span> <span class="string">|</span></span><br><span class="line"><span class="string">          sed -i &quot;s/.Baidu_Token/$&#123;&#123; secrets.BAIDU_TOKEN &#125;&#125;/&quot; _config.yml</span></span><br><span class="line"><span class="string"></span>      <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">Generate</span></span><br><span class="line">        <span class="attr">run:</span> <span class="string">|</span></span><br><span class="line"><span class="string">          hexo clean</span></span><br><span class="line"><span class="string">          hexo recommend</span></span><br><span class="line"><span class="string">          hexo generate</span></span><br><span class="line"><span class="string">          gulp //如果没有gulp把这行去掉</span></span><br><span class="line"><span class="string">          git clone https://github.com/username/username.github.io.git .public</span></span><br><span class="line"><span class="string"></span>      <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">Deploy</span></span><br><span class="line">        <span class="attr">uses:</span> <span class="string">peaceiris/actions-gh-pages@v3</span></span><br><span class="line">        <span class="attr">with:</span></span><br><span class="line">          <span class="attr">personal_token:</span> <span class="string">$&#123;&#123;</span> <span class="string">secrets.PERSONAL_TOKEN</span> <span class="string">&#125;&#125;</span></span><br><span class="line">          <span class="attr">publish_dir:</span> <span class="string">./public</span></span><br><span class="line">          <span class="attr">external_repository:</span> <span class="string">username/username.github.io</span></span><br><span class="line">          <span class="attr">publish_branch:</span> <span class="string">main</span></span><br><span class="line">          <span class="attr">exclude_assets:</span> <span class="string">&#x27;&#x27;</span></span><br><span class="line">          <span class="attr">user_name:</span> <span class="string">github-actions[bot]</span></span><br><span class="line">          <span class="attr">user_email:</span> <span class="string">github-actions[bot]@users.noreply.github.com</span></span><br></pre></td></tr></table></figure><div></div><div class="story post-story"><h2>推荐文章<span style="font-size:0.45em; color:gray">（由<a href="https://github.com/huiwang/hexo-recommended-posts">hexo文章推荐插件</a>驱动）</span></h2><ul><li><a href="https://www.qystu.cc/posts/32667.html">qexo多作者解决方案</a></li><li><a href="https://www.qystu.cc/posts/11159.html">DIY最低成本图床</a></li><li><a href="https://www.qystu.cc/posts/52948.html">serviceworkers首屏优化</a></li></ul></div></div>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;&lt;img src=&quot;https://cdn.chuqis.com/img/1658139167.6203759.jpg&quot; class=&quot;lazyload&quot; data-srcset=&quot;https://cdn.chuqis.com/img/1658139167.6203759.</summary>
      
    
    
    
    <category term="hexo" scheme="https://www.qystu.cc/categories/hexo/"/>
    
    <category term="web" scheme="https://www.qystu.cc/categories/web/"/>
    
    
    <category term="hexo" scheme="https://www.qystu.cc/tags/hexo/"/>
    
    <category term="博客" scheme="https://www.qystu.cc/tags/%E5%8D%9A%E5%AE%A2/"/>
    
    <category term="action" scheme="https://www.qystu.cc/tags/action/"/>
    
    <category term="建站" scheme="https://www.qystu.cc/tags/%E5%BB%BA%E7%AB%99/"/>
    
  </entry>
  
  <entry>
    <title>关于接管运营博客的事项</title>
    <link href="https://www.qystu.cc/posts/44737.html"/>
    <id>https://www.qystu.cc/posts/44737.html</id>
    <published>2022-07-11T14:47:03.000Z</published>
    <updated>2022-07-11T14:48:06.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="原因回顾"><a href="#原因回顾" class="headerlink" title="原因回顾"></a>原因回顾</h1><p>青云工作室因为一些私人原因，没有太多时间来运营此网站，于是便在2022/4/11开始停更</p><h1 id="解决方案"><a href="#解决方案" class="headerlink" title="解决方案"></a>解决方案</h1><p>在经过慎重考虑之后，Jason将文章更新和友链维护的工作交给了我，而网站美化，维护则由他继续负责</p>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;原因回顾&quot;&gt;&lt;a href=&quot;#原因回顾&quot; class=&quot;headerlink&quot; title=&quot;原因回顾&quot;&gt;&lt;/a&gt;原因回顾&lt;/h1&gt;&lt;p&gt;青云工作室因为一些私人原因，没有太多时间来运营此网站，于是便在2022/4/11开始停更&lt;/p&gt;
&lt;h1 id=&quot;解决方案&quot;</summary>
      
    
    
    
    
  </entry>
  
  <entry>
    <title>闭关修炼一月后，我出来啦</title>
    <link href="https://www.qystu.cc/posts/51585.html"/>
    <id>https://www.qystu.cc/posts/51585.html</id>
    <published>2022-07-04T12:55:29.000Z</published>
    <updated>2022-07-06T05:48:15.000Z</updated>
    
    <content type="html"><![CDATA[<div class="story post-story"><h2 id="经历了中考我解放啦"><a href="#经历了中考我解放啦" class="headerlink" title="经历了中考我解放啦"></a>经历了中考我解放啦</h2><p>相信大家可以从标题中看到我的兴奋。</p><p>经历了一个月的中考备考，<del>收获了很多</del>累死我了</p><p>考的不错，报喜啦</p></div><div class="story post-story"><h2 id="暑假准备做什么？"><a href="#暑假准备做什么？" class="headerlink" title="暑假准备做什么？"></a>暑假准备做什么？</h2><p>维护博客</p><p>魔改主题(偷偷说一句pr有问题)</p><p>催狗子熙写官网</p><p>挑战五天不停更</p><p>写一个新的友链提交</p><p>练字</p><p>预习高中数理化</p><p>搞点钱</p></div><div class="story post-story"><h2 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h2><p>如果还有再补充</p></div>]]></content>
    
    
    <summary type="html">闭关修炼一月后，我出来啦</summary>
    
    
    
    <category term="哔哔" scheme="https://www.qystu.cc/categories/%E5%93%94%E5%93%94/"/>
    
    
    <category term="起航" scheme="https://www.qystu.cc/tags/%E8%B5%B7%E8%88%AA/"/>
    
  </entry>
  
  <entry>
    <title>(转)论《河中石兽》的理论是否正确</title>
    <link href="https://www.qystu.cc/posts/51727.html"/>
    <id>https://www.qystu.cc/posts/51727.html</id>
    <published>2022-05-29T10:12:12.000Z</published>
    <updated>2022-05-29T10:12:12.000Z</updated>
    
    <content type="html"><![CDATA[<div class="story post-story"><h2 id="论"><a href="#论" class="headerlink" title="论"></a>论</h2><p>假设老兵解释有道理，即河中石兽可以向上游翻滚，则其每次翻滚的动能必然来自势能，即重心的降低，因此，可以肯定在翻滚数次之后，其重心必然越降越低，直至没入河床之下，所以，除非有其它能量来源推动石像，否则绝无可能翻滚到上游数里。</p><p>近日读到一篇新闻报道，说都江堰河道施工中挖到汉代无头石像。报道说近年一共挖到包括战国时代都江堰之父李冰在内的5尊石像。有人推测它们可能就是历史记载中的“三神石人”，但无法确认。报道转而叙述，史载元代治水专家曾造三十吨重的铁牛，明代曾铸造五吨重的铁龟，目前尚未发掘到。那赶紧到下游附近去找找铁牛和铁龟啊。然而，民俗学家蒋永志“给出了一个观点，铁牛与铁龟并不在鱼嘴下游，而在上游。据他介绍，铁牛和铁龟非常重，按照重物在水流中活动的规律，越重的东西可能往上移而不是往下游移。因此，他认为这几件宝物不可能在下游，而是在鱼嘴上游。”</p><p>十之八九，蒋永志的观点“重物在水流中活动的规律”来自初中一年级语文课本，选自纪晓岚《阅微草堂笔记》的一篇《河中石兽》。</p><p>该文大意是说，沧州一座庙里的石兽，估计是石狮子之类，多年前沉入了河中，下游找了十多里没找到。庙里的教书先生说石重沙轻，肯定在原处的泥沙下面。而一老水手则说肯定在上游，因为水会把石像底部朝向上游方向的沙子冲走，形成坑穴，导致石像向上游翻滚。故事最后说果然在上游几里外找到石像。</p><p>“河里的石狮子水越冲越往上游走，还能走几十里”，你信吗？但是多数语文老师还会手脚并用，连比带画地为那些处于惊讶和渴求知识的幼小的心灵解释其背后的物理原理。“老水手”说的，能错吗？“实践出真知”啊。看来知识分子要接受贫下中农再教育并不是毛主席的独创，几百年前纪晓岚就知道拿个教书匠来衬托劳动人民的“丰富智慧”。我现在仍然记得当时自己因为无论如何不能理解这些艰深智慧而感到自惭形秽。</p><p>然而，这是真的吗？这么重要的一个现象，为什么我在之后多年的学习当中再也没有键到过类似的描述？我通过多个英文关键词在google上没有搜到任何相关记述。难道国外的劳动人民没有如此丰富的“智慧”？有人质疑过吗？有人做过实验吗？这篇课文仍然在初中的语文课本中吗？</p><p>实际上，这个问题不需要去搜什么文献，只需坐下来运用中学的物理知识分析一下就能得出向上游翻滚几十里是不合理的。首先，水中裹携沙子的激流在石像的下游一侧水流突然减速，沙子沉积，的确会阻碍石像向下游冲刷。此外，因为石兽逆流一面沙子被冲刷而形成坑穴，因此，石像有很大可能会滑倒这个坑穴力。这和上面那个实验的结果是一致的，也就是说，石像的确可能略微向上游方向下滑少许。然而，下滑的前提是重心降低，怎么可能跑到上游势能高的地方呢？</p><p>“实验是检验理论的唯一标准”。在中文搜索中发现真的有中学语文老师做过简单实验。在“中国教师梁恕俭”的博客中《你怀疑过“河中石兽”吗》一文提到，梁老师把砖头放到沙子上模拟这个河中石兽的情景，然后用手挖去一面的沙子以模拟水流对沙子的冲击，结果呢，砖头根本不会翻转，而是直接整体滑到坑里，更没有也不可能“翻滚到上游”。梁老师还画了一个示意图，做了石块的翻动的受力分析，否定了石像向上游远距离翻滚的可能性。</p><p>有的人提出，有没有可能水流不断晃动石块，下面不断有沙子垫高石块，然后垫高了，又滑下，以至于游走到上游去了呢？我认为这不可能。第一，水流小的话晃不动大石块，水流太大又会连沙带石一齐冲下去。第二，哪条河中没有沟沟坎坎？哪条河中没有零零碎碎石块？难道大石像不会被卡到石块中？第三，在极其罕见的情况下它抬升了一下有可能，成年累月地被水流拍击的情况下逆流抬升向上走几十里，这除了相信这个石像真的变成“神兽”，否则绝无可能。简单计算可知，十年走十里，也就是每年走500米，每天要走一米三。我看这石像恐怕不是在走，而是在跑。</p><p>这篇《河中石兽》如此可疑，也不奇怪，因为它出自纪晓岚《阅微草堂笔记》卷十六《姑妄听之》。姑妄听之？。。。就这么一篇道听途说、连古人都不信的文章，在2013年人教版初中语文教材修订中，在大量的增删中，竟然得以保留。我猜想，一是因为这篇文章的内容奇特，能够吸引“阅读兴趣”，另一方面，课本里其它文章绝大多数都是“为赋新词强说愁”的感性文章，就这么一篇能和物理知识扯上关系的知性文章，不舍得删。</p><p>这下可好，现在当年的初中生成长为“民俗专家”了，“姑妄听之”也演变成了“重物在水流中活动的规律”了，开始为长江打捞提供严肃建议了。。。</p></div><div class="story post-story"><h2 id="结"><a href="#结" class="headerlink" title="结"></a>结</h2><p>最后，请教一下水动力学教授，专家，</p><p>(1) 在你们的教学实验之中，是否听说过水沙冲击下重物反而会向上游长距离移动的任何例子？</p><p>(2) 如果上述问题的答案是否定的，那么初中语文课本给出这样一篇明显违反能量守恒原理的文章，要不要建议教育部从课本中删去？谁来提这个建议呢？</p></div><div class="story post-story"><h2 id="评"><a href="#评" class="headerlink" title="评"></a>评</h2><p>违反能量守恒原理的文章在课本里有意思吗。。。</p></div>]]></content>
    
    
    <summary type="html">论《河中石兽》的理论是否正确</summary>
    
    
    
    <category term="语文" scheme="https://www.qystu.cc/categories/%E8%AF%AD%E6%96%87/"/>
    
    
    <category term="语文" scheme="https://www.qystu.cc/tags/%E8%AF%AD%E6%96%87/"/>
    
  </entry>
  
  <entry>
    <title>悼念</title>
    <link href="https://www.qystu.cc/posts/9478.html"/>
    <id>https://www.qystu.cc/posts/9478.html</id>
    <published>2022-04-26T13:34:49.000Z</published>
    <updated>2022-04-26T13:34:49.000Z</updated>
    
    <content type="html"><![CDATA[<p>之前在tg收到的信息，今天在微信公众号得到证实，胡萝卜周离世</p><p>胡萝卜周的准确离开时间是在今年一月份，根据他父亲的描述，他因一氧化碳中毒而意外身亡。</p><p>痛心！一路走好</p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;之前在tg收到的信息，今天在微信公众号得到证实，胡萝卜周离世&lt;/p&gt;
&lt;p&gt;胡萝卜周的准确离开时间是在今年一月份，根据他父亲的描述，他因一氧化碳中毒而意外身亡。&lt;/p&gt;
&lt;p&gt;痛心！一路走好&lt;/p&gt;

</summary>
      
    
    
    
    
  </entry>
  
  <entry>
    <title>github图床之弃用jsd(图床使用npm镜像加速)</title>
    <link href="https://www.qystu.cc/posts/34886.html"/>
    <id>https://www.qystu.cc/posts/34886.html</id>
    <published>2022-04-05T06:20:57.000Z</published>
    <updated>2023-04-27T13:32:33.385Z</updated>
    
    <content type="html"><![CDATA[<div class="story post-story"><h2 id="缘起"><a href="#缘起" class="headerlink" title="缘起"></a>缘起</h2><p>2021/12/20日，赶在旧年的末尾，一则<code>JSdelivrSSL证书错误</code>缓缓上了v2ex论坛热点。</p><p>此前JSD由于各种原因,曾经不正常了一段时间,所以大家并未对此感冒.正当人们以为这只是JSdelivr每年一度的<code>年经</code>阵痛,发个issue,过一段时间就好了的时候.官方直接爆出大料:<strong>JSDelivr had lost their ICP license</strong></p><p><img src="https://bu.dusays.com/2022/02/12/100b30b854826.png" class="lazyload" data-srcset="https://bu.dusays.com/2022/02/12/100b30b854826.png" srcset="data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="https://bu.dusays.com/2022/02/12/100b30b854826.png"></p><p>由此可见,过去的几年里,当人们发现JSD对个人面向国内加速拥有者无与伦比的效果时,各种滥用方式层出不穷:图床曾一阵流行,国内搜索引擎JSdelivr十有八九都是作为图床的,连PicGo插件都出了Github+JSdelivr图床;猛一点的,直接做视频床,甚至为了突破单文件20M限制开发了一套ts切片m3u8一条龙服务;作妖的,托管了不少突破网络审查的脚本和规则集;寻死的,添加了大量的政治宗教敏感,有些甚至不配称为宗教,直接上来就是骗钱的.</p><p>jsd并不是没有发布许可条款，但这并不能阻止白嫖大军的进程。在羊毛大军中，只要是你是免费的、公益的，你就要做好被薅爆的结果。但是薅羊毛的前提是羊还活着，倘若羊被薅死了，哪来的羊毛给诸君所薅？</p><p>总之，不管怎样，JSDelivr在决定将节点设置为<code>NearChina</code>，可以肯定的是，在最近很长一段时间内，我们都无法享受国内外双料同时加速的快感，换句话说，jsd在中国就被永久地打入了冷宫。</p></div><div class="story post-story"><h2 id="npm发包"><a href="#npm发包" class="headerlink" title="npm发包"></a>npm发包</h2><h3 id="Before-Start"><a href="#Before-Start" class="headerlink" title="Before Start"></a>Before Start</h3><p>那么我们怎么才能继续愉快的使用cdn加速呢</p><ul><li>jsd</li><li>反代</li><li>npm</li></ul><h3 id="自建cdn"><a href="#自建cdn" class="headerlink" title="自建cdn"></a>自建cdn</h3><p>绝对不可能😭 ，这太费钱包了</p><h3 id="npm发包-1"><a href="#npm发包-1" class="headerlink" title="npm发包"></a>npm发包</h3><p>将github的cdn仓库编辑一个action使其在每次更新文件时把文件打包到npm仓库里</p><p>说做就做</p><h4 id="workflows"><a href="#workflows" class="headerlink" title="workflows"></a>workflows</h4><figure class="highlight yml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br></pre></td><td class="code"><pre><span class="line"><span class="string">name:</span> <span class="string">npm-publish</span> </span><br><span class="line"> </span><br><span class="line"><span class="attr">on:</span> </span><br><span class="line">  <span class="attr">push:</span> </span><br><span class="line">    <span class="attr">branches:</span> </span><br><span class="line">      <span class="string">-</span> <span class="string">main</span> </span><br><span class="line">       </span><br><span class="line">  <span class="attr">workflow_dispatch:</span> </span><br><span class="line">   </span><br><span class="line"><span class="attr">jobs:</span> </span><br><span class="line">  <span class="attr">npm-publish:</span> </span><br><span class="line">    <span class="string">name:</span> <span class="string">npm-publish</span> </span><br><span class="line">    <span class="string">runs-on:</span> <span class="string">ubuntu-latest</span> </span><br><span class="line">     </span><br><span class="line">    <span class="attr">steps:</span> </span><br><span class="line">    <span class="string">-</span> <span class="string">name:</span> <span class="string">Checkout</span> <span class="string">repository</span> </span><br><span class="line">      <span class="string">uses:</span> <span class="string">actions/checkout@v2</span> </span><br><span class="line">       </span><br><span class="line">    <span class="string">-</span> <span class="string">name:</span> <span class="string">Set</span> <span class="string">up</span> <span class="string">Node.js</span> </span><br><span class="line">      <span class="string">uses:</span> <span class="string">actions/setup-node@master</span> </span><br><span class="line">      <span class="attr">with:</span> </span><br><span class="line">        <span class="string">node-version:</span> <span class="number">12</span> </span><br><span class="line">        <span class="string">registry-url:</span> <span class="string">https://registry.npmjs.org</span> </span><br><span class="line">         </span><br><span class="line">    <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">update</span></span><br><span class="line">      <span class="attr">run:</span> <span class="string">|</span></span><br><span class="line"><span class="string">        npm version patch</span></span><br><span class="line"><span class="string"></span>    <span class="string">-</span> <span class="string">name:</span> <span class="string">Publish</span> </span><br><span class="line">      <span class="string">run:</span> <span class="string">|</span> </span><br><span class="line">        <span class="string">npm</span> <span class="string">publish</span> </span><br><span class="line">      <span class="attr">env:</span> </span><br><span class="line">        <span class="string">NODE_AUTH_TOKEN:</span> <span class="string">$&#123;&#123;</span> <span class="string">secrets.npm_token</span> <span class="string">&#125;&#125;</span></span><br></pre></td></tr></table></figure><p>这样就可以方便的分发cdn文件的npm了</p><h4 id="镜像"><a href="#镜像" class="headerlink" title="镜像"></a>镜像</h4><p>既然有npm，那么类似jsd的镜像就很多了</p><div class="note link green"><p><a href="https://npm.elemecdn.com/">https://npm.elemecdn.com</a></p></div><div class="note link green"><p><a href="https://cdn.jsdelivr.net/npm">https://cdn.jsdelivr.net/npm</a></p></div><div class="note link green"><p><a href="https://unpkg.com/">https://unpkg.com</a></p></div><div class="note link green"><p><a href="https://u.pigax.cn/npm">https://u.pigax.cn/npm</a></p></div><div class="note link green"><p><a href="https://unpkg.pigax.cn/">https://unpkg.pigax.cn/</a></p></div><div class="note link green"><p><a href="https://cdn-jsd.pigax.cn/npm">https://cdn-jsd.pigax.cn/npm</a></p></div><div class="note link green"><p><a href="https://cdn1.tianli0.top/npm">https://cdn1.tianli0.top/npm</a> 需要许可</p></div><div class="note link green"><p><a href="https://cdn.cnortles.top/npm">https://cdn.cnortles.top/npm</a></p></div><div class="note link green"><p><a href="https://jsd.hin.cool/npm">https://jsd.hin.cool/npm</a></p></div><div class="note link green"><p><a href="https://jsdelivr.panbaidu.cn/npm">https://jsdelivr.panbaidu.cn/npm</a></p></div></div><div class="story post-story"><h2 id="其他方案-前端竞速"><a href="#其他方案-前端竞速" class="headerlink" title="其他方案(前端竞速)"></a>其他方案(前端竞速)</h2><p>去看<a href="https://blog.cyfan.top/">cyfan的博客</a></p></div><div class="story post-story"><h2 id="小结"><a href="#小结" class="headerlink" title="小结"></a>小结</h2><p>这篇文章在2月就准备开始写了，憋到今天才发布</p><p>前端竞速不会的还在问，会用的同学已经用起来了，我的博客速度怎么样，留言告诉我</p><div></div><div class="story post-story"><h2>推荐文章<span style="font-size:0.45em; color:gray">（由<a href="https://github.com/huiwang/hexo-recommended-posts">hexo文章推荐插件</a>驱动）</span></h2><ul><li><a href="https://www.qystu.cc/posts/32667.html">qexo多作者解决方案</a></li><li><a href="https://www.qystu.cc/posts/11159.html">DIY最低成本图床</a></li><li><a href="https://www.qystu.cc/posts/61056.html">为hexo加一个自动部署</a></li></ul></div></div>]]></content>
    
    
    <summary type="html">图床使用npm镜像加速</summary>
    
    
    
    <category term="hexo" scheme="https://www.qystu.cc/categories/hexo/"/>
    
    
    <category term="hexo" scheme="https://www.qystu.cc/tags/hexo/"/>
    
    <category term="cdn" scheme="https://www.qystu.cc/tags/cdn/"/>
    
    <category term="加速" scheme="https://www.qystu.cc/tags/%E5%8A%A0%E9%80%9F/"/>
    
  </entry>
  
  <entry>
    <title>停更通知</title>
    <link href="https://www.qystu.cc/posts/25002.html"/>
    <id>https://www.qystu.cc/posts/25002.html</id>
    <published>2022-03-24T00:29:21.000Z</published>
    <updated>2022-03-24T00:29:21.000Z</updated>
    
    <content type="html"><![CDATA[<div class="story post-story"><h2 id="停更"><a href="#停更" class="headerlink" title="停更"></a>停更</h2><p>青云团队由于一些原因，工作力不从心</p><p>经过慎重考虑，青云工作室准备在2022/4/11开始停更</p></div><div class="story post-story"><h2 id="重启时间"><a href="#重启时间" class="headerlink" title="重启时间"></a>重启时间</h2><p>重启时间预计定在8月中旬</p></div><div class="story post-story"><h2 id="再起航"><a href="#再起航" class="headerlink" title="再起航"></a>再起航</h2><p>在8月重启网站时，我们将带来更好的网站，更快的速度</p><p>同时会重构开往的官网</p><p>预计我们会在开源美化的主题同时，尝试开源全部源码</p><p>而且青云将建立一个基于gitea的代码托管平台，拥有CI/CD</p><p>请耐心等待，青云将变得更好</p><p>聊天扯淡加群</p><p><a href="https://jq.qq.com/?_wv=1027&k=6fMOhKtn"><img src="https://bu.dusays.com/2022/04/09/1b1512ab5471e.jpg" class="lazyload" data-srcset="https://bu.dusays.com/2022/04/09/1b1512ab5471e.jpg" srcset="data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=="></a></p></div>]]></content>
    
    
      
      
    <summary type="html">&lt;div class=&quot;story post-story&quot;&gt;&lt;h2 id=&quot;停更&quot;&gt;&lt;a href=&quot;#停更&quot; class=&quot;headerlink&quot; title=&quot;停更&quot;&gt;&lt;/a&gt;停更&lt;/h2&gt;&lt;p&gt;青云团队由于一些原因，工作力不从心&lt;/p&gt;
&lt;p&gt;经过慎重考虑，青云工作室准备在</summary>
      
    
    
    
    
  </entry>
  
  <entry>
    <title>qexo的搭建与使用</title>
    <link href="https://www.qystu.cc/posts/37212.html"/>
    <id>https://www.qystu.cc/posts/37212.html</id>
    <published>2022-03-19T12:01:18.000Z</published>
    <updated>2022-03-19T12:01:18.000Z</updated>
    
    <content type="html"><![CDATA[<p><img src="https://bu.dusays.com/2022/01/17/0f3d2cf954f82.png" class="lazyload" data-srcset="https://bu.dusays.com/2022/01/17/0f3d2cf954f82.png" srcset="data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=="></p><div class="story post-story"><h2 id="为什么写这篇文章"><a href="#为什么写这篇文章" class="headerlink" title="为什么写这篇文章"></a>为什么写这篇文章</h2><p>你是否一直在找一个hexo后台，但不尽人意，或许在没有qexo之前，hpp是一个很好的选择，但是显然拥有更多能力的qexo是更好的选择</p></div><div class="story post-story"><h2 id="为什么"><a href="#为什么" class="headerlink" title="为什么"></a>为什么</h2><p>qexo拥有如下功能</p><ul><li>自定义图床上传图片</li><li>在线配置编辑</li><li>在线文章管理</li><li>在线页面管理</li><li>在线友链管理</li><li>较为完善的缓存功能</li><li>Webhook 清除缓存</li><li>自动检查更新</li><li>实验性的在线更新</li><li>开放的 API</li></ul><p>那么看起来qexo是非常强大的</p></div><div class="story post-story"><h2 id="怎么用"><a href="#怎么用" class="headerlink" title="怎么用"></a>怎么用</h2><h3 id="申请-MongoDB"><a href="#申请-MongoDB" class="headerlink" title="申请 MongoDB"></a>申请 MongoDB</h3><p><a href="https://www.mongodb.com/cloud/atlas/register">注册 MongoDB 账号</a> 创建免费 MongoDB 数据库，区域推荐选择 AWS / N.<br>Virginia (us-east-1) 在 Clusters 页面点击 CONNECT，按步骤设置允许所有 IP 地址的连接），创建数据库用户，并记录数据库连接信息，密码即为你所设置的值</p><p><a href="https://bu.dusays.com/2021/11/09/6fd9e2a69e8bc.png"><img src="https://bu.dusays.com/2021/11/09/6fd9e2a69e8bc.png" class="lazyload" data-srcset="https://bu.dusays.com/2021/11/09/6fd9e2a69e8bc.png" srcset="data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=="></a></p><h3 id="一键部署"><a href="#一键部署" class="headerlink" title="一键部署"></a>一键部署</h3><p>点击按钮开始部署 <a href="https://vercel.com/new/clone?repository-url=https://github.com/am-abudu/Qexo"><img src="https://camo.githubusercontent.com/5e471e99e8e022cf454693e38ec843036ec6301e27ee1e1fa10325b1cb720584/68747470733a2f2f76657263656c2e636f6d2f627574746f6e" class="lazyload" data-srcset="https://camo.githubusercontent.com/5e471e99e8e022cf454693e38ec843036ec6301e27ee1e1fa10325b1cb720584/68747470733a2f2f76657263656c2e636f6d2f627574746f6e" srcset="data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="部署到 Vercel"></a></p><p>重新进入项目，在项目设置界面添加环境变量 Environment Variables</p><table><thead><tr><th>名称</th><th>意义</th><th>示例</th></tr></thead><tbody><tr><td>DOMAINS</td><td>你所允许通信的安全域名 注意双引号而且是英文半角</td><td>[“.vercel.app”, “127.0.0.1”, “.yoursite.com”]</td></tr><tr><td>MONGODB_HOST</td><td>MongoDB 连接地址</td><td>mongodb+srv://cluster0.xxxx.mongodb.net</td></tr><tr><td>MONGODB_PORT</td><td>MongoDB 通信端口 默认应填写 27017</td><td>27017</td></tr><tr><td>MONGODB_USER</td><td>MongoDB 用户名</td><td>abudu</td></tr><tr><td>MONGODB_DB</td><td>MongoDB 数据库名</td><td>Cluster0</td></tr><tr><td>MONGODB_PASS</td><td>MongoDB 密码</td><td>JWo0xxxxxxxx</td></tr></tbody></table><p>在 Deployments 点击 Redeploy 开始部署，若没有 Error 信息即可打开域名进入初始化引导</p></div><div class="story post-story"><h2 id="相关api"><a href="#相关api" class="headerlink" title="相关api"></a>相关api</h2><h3 id="写在前面"><a href="#写在前面" class="headerlink" title="写在前面"></a>写在前面</h3><ol><li>Qexo 的 API 后方通常加上斜杠，否则可能出现重定向，可能会影响使用</li><li>若没有特殊说明，以下 API  <strong>都需要鉴权</strong> ，具体方法为在 POST 或 GET 中添加项 token=”API密钥”</li><li>Qexo 的 API 分为对公与程序内部调用两种，分别位于 pub 和 api 路径下，本文只说明对外 API，即可以通过 API 密钥进行校验</li><li>若没有特殊说明，本文提到的参数均需要 POST 请求</li></ol><h3 id="对公-API"><a href="#对公-API" class="headerlink" title="对公 API"></a>对公 API</h3><h4 id="pub-save"><a href="#pub-save" class="headerlink" title="pub/save/"></a>pub/save/</h4><p>修改文件</p><table><thead><tr><th>file</th><th>content</th></tr></thead><tbody><tr><td>文件路径</td><td>内容</td></tr></tbody></table><figure class="highlight json"><figcaption><span>position-relative overflow-auto</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;msg&quot;</span><span class="punctuation">:</span> <span class="string">&quot;OK!&quot;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;status&quot;</span><span class="punctuation">:</span> <span class="literal"><span class="keyword">true</span></span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><h4 id="pub-save-post"><a href="#pub-save-post" class="headerlink" title="pub/save_post/"></a>pub/save_post/</h4><p>修改文章</p><table><thead><tr><th>file</th><th>content</th></tr></thead><tbody><tr><td>文章名</td><td>内容</td></tr></tbody></table><figure class="highlight json"><figcaption><span>position-relative overflow-auto</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;msg&quot;</span><span class="punctuation">:</span> <span class="string">&quot;OK!&quot;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;status&quot;</span><span class="punctuation">:</span> <span class="literal"><span class="keyword">true</span></span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><h4 id="pub-save-draft"><a href="#pub-save-draft" class="headerlink" title="pub/save_draft/"></a>pub/save_draft/</h4><p>保存文章草稿</p><table><thead><tr><th>file</th><th>content</th></tr></thead><tbody><tr><td>文章名</td><td>内容</td></tr></tbody></table><figure class="highlight json"><figcaption><span>position-relative overflow-auto</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;msg&quot;</span><span class="punctuation">:</span> <span class="string">&quot;OK!&quot;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;status&quot;</span><span class="punctuation">:</span> <span class="literal"><span class="keyword">true</span></span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><h4 id="pub-new"><a href="#pub-new" class="headerlink" title="pub/new/"></a>pub/new/</h4><p>新建文件</p><table><thead><tr><th>file</th><th>content</th></tr></thead><tbody><tr><td>文件路径</td><td>内容</td></tr></tbody></table><figure class="highlight json"><figcaption><span>position-relative overflow-auto</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;msg&quot;</span><span class="punctuation">:</span> <span class="string">&quot;OK!&quot;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;status&quot;</span><span class="punctuation">:</span> <span class="literal"><span class="keyword">true</span></span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><h4 id="pub-delete"><a href="#pub-delete" class="headerlink" title="pub/delete/"></a>pub/delete/</h4><p>删除文件</p><table><thead><tr><th>file</th></tr></thead><tbody><tr><td>文件路径</td></tr></tbody></table><figure class="highlight json"><figcaption><span>position-relative overflow-auto</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;msg&quot;</span><span class="punctuation">:</span> <span class="string">&quot;OK!&quot;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;status&quot;</span><span class="punctuation">:</span> <span class="literal"><span class="keyword">true</span></span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><h4 id="pub-delete-post"><a href="#pub-delete-post" class="headerlink" title="pub/delete_post/"></a>pub/delete_post/</h4><p>删除文章</p><table><thead><tr><th>file</th></tr></thead><tbody><tr><td>文章名</td></tr></tbody></table><figure class="highlight json"><figcaption><span>position-relative overflow-auto</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;msg&quot;</span><span class="punctuation">:</span> <span class="string">&quot;OK!&quot;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;status&quot;</span><span class="punctuation">:</span> <span class="literal"><span class="keyword">true</span></span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><h4 id="pub-create-webhook"><a href="#pub-create-webhook" class="headerlink" title="pub/create_webhook/"></a>pub/create_webhook/</h4><p>创建 Webhook 事件</p><table><thead><tr><th>uri</th></tr></thead><tbody><tr><td><a href="https://xxx/api/webhook/">https://xxx/api/webhook/</a></td></tr></tbody></table><figure class="highlight json"><figcaption><span>position-relative overflow-auto</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;msg&quot;</span><span class="punctuation">:</span> <span class="string">&quot;设置成功！&quot;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;status&quot;</span><span class="punctuation">:</span> <span class="literal"><span class="keyword">true</span></span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><h4 id="pub-get-update"><a href="#pub-get-update" class="headerlink" title="pub/get_update/"></a>pub/get_update/</h4><p>获取更新</p><figure class="highlight json"><figcaption><span>position-relative overflow-auto</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;hasNew&quot;</span><span class="punctuation">:</span> <span class="literal"><span class="keyword">false</span></span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;newer&quot;</span><span class="punctuation">:</span> <span class="string">&quot;1.5.5&quot;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;newer_link&quot;</span><span class="punctuation">:</span> <span class="string">&quot;https://github.com/am-abudu/Qexo/releases/tag/1.5.5&quot;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;newer_time&quot;</span><span class="punctuation">:</span> <span class="string">&quot;2022-02-16 23:27:23&quot;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;newer_text&quot;</span><span class="punctuation">:</span> <span class="string">&quot; 修复已知BUG; 添加友链清理功能  &quot;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;status&quot;</span><span class="punctuation">:</span> <span class="literal"><span class="keyword">true</span></span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><h4 id="pub-get-posts"><a href="#pub-get-posts" class="headerlink" title="pub/get_posts/"></a>pub/get_posts/</h4><p>获取文章列表</p><figure class="highlight json"><figcaption><span>position-relative overflow-auto</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;status&quot;</span><span class="punctuation">:</span> <span class="literal"><span class="keyword">true</span></span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;posts&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">        <span class="punctuation">&#123;</span></span><br><span class="line">            <span class="attr">&quot;name&quot;</span><span class="punctuation">:</span> <span class="string">&quot;10&quot;</span><span class="punctuation">,</span></span><br><span class="line">            <span class="attr">&quot;fullname&quot;</span><span class="punctuation">:</span> <span class="string">&quot;10.md&quot;</span><span class="punctuation">,</span></span><br><span class="line">            <span class="attr">&quot;path&quot;</span><span class="punctuation">:</span> <span class="string">&quot;source/_posts/10.md&quot;</span><span class="punctuation">,</span></span><br><span class="line">            <span class="attr">&quot;size&quot;</span><span class="punctuation">:</span> <span class="number">592</span><span class="punctuation">,</span></span><br><span class="line">            <span class="attr">&quot;status&quot;</span><span class="punctuation">:</span> <span class="literal"><span class="keyword">true</span></span></span><br><span class="line">        <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="punctuation">&#123;</span></span><br><span class="line">            <span class="attr">&quot;name&quot;</span><span class="punctuation">:</span> <span class="string">&quot;11&quot;</span><span class="punctuation">,</span></span><br><span class="line">            <span class="attr">&quot;fullname&quot;</span><span class="punctuation">:</span> <span class="string">&quot;11.md&quot;</span><span class="punctuation">,</span></span><br><span class="line">            <span class="attr">&quot;path&quot;</span><span class="punctuation">:</span> <span class="string">&quot;source/_posts/11.md&quot;</span><span class="punctuation">,</span></span><br><span class="line">            <span class="attr">&quot;size&quot;</span><span class="punctuation">:</span> <span class="number">1118</span><span class="punctuation">,</span></span><br><span class="line">            <span class="attr">&quot;status&quot;</span><span class="punctuation">:</span> <span class="literal"><span class="keyword">true</span></span></span><br><span class="line">        <span class="punctuation">&#125;</span></span><br><span class="line">    <span class="punctuation">]</span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><h4 id="pub-get-pages"><a href="#pub-get-pages" class="headerlink" title="pub/get_pages/"></a>pub/get_pages/</h4><p>获取页面列表</p><figure class="highlight json"><figcaption><span>position-relative overflow-auto</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;status&quot;</span><span class="punctuation">:</span> <span class="literal"><span class="keyword">true</span></span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;pages&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">        <span class="punctuation">&#123;</span></span><br><span class="line">            <span class="attr">&quot;name&quot;</span><span class="punctuation">:</span> <span class="string">&quot;404&quot;</span><span class="punctuation">,</span></span><br><span class="line">            <span class="attr">&quot;path&quot;</span><span class="punctuation">:</span> <span class="string">&quot;source/404/index.md&quot;</span><span class="punctuation">,</span></span><br><span class="line">            <span class="attr">&quot;size&quot;</span><span class="punctuation">:</span> <span class="number">5059</span></span><br><span class="line">        <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="punctuation">&#123;</span></span><br><span class="line">            <span class="attr">&quot;name&quot;</span><span class="punctuation">:</span> <span class="string">&quot;about&quot;</span><span class="punctuation">,</span></span><br><span class="line">            <span class="attr">&quot;path&quot;</span><span class="punctuation">:</span> <span class="string">&quot;source/about/index.md&quot;</span><span class="punctuation">,</span></span><br><span class="line">            <span class="attr">&quot;size&quot;</span><span class="punctuation">:</span> <span class="number">141</span></span><br><span class="line">        <span class="punctuation">&#125;</span></span><br><span class="line">    <span class="punctuation">]</span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><h4 id="pub-get-configs"><a href="#pub-get-configs" class="headerlink" title="pub/get_configs/"></a>pub/get_configs/</h4><p>获取配置列表</p><figure class="highlight json"><figcaption><span>position-relative overflow-auto</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;status&quot;</span><span class="punctuation">:</span> <span class="literal"><span class="keyword">true</span></span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;configs&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">        <span class="punctuation">&#123;</span></span><br><span class="line">            <span class="attr">&quot;name&quot;</span><span class="punctuation">:</span> <span class="string">&quot;main.yml&quot;</span><span class="punctuation">,</span></span><br><span class="line">            <span class="attr">&quot;path&quot;</span><span class="punctuation">:</span> <span class="string">&quot;.github/workflows/main.yml&quot;</span><span class="punctuation">,</span></span><br><span class="line">            <span class="attr">&quot;size&quot;</span><span class="punctuation">:</span> <span class="number">1500</span></span><br><span class="line">        <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="punctuation">&#123;</span></span><br><span class="line">            <span class="attr">&quot;name&quot;</span><span class="punctuation">:</span> <span class="string">&quot;_config.butterfly.yml&quot;</span><span class="punctuation">,</span></span><br><span class="line">            <span class="attr">&quot;path&quot;</span><span class="punctuation">:</span> <span class="string">&quot;_config.butterfly.yml&quot;</span><span class="punctuation">,</span></span><br><span class="line">            <span class="attr">&quot;size&quot;</span><span class="punctuation">:</span> <span class="number">27990</span></span><br><span class="line">        <span class="punctuation">&#125;</span></span><br><span class="line">    <span class="punctuation">]</span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><h4 id="pub-get-images"><a href="#pub-get-images" class="headerlink" title="pub/get_images/"></a>pub/get_images/</h4><p>获取图片列表</p><figure class="highlight json"><figcaption><span>position-relative overflow-auto</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;status&quot;</span><span class="punctuation">:</span> <span class="literal"><span class="keyword">true</span></span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;images&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">        <span class="punctuation">&#123;</span></span><br><span class="line">            <span class="attr">&quot;name&quot;</span><span class="punctuation">:</span> <span class="string">&quot;avatar-new-test3.png&quot;</span><span class="punctuation">,</span></span><br><span class="line">            <span class="attr">&quot;size&quot;</span><span class="punctuation">:</span> <span class="number">556194</span><span class="punctuation">,</span></span><br><span class="line">            <span class="attr">&quot;url&quot;</span><span class="punctuation">:</span> <span class="string">&quot;https://xxx&quot;</span><span class="punctuation">,</span></span><br><span class="line">            <span class="attr">&quot;date&quot;</span><span class="punctuation">:</span> <span class="string">&quot;2021-11-15 23:03:53&quot;</span><span class="punctuation">,</span></span><br><span class="line">            <span class="attr">&quot;time&quot;</span><span class="punctuation">:</span> <span class="string">&quot;1636988633.7590833&quot;</span></span><br><span class="line">        <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="punctuation">&#123;</span></span><br><span class="line">            <span class="attr">&quot;name&quot;</span><span class="punctuation">:</span> <span class="string">&quot;image.png&quot;</span><span class="punctuation">,</span></span><br><span class="line">            <span class="attr">&quot;size&quot;</span><span class="punctuation">:</span> <span class="number">2080250</span><span class="punctuation">,</span></span><br><span class="line">            <span class="attr">&quot;url&quot;</span><span class="punctuation">:</span> <span class="string">&quot;https://xxx&quot;</span><span class="punctuation">,</span></span><br><span class="line">            <span class="attr">&quot;date&quot;</span><span class="punctuation">:</span> <span class="string">&quot;2022-02-15 16:05:39&quot;</span><span class="punctuation">,</span></span><br><span class="line">            <span class="attr">&quot;time&quot;</span><span class="punctuation">:</span> <span class="string">&quot;1644912339.5202296&quot;</span></span><br><span class="line">        <span class="punctuation">&#125;</span></span><br><span class="line">    <span class="punctuation">]</span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><h4 id="pub-fix"><a href="#pub-fix" class="headerlink" title="pub/fix/"></a>pub/fix/</h4><p>自动修复程序</p><figure class="highlight json"><figcaption><span>position-relative overflow-auto</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;msg&quot;</span><span class="punctuation">:</span> <span class="string">&quot;尝试自动修复了 1 个字段，请在稍后检查和修改配置&quot;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;status&quot;</span><span class="punctuation">:</span> <span class="literal"><span class="keyword">true</span></span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><h4 id="pub-friends"><a href="#pub-friends" class="headerlink" title="pub/friends/"></a>pub/friends/</h4><p>获取友链 <strong>无需鉴权</strong></p><figure class="highlight json"><figcaption><span>position-relative overflow-auto</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;data&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">        <span class="punctuation">&#123;</span></span><br><span class="line">            <span class="attr">&quot;name&quot;</span><span class="punctuation">:</span> <span class="string">&quot;iMaeGoo’s Blog&quot;</span><span class="punctuation">,</span></span><br><span class="line">            <span class="attr">&quot;url&quot;</span><span class="punctuation">:</span> <span class="string">&quot;https://www.imaegoo.com/&quot;</span><span class="punctuation">,</span></span><br><span class="line">            <span class="attr">&quot;image&quot;</span><span class="punctuation">:</span> <span class="string">&quot;https://www.imaegoo.com/images/avatar.jpg&quot;</span><span class="punctuation">,</span></span><br><span class="line">            <span class="attr">&quot;description&quot;</span><span class="punctuation">:</span> <span class="string">&quot;虹墨空间站&quot;</span><span class="punctuation">,</span></span><br><span class="line">            <span class="attr">&quot;time&quot;</span><span class="punctuation">:</span> <span class="string">&quot;1642516414.3821218&quot;</span></span><br><span class="line">        <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="punctuation">&#123;</span></span><br><span class="line">            <span class="attr">&quot;name&quot;</span><span class="punctuation">:</span> <span class="string">&quot;Icarus&quot;</span><span class="punctuation">,</span></span><br><span class="line">            <span class="attr">&quot;url&quot;</span><span class="punctuation">:</span> <span class="string">&quot;https://ppoffice.github.io/hexo-theme-icarus/&quot;</span><span class="punctuation">,</span></span><br><span class="line">            <span class="attr">&quot;image&quot;</span><span class="punctuation">:</span> <span class="string">&quot;https://ppoffice.github.io/hexo-theme-icarus/img/avatar.png&quot;</span><span class="punctuation">,</span></span><br><span class="line">            <span class="attr">&quot;description&quot;</span><span class="punctuation">:</span> <span class="string">&quot;本站主题&quot;</span><span class="punctuation">,</span></span><br><span class="line">            <span class="attr">&quot;time&quot;</span><span class="punctuation">:</span> <span class="string">&quot;1642516682.7982264&quot;</span></span><br><span class="line">        <span class="punctuation">&#125;</span></span><br><span class="line">    <span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;status&quot;</span><span class="punctuation">:</span> <span class="literal"><span class="keyword">true</span></span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><h4 id="pub-add-friend"><a href="#pub-add-friend" class="headerlink" title="pub/add_friend"></a>pub/add_friend</h4><p>新增友链</p><table><thead><tr><th>name</th><th>url</th><th>image</th><th>description</th><th>status</th></tr></thead><tbody><tr><td>名称</td><td>链接</td><td>图片URL</td><td>描述</td><td>状态(隐藏/显示)</td></tr></tbody></table><figure class="highlight json"><figcaption><span>position-relative overflow-auto</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;msg&quot;</span><span class="punctuation">:</span> <span class="string">&quot;添加成功！&quot;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;time&quot;</span><span class="punctuation">:</span> <span class="string">&quot;1642516682.7982264&quot;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;status&quot;</span><span class="punctuation">:</span> <span class="literal"><span class="keyword">true</span></span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><h4 id="pub-edit-friend"><a href="#pub-edit-friend" class="headerlink" title="pub/edit_friend"></a>pub/edit_friend</h4><p>编辑友链</p><table><thead><tr><th>name</th><th>url</th><th>image</th><th>description</th><th>time</th><th>status</th></tr></thead><tbody><tr><td>名称</td><td>链接</td><td>图片URL</td><td>描述</td><td>该友链的时间戳</td><td>状态(隐藏/显示)</td></tr></tbody></table><figure class="highlight json"><figcaption><span>position-relative overflow-auto</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;msg&quot;</span><span class="punctuation">:</span> <span class="string">&quot;修改成功！&quot;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;status&quot;</span><span class="punctuation">:</span> <span class="literal"><span class="keyword">true</span></span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><h4 id="pub-del-friend"><a href="#pub-del-friend" class="headerlink" title="pub/del_friend"></a>pub/del_friend</h4><p>删除友链</p><table><thead><tr><th>time</th></tr></thead><tbody><tr><td>该友链的时间戳</td></tr></tbody></table><figure class="highlight json"><figcaption><span>position-relative overflow-auto</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;msg&quot;</span><span class="punctuation">:</span> <span class="string">&quot;删除成功！&quot;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;status&quot;</span><span class="punctuation">:</span> <span class="literal"><span class="keyword">true</span></span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><h4 id="pub-ask-friend"><a href="#pub-ask-friend" class="headerlink" title="pub/ask_friend"></a>pub/ask_friend</h4><p>申请友链 <strong>无需鉴权但需要在设置中开启</strong></p><table><thead><tr><th>name</th><th>url</th><th>image</th><th>description</th></tr></thead><tbody><tr><td>名称</td><td>链接</td><td>图片URL</td><td>描述</td></tr></tbody></table><figure class="highlight json"><figcaption><span>position-relative overflow-auto</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;msg&quot;</span><span class="punctuation">:</span> <span class="string">&quot;申请成功！&quot;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;time&quot;</span><span class="punctuation">:</span> <span class="string">&quot;1642516682.7982264&quot;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;status&quot;</span><span class="punctuation">:</span> <span class="literal"><span class="keyword">true</span></span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><h4 id="pub-last-已移除于1-6-2"><a href="#pub-last-已移除于1-6-2" class="headerlink" title="pub/last 已移除于1.6.2"></a>pub/last 已移除于1.6.2</h4><p>获取博主最后在线时间 <strong>已移除请使用/pub/status/</strong></p><figure class="highlight json"><figcaption><span>position-relative overflow-auto</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;msg&quot;</span><span class="punctuation">:</span> <span class="string">&quot;1645543096&quot;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;status&quot;</span><span class="punctuation">:</span> <span class="literal"><span class="keyword">true</span></span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><h4 id="pub-get-custom"><a href="#pub-get-custom" class="headerlink" title="pub/get_custom"></a>pub/get_custom</h4><p>获取自定义的字段 <strong>无需鉴权</strong></p><table><thead><tr><th>key</th></tr></thead><tbody><tr><td>字段名</td></tr></tbody></table><figure class="highlight json"><figcaption><span>position-relative overflow-auto</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;data&quot;</span><span class="punctuation">:</span> <span class="string">&quot;xxxx&quot;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;status&quot;</span><span class="punctuation">:</span> <span class="literal"><span class="keyword">true</span></span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><h4 id="pub-get-notifications"><a href="#pub-get-notifications" class="headerlink" title="pub/get_notifications"></a>pub/get_notifications</h4><p>获取消息</p><figure class="highlight json"><figcaption><span>position-relative overflow-auto</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;data&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">        <span class="punctuation">&#123;</span></span><br><span class="line">            <span class="attr">&quot;label&quot;</span><span class="punctuation">:</span> <span class="string">&quot;title&quot;</span><span class="punctuation">,</span></span><br><span class="line">            <span class="attr">&quot;content&quot;</span><span class="punctuation">:</span> <span class="string">&quot;text&quot;</span><span class="punctuation">,</span></span><br><span class="line">            <span class="attr">&quot;timestamp&quot;</span><span class="punctuation">:</span> <span class="string">&quot;1647668134.7664979&quot;</span><span class="punctuation">,</span></span><br><span class="line">            <span class="attr">&quot;time&quot;</span><span class="punctuation">:</span> <span class="string">&quot;2022-03-19 13:35:34&quot;</span></span><br><span class="line">        <span class="punctuation">&#125;</span><span class="punctuation">,</span>      </span><br><span class="line">        <span class="punctuation">&#123;</span></span><br><span class="line">            <span class="attr">&quot;label&quot;</span><span class="punctuation">:</span> <span class="string">&quot;title1&quot;</span><span class="punctuation">,</span></span><br><span class="line">            <span class="attr">&quot;content&quot;</span><span class="punctuation">:</span> <span class="string">&quot;text1&quot;</span><span class="punctuation">,</span></span><br><span class="line">            <span class="attr">&quot;timestamp&quot;</span><span class="punctuation">:</span> <span class="string">&quot;1647668134.7664979&quot;</span><span class="punctuation">,</span></span><br><span class="line">            <span class="attr">&quot;time&quot;</span><span class="punctuation">:</span> <span class="string">&quot;2022-03-19 13:35:34&quot;</span></span><br><span class="line">        <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line"></span><br><span class="line">    <span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;status&quot;</span><span class="punctuation">:</span> <span class="literal"><span class="keyword">true</span></span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><h4 id="pub-status"><a href="#pub-status" class="headerlink" title="pub/status"></a>pub/status</h4><p>获取博客基本信息 <strong>无需鉴权</strong></p><figure class="highlight json"><figcaption><span>position-relative overflow-auto</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;data&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">        <span class="attr">&quot;posts&quot;</span><span class="punctuation">:</span> <span class="string">&quot;68&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;last&quot;</span><span class="punctuation">:</span> <span class="string">&quot;1648050031&quot;</span></span><br><span class="line">    <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;status&quot;</span><span class="punctuation">:</span> <span class="literal"><span class="keyword">true</span></span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><h3 id="错误示例"><a href="#错误示例" class="headerlink" title="错误示例"></a>错误示例</h3><p>错误返回在大多数情况相同</p><figure class="highlight json"><figcaption><span>position-relative overflow-auto</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;msg&quot;</span><span class="punctuation">:</span> <span class="string">&quot;Error Message&quot;</span><span class="punctuation">,</span> </span><br><span class="line">    <span class="attr">&quot;status&quot;</span><span class="punctuation">:</span> <span class="literal"><span class="keyword">false</span></span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure></div><div class="story post-story"><h2 id="更多"><a href="#更多" class="headerlink" title="更多"></a>更多</h2><p>去问abudu</p><p>终于水完这篇文章了</p><div></div><div class="story post-story"><h2>推荐文章<span style="font-size:0.45em; color:gray">（由<a href="https://github.com/huiwang/hexo-recommended-posts">hexo文章推荐插件</a>驱动）</span></h2><ul><li><a href="https://www.qystu.cc/posts/32667.html">qexo多作者解决方案</a></li><li><a href="https://www.qystu.cc/posts/52948.html">serviceworkers首屏优化</a></li><li><a href="https://www.qystu.cc/posts/61056.html">为hexo加一个自动部署</a></li></ul></div></div>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;&lt;img src=&quot;https://bu.dusays.com/2022/01/17/0f3d2cf954f82.png&quot; class=&quot;lazyload&quot; data-srcset=&quot;https://bu.dusays.com/2022/01/17/0f3d2cf954f8</summary>
      
    
    
    
    <category term="hexo" scheme="https://www.qystu.cc/categories/hexo/"/>
    
    
    <category term="博客" scheme="https://www.qystu.cc/tags/%E5%8D%9A%E5%AE%A2/"/>
    
    <category term="后台" scheme="https://www.qystu.cc/tags/%E5%90%8E%E5%8F%B0/"/>
    
  </entry>
  
  <entry>
    <title>gulp更新4.0后的报错(gulp报Did you forget to signal async completion?)</title>
    <link href="https://www.qystu.cc/posts/55153.html"/>
    <id>https://www.qystu.cc/posts/55153.html</id>
    <published>2022-02-15T06:28:55.000Z</published>
    <updated>2022-02-15T06:28:55.000Z</updated>
    
    <content type="html"><![CDATA[<div class="story post-story"><h2 id="缘起"><a href="#缘起" class="headerlink" title="缘起"></a>缘起</h2><p>今天我升级了gulp到4.0,在git三件套之后,网站并没有更新,我便登录了github查看action的运行状况,便有此文<br><img src="https://bu.dusays.com/2022/02/24/8dd37de3207c0.png" class="lazyload" data-srcset="https://bu.dusays.com/2022/02/24/8dd37de3207c0.png" srcset="data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=="></p></div><div class="story post-story"><h2 id="问题"><a href="#问题" class="headerlink" title="问题"></a>问题</h2><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">Did you forget to signal async completion?</span><br></pre></td></tr></table></figure><p>在查看了gulp官网之后我人傻了,全是英文</p><p>这是一个新特性,简单来说就是原因: gulp 不再支持同步任务了。 因为同步任务常常会导致难以调试的细微错误,例如忘记从任务 (task)中返回 stream。 当你看到 “ Did you forget to signal async completion ?” 警告时,说明你<strong>并未使用前面提到的返回方式</strong></p><p>意思是你没有写一个任务完成的返回通知(如果我描述有误评论区告诉我)</p><p>官网的原文是When you see the <em>“Did you forget to signal async completion?”</em> warning, none of the techniques mentioned above were used. You’ll need to use the error-first callback or return a stream, promise, event emitter, child process, or observable to resolve the issue.</p></div><div class="story post-story"><h2 id="解决方案"><a href="#解决方案" class="headerlink" title="解决方案"></a>解决方案</h2><h3 id="官网的解决方案是"><a href="#官网的解决方案是" class="headerlink" title="官网的解决方案是"></a>官网的解决方案是</h3><p>Using async/await</p><p>即把原来类似这样的代码</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">const gulp = require(&#x27;gulp&#x27;);</span><br><span class="line">gulp.task(&#x27;testGulp&#x27;, () =&gt; &#123;</span><br><span class="line">    console.log(&#x27;Hello World!&#x27;);</span><br><span class="line">&#125;);</span><br></pre></td></tr></table></figure><p>改成这样</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">const gulp = require(&#x27;gulp&#x27;);</span><br><span class="line">gulp.task(&#x27;testGulp&#x27;, async() =&gt; &#123;</span><br><span class="line">   await console.log(&#x27;Hello World!&#x27;);</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><p>在不使用文件流的情况下，向task的函数里传入一个名叫done的回调函数，以结束task</p><p>例如源代码是这样的</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">gulp.task(&#x27;default&#x27;, gulp.series(&#x27;one&#x27;));</span><br></pre></td></tr></table></figure><p>那只要添加一个done的回调函数即可</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">gulp.task(&quot;default&quot;, done =&gt; &#123;</span><br><span class="line">    gulp.series(&quot;one&quot;);</span><br><span class="line">    done();</span><br><span class="line">  &#125;);</span><br></pre></td></tr></table></figure></div><div class="story post-story"><h2 id="结语"><a href="#结语" class="headerlink" title="结语"></a>结语</h2><p>又码了700多字,如果有其他问题可以在评论区回复噢，我会尽量回复的😃</p><div></div><div class="story post-story"><h2>推荐文章<span style="font-size:0.45em; color:gray">（由<a href="https://github.com/huiwang/hexo-recommended-posts">hexo文章推荐插件</a>驱动）</span></h2><ul><li><a href="https://www.qystu.cc/posts/32667.html">qexo多作者解决方案</a></li><li><a href="https://www.qystu.cc/posts/52948.html">serviceworkers首屏优化</a></li><li><a href="https://www.qystu.cc/posts/61056.html">为hexo加一个自动部署</a></li></ul></div></div>]]></content>
    
    
    <summary type="html">gulp升级4.0后的报错与修复</summary>
    
    
    
    <category term="web" scheme="https://www.qystu.cc/categories/web/"/>
    
    
    <category term="前端" scheme="https://www.qystu.cc/tags/%E5%89%8D%E7%AB%AF/"/>
    
    <category term="gulp" scheme="https://www.qystu.cc/tags/gulp/"/>
    
    <category term="博客" scheme="https://www.qystu.cc/tags/%E5%8D%9A%E5%AE%A2/"/>
    
  </entry>
  
  <entry>
    <title>给博客加入链接安全跳转页(添加一个和CSDN一样的链接跳转页)</title>
    <link href="https://www.qystu.cc/posts/25250.html"/>
    <id>https://www.qystu.cc/posts/25250.html</id>
    <published>2022-01-21T11:26:49.000Z</published>
    <updated>2022-01-21T11:26:49.000Z</updated>
    
    <content type="html"><![CDATA[<div class="story post-story"><h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>或是出于优化 SEO，或是出于加强网站体验，很多博客都给文章中的外部链接加上了个二次跳转，本博客也不例外。</p><p>在逛别人的博客的时候，发现了有一种叫 <code>go.php</code>的东西，可以经过自己站点的网页再跳转出去，方便SEO优化。但是像Hexo这类静态博客，想要从源HTML修改链接难度有点大，这里我们采用JavaScript动态修改</p></div><div class="story post-story"><h2 id="部署"><a href="#部署" class="headerlink" title="部署"></a>部署</h2><p><a href="https://github.com/qystudio0/go-jumper">点我</a>fork此仓库，然后在vercel中部署</p><p>或<a href="https://vercel.com/new/clone?repository-url=https://github.com/qystudio0/go-jumper"><img src="https://vercel.com/button" class="lazyload" data-srcset="https://vercel.com/button" srcset="data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="部署到 Vercel"></a>使用他部署</p></div><div class="story post-story"><h2 id="修改"><a href="#修改" class="headerlink" title="修改"></a>修改</h2><h3 id="打开-js-index-js修改个人信息"><a href="#打开-js-index-js修改个人信息" class="headerlink" title="打开 js/index.js修改个人信息"></a>打开 <code>js/index.js</code>修改个人信息</h3><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br></pre></td><td class="code"><pre><span class="line">$(<span class="variable language_">document</span>).<span class="title function_">ready</span>(<span class="function">()=&gt;</span>&#123;</span><br><span class="line"><span class="variable language_">console</span>.<span class="title function_">log</span>(<span class="string">&quot;Running...&quot;</span>)</span><br><span class="line">    <span class="keyword">if</span>(<span class="variable language_">window</span>.<span class="property">location</span>.<span class="property">hash</span>===<span class="string">&quot;&quot;</span>)&#123;</span><br><span class="line">        <span class="variable language_">document</span>.<span class="title function_">getElementsByClassName</span>(<span class="string">&quot;loading-text&quot;</span>)[<span class="number">0</span>].<span class="property">innerHTML</span> = <span class="string">&quot;参数错误，将跳转回青云工作室&lt;dot&gt;...&lt;/dot&gt;&quot;</span></span><br><span class="line">        <span class="built_in">setTimeout</span>(<span class="function">()=&gt;</span>&#123;</span><br><span class="line">            <span class="variable language_">window</span>.<span class="property">location</span>.<span class="property">href</span> = <span class="string">&quot;https://qystu.cc/&quot;</span><span class="comment">/* 这里 */</span></span><br><span class="line">        &#125;,<span class="number">5000</span>)</span><br><span class="line">        <span class="keyword">return</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">let</span> reg = <span class="keyword">new</span> <span class="title class_">RegExp</span>(<span class="regexp">/#(.*)/g</span>);</span><br><span class="line">    <span class="keyword">let</span> base64 = reg.<span class="title function_">exec</span>(<span class="variable language_">window</span>.<span class="property">location</span>.<span class="property">hash</span>)</span><br><span class="line">    <span class="keyword">let</span> link = <span class="variable language_">window</span>.<span class="title function_">atob</span>(base64[<span class="number">1</span>])</span><br><span class="line">    <span class="keyword">let</span> referrer = <span class="variable language_">document</span>.<span class="property">referrer</span>.<span class="title function_">split</span>(<span class="string">&#x27;/&#x27;</span>)[<span class="number">2</span>];</span><br><span class="line">    referrer = referrer===<span class="literal">undefined</span>?<span class="string">&quot;&quot;</span>:referrer.<span class="title function_">split</span>(<span class="string">&#x27;.&#x27;</span>)</span><br><span class="line">    <span class="keyword">if</span>(referrer[referrer.<span class="property">length</span>-<span class="number">2</span>]+<span class="string">&#x27;.&#x27;</span>+referrer[referrer.<span class="property">length</span>-<span class="number">1</span>]!=<span class="string">&quot;pai233.top&quot;</span> || <span class="variable language_">document</span>.<span class="property">referrer</span>===<span class="string">&quot;&quot;</span>)&#123;</span><br><span class="line">        swal.<span class="title function_">fire</span>(&#123;</span><br><span class="line">            <span class="attr">title</span>: <span class="string">&quot;确定访问？&quot;</span>,</span><br><span class="line">            <span class="attr">text</span>: <span class="string">&quot;该网址不属于青云工作室，你确定要打开&quot;</span>+link+<span class="string">&quot;吗？&quot;</span>,<span class="comment">/* 这里 */</span></span><br><span class="line">            <span class="attr">type</span>: <span class="string">&quot;warning&quot;</span>,</span><br><span class="line">            <span class="attr">showCancelButton</span>: <span class="literal">true</span>,</span><br><span class="line">            <span class="attr">confirmButtonColor</span>: <span class="string">&quot;#DD6B55&quot;</span>,</span><br><span class="line">            <span class="attr">confirmButtonText</span>: <span class="string">&quot;确定&quot;</span>,</span><br><span class="line">            <span class="attr">cancelButtonText</span>: <span class="string">&quot;取消&quot;</span>,</span><br><span class="line">          &#125;).<span class="title function_">then</span>(<span class="keyword">function</span>(<span class="params">isConfirm</span>)&#123;</span><br><span class="line">            <span class="variable language_">console</span>.<span class="title function_">log</span>(isConfirm)</span><br><span class="line">            <span class="keyword">if</span> (isConfirm) &#123;</span><br><span class="line">                <span class="variable language_">console</span>.<span class="title function_">log</span>(<span class="string">&#x27;setTimeout&#x27;</span>)</span><br><span class="line">                <span class="built_in">setTimeout</span>(<span class="keyword">function</span>(<span class="params"></span>)&#123;</span><br><span class="line">                    <span class="variable language_">window</span>.<span class="property">location</span>.<span class="property">href</span> = link</span><br><span class="line">                &#125;,<span class="number">3000</span>)</span><br><span class="line">            &#125;  </span><br><span class="line">            <span class="keyword">else</span> &#123;</span><br><span class="line">                <span class="variable language_">window</span>.<span class="property">opener</span>=<span class="literal">null</span>;</span><br><span class="line">                <span class="variable language_">window</span>.<span class="title function_">open</span>(<span class="string">&#x27;&#x27;</span>,<span class="string">&#x27;_self&#x27;</span>);</span><br><span class="line">                <span class="variable language_">window</span>.<span class="title function_">close</span>();</span><br><span class="line">                <span class="comment">/* 微信浏览器关闭 */</span> </span><br><span class="line">                <span class="title class_">WeixinJSBridge</span>.<span class="title function_">call</span>(<span class="string">&#x27;closeWindow&#x27;</span>);</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;)</span><br><span class="line">    &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">        <span class="built_in">setTimeout</span>(<span class="keyword">function</span>(<span class="params"></span>)&#123;</span><br><span class="line">            <span class="variable language_">window</span>.<span class="property">location</span>.<span class="property">href</span> = link</span><br><span class="line">        &#125;,<span class="number">3000</span>)</span><br><span class="line">    &#125;</span><br><span class="line">&#125;)</span><br></pre></td></tr></table></figure><h3 id="打开-js-checker-js"><a href="#打开-js-checker-js" class="headerlink" title="打开 js/checker.js"></a>打开 <code>js/checker.js</code></h3><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br></pre></td><td class="code"><pre><span class="line">$(<span class="variable language_">document</span>).<span class="title function_">ready</span>(<span class="keyword">function</span>(<span class="params"></span>)&#123;</span><br><span class="line">    <span class="title function_">checkLink</span>();</span><br><span class="line">&#125;);</span><br><span class="line"><span class="comment">// 若博客启用了Pjax请去掉注释。</span></span><br><span class="line"><span class="comment">// $(document).on(&#x27;pjax:complete&#x27;, function () &#123;</span></span><br><span class="line"><span class="comment">//     checkLink();</span></span><br><span class="line"><span class="comment">// &#125;);</span></span><br><span class="line"><span class="keyword">async</span> <span class="keyword">function</span> <span class="title function_">checkLink</span>(<span class="params"></span>)&#123;</span><br><span class="line">    <span class="keyword">let</span> link = <span class="variable language_">document</span>.<span class="title function_">getElementsByTagName</span>(<span class="string">&#x27;a&#x27;</span>);</span><br><span class="line">    <span class="keyword">for</span>(<span class="keyword">var</span> i=<span class="number">0</span>;i&lt;link.<span class="property">length</span>;i++)&#123;</span><br><span class="line">        <span class="comment">//如果你的博客添加了Gitter聊天窗，请去掉下方注释</span></span><br><span class="line">        <span class="keyword">if</span>(link[i].<span class="property">href</span>===<span class="string">&quot;&quot;</span> <span class="comment">/*|| link[i].className===&quot;gitter-open-chat-button&quot;*/</span>)<span class="keyword">continue</span>;</span><br><span class="line">        <span class="keyword">if</span>(!<span class="keyword">await</span> <span class="title function_">checkLocalSite</span>(link[i].<span class="property">href</span>))&#123;</span><br><span class="line">            link[i].<span class="property">href</span> = <span class="string">&quot;[你的Go Jumper的部署地址]#&quot;</span>+<span class="variable language_">window</span>.<span class="title function_">btoa</span>(link[i].<span class="property">href</span>)</span><br><span class="line">            <span class="comment">//console.log(&quot;edit.&quot;)</span></span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">async</span> <span class="keyword">function</span> <span class="title function_">checkLocalSite</span>(<span class="params">url</span>)&#123;</span><br><span class="line">    <span class="keyword">try</span>&#123;</span><br><span class="line">        <span class="comment">//console.log(&quot;check:&quot;,url)</span></span><br><span class="line">        <span class="keyword">let</span> reg = <span class="keyword">new</span> <span class="title class_">RegExp</span>(<span class="regexp">/\/\/(.*)\//g</span>)</span><br><span class="line">        <span class="keyword">let</span> domain = reg.<span class="title function_">exec</span>(url)[<span class="number">1</span>].<span class="title function_">split</span>(<span class="string">&#x27;/&#x27;</span>)[<span class="number">0</span>].<span class="title function_">split</span>(<span class="string">&#x27;.&#x27;</span>)</span><br><span class="line">        <span class="comment">//console.log(domain,domain[domain.length-2]+&#x27;.&#x27;+domain[domain.length-1])</span></span><br><span class="line">        domain = &#123;</span><br><span class="line">            <span class="comment">//二级域名请去除下一行的注释</span></span><br><span class="line">            <span class="attr">check</span>: (<span class="comment">/*domain[domain.length-3]+&#x27;.&#x27;+*/</span>domain[domain.<span class="property">length</span>-<span class="number">2</span>]+<span class="string">&#x27;.&#x27;</span>+domain[domain.<span class="property">length</span>-<span class="number">1</span>]).<span class="title function_">split</span>(<span class="string">&#x27;/&#x27;</span>)[<span class="number">0</span>],</span><br><span class="line">            <span class="attr">original</span>: domain</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="comment">//console.log(domain)/* 这里 */</span></span><br><span class="line">        <span class="keyword">if</span>(domain.<span class="property">check</span>===<span class="string">&quot;qystu.cc&quot;</span> || domain.<span class="property">original</span>[<span class="number">0</span>].<span class="title function_">split</span>(<span class="string">&#x27;/&#x27;</span>)[<span class="number">0</span>]===<span class="string">&quot;localhost:4000&quot;</span>)<span class="keyword">return</span> <span class="literal">true</span>;<span class="comment">//将domain.check修改为根或二级域名，domain.original[0].split(&#x27;/&#x27;)[0]修改为本地测试页面</span></span><br><span class="line">        <span class="keyword">return</span> <span class="literal">false</span>;</span><br><span class="line">    &#125;<span class="keyword">catch</span>(err)&#123;</span><br><span class="line">        <span class="keyword">return</span> <span class="literal">true</span>;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure></div><div class="story post-story"><h2 id="引入"><a href="#引入" class="headerlink" title="引入"></a>引入</h2><p>最后在博客的 <code>_config.yml</code>中引入<br>例如vlts的</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">import:</span><br><span class="line">  script:</span><br><span class="line">    - &lt;script src=&quot;https://cdn.jsdelivr.net/gh/qystudio0/go-jumper/js/checker.js&quot;&gt;&lt;/script&gt;</span><br></pre></td></tr></table></figure><p>如果你的主题不支持引入那么可以在head里添加</p><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="tag">&lt;<span class="name">script</span> <span class="attr">src</span>=<span class="string">&quot;https://cdn.jsdelivr.net/gh/qystudio0/go-jumper/js/checker.js&quot;</span>&gt;</span><span class="tag">&lt;/<span class="name">script</span>&gt;</span></span><br></pre></td></tr></table></figure></div><div class="story post-story"><h2 id="结语"><a href="#结语" class="headerlink" title="结语"></a>结语</h2><p>这样，当博客加载完毕的时候，博客的全部外链就会被加上二级跳转，但是源HTML里的外链不变。可以优化 SEO和加强网站体验</p><p>本文修改自<a href="https://blog.pai233.top/20220109/how-to-use-go-jumper/">pai233</a></p><p>源码参考自<a href="https://github.com/pai233/go-jumper/">go-jumper</a></p><div></div><div class="story post-story"><h2>推荐文章<span style="font-size:0.45em; color:gray">（由<a href="https://github.com/huiwang/hexo-recommended-posts">hexo文章推荐插件</a>驱动）</span></h2><ul><li><a href="https://www.qystu.cc/posts/32667.html">qexo多作者解决方案</a></li><li><a href="https://www.qystu.cc/posts/52948.html">serviceworkers首屏优化</a></li><li><a href="https://www.qystu.cc/posts/61056.html">为hexo加一个自动部署</a></li><li><a href="https://songxwn.com/team_nav/">部署团队服务导航网站 Team-nav</a></li></ul></div></div>]]></content>
    
    
    <summary type="html">你是否经常看到CSDN的跳转页，它对网站的SEO有一点帮助，给博客加入链接安全跳转页吧</summary>
    
    
    
    <category term="web" scheme="https://www.qystu.cc/categories/web/"/>
    
    
    <category term="博客" scheme="https://www.qystu.cc/tags/%E5%8D%9A%E5%AE%A2/"/>
    
    <category term="web" scheme="https://www.qystu.cc/tags/web/"/>
    
    <category term="跳转" scheme="https://www.qystu.cc/tags/%E8%B7%B3%E8%BD%AC/"/>
    
  </entry>
  
</feed>
