Site updated: 2025-02-17 00:12:27

This commit is contained in:
qinglong committed 2025-02-17 00:12:29 +08:00
1 parent 77cae36fd1
commit 3fb658a630
241 files changed
+411 -358

No files matched your search

+79 -55
View File
@@ -10,8 +10,8 @@
</author>
<description>天生我材必有用</description>
<language>zh-CN</language>
<pubDate>Sun, 29 Sep 2024 16:25:00 +0800</pubDate>
<lastBuildDate>Sun, 29 Sep 2024 16:25:00 +0800</lastBuildDate>
<pubDate>Sun, 16 Feb 2025 22:32:00 +0800</pubDate>
<lastBuildDate>Sun, 16 Feb 2025 22:32:00 +0800</lastBuildDate>
<category term="hito" />
<category term="無言" />
<category term="博客" />
@@ -20,6 +20,82 @@
<category term="心得体会" />
<category term="技术分享" />
<category term="踩坑" />
<item>
<guid isPermalink="true">https://hitoli.com/2025/02/16/%E6%9E%81%E7%A9%BA%E9%97%B4%E9%83%A8%E7%BD%B2Deepseek%EF%BC%88API%E8%B0%83%E7%94%A8%EF%BC%89/</guid>
<title>极空间部署DeepSeek(API调用)</title>
<link>https://hitoli.com/2025/02/16/%E6%9E%81%E7%A9%BA%E9%97%B4%E9%83%A8%E7%BD%B2Deepseek%EF%BC%88API%E8%B0%83%E7%94%A8%EF%BC%89/</link>
<category term="极空间" scheme="https://hitoli.com/categories/%E6%9E%81%E7%A9%BA%E9%97%B4/" />
<category term="Docker" scheme="https://hitoli.com/categories/%E6%9E%81%E7%A9%BA%E9%97%B4/Docker/" />
<category term="DeepSeek" scheme="https://hitoli.com/tags/DeepSeek/" />
<category term="AI" scheme="https://hitoli.com/tags/AI/" />
<pubDate>Sun, 16 Feb 2025 22:32:00 +0800</pubDate>
<description><![CDATA[ &lt;h4 id=&#34;前言&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#前言&#34;&gt;#&lt;/a&gt; 前言&lt;/h4&gt;
&lt;p&gt;最近 DeepSeek 比较火爆,到处都在夸。大部分人都想搭建自己的私有服务器,但我查了查资料还是放弃了想法,毕竟 30B 以下的没啥鸟用,以上的我又搞不起。🙂,最后又经不住诱惑就搞一个调用 api 的吧。经过研究,最终决定使用 justsong/one-api 加 vinlic/deepseek-free-api 加 yidadaa/chatgpt-next-web 的方案。justsong/one-api 用于统一管理、调用 AI 服务(当然也可以调用自己搭建的 DeepSeek🙂),vinlic/deepseek-free-api 用于调用 DeepSeek 官方接口,yidadaa/chatgpt-next-web 提供 web 界面用户和 ai 进行对话。大致了解清楚后就开始吧!&lt;/p&gt;
&lt;h4 id=&#34;前期准备&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#前期准备&#34;&gt;#&lt;/a&gt; 前期准备&lt;/h4&gt;
&lt;p&gt;需要自己先申请一个&lt;span class=&#34;exturl&#34; data-url=&#34;aHR0cHM6Ly9jaGF0LmRlZXBzZWVrLmNvbS8=&#34;&gt; DeepSeek&lt;/span&gt; 账号,并获取 token。获取方法是登陆后随便说一句话,然后按 F12 到应用程序 - 存储 - 本地存储中找到 userToken 的 value 值。&lt;br /&gt;
&lt;img data-src=&#34;https://npic.hitoli.com:8443/images/2025/02/16/2025-02-16-23-54-54.png&#34; alt=&#34;2025-02-16-23-54-54.png&#34; /&gt;&lt;/p&gt;
&lt;h5 id=&#34;安装deepseek-free-api&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#安装deepseek-free-api&#34;&gt;#&lt;/a&gt; 安装 deepseek-free-api&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;1、端口&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img data-src=&#34;https://npic.hitoli.com:8443/images/2025/02/16/2025-02-16-23-52-13.png&#34; alt=&#34;2025-02-16-23-52-13.png&#34; /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;2、环境&lt;br /&gt;
&lt;img data-src=&#34;https://npic.hitoli.com:8443/images/2025/02/16/2025-02-16-23-53-30.png&#34; alt=&#34;2025-02-16-23-53-30.png&#34; /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;note info&#34;&gt;
&lt;p&gt;增加参数 DEEP_SEEK_CHAT_AUTHORIZATION 值:userToken 的 value 值&lt;/p&gt;
&lt;/div&gt;
&lt;h5 id=&#34;安装one-api&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#安装one-api&#34;&gt;#&lt;/a&gt; 安装 one-api&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;1、文件夹与路径&lt;br /&gt;
&lt;img data-src=&#34;https://npic.hitoli.com:8443/images/2025/02/16/2025-02-16-23-56-44.png&#34; alt=&#34;2025-02-16-23-56-44.png&#34; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2、端口&lt;br /&gt;
&lt;img data-src=&#34;https://npic.hitoli.com:8443/images/2025/02/16/2025-02-16-23-57-30.png&#34; alt=&#34;2025-02-16-23-57-30.png&#34; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;3、配置&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;note info&#34;&gt;
&lt;p&gt;登陆 web 页面(极空间 ip+one-api 的本地端口,默认用户名密码 root/123456),先添加渠道,再添加令牌。渠道用于调用指定的 api,我这里调用的是 deepseek-free-api(密钥为 userToken 的 value 值)。令牌用于给 chatgpt-next-web 使用,记录、控制权限等。&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;&lt;img data-src=&#34;https://npic.hitoli.com:8443/images/2025/02/16/2025-02-16-23-58-41.png&#34; alt=&#34;2025-02-16-23-58-41.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img data-src=&#34;https://npic.hitoli.com:8443/images/2025/02/17/2025-02-17-00-01-17.png&#34; alt=&#34;2025-02-17-00-01-17.png&#34; /&gt;&lt;/p&gt;
&lt;h5 id=&#34;安装chatgpt-next-web&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#安装chatgpt-next-web&#34;&gt;#&lt;/a&gt; 安装 chatgpt-next-web&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;1、端口&lt;br /&gt;
&lt;img data-src=&#34;https://npic.hitoli.com:8443/images/2025/02/17/2025-02-17-00-02-14.png&#34; alt=&#34;2025-02-17-00-02-14.png&#34; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2、环境&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;note info&#34;&gt;
&lt;p&gt;参数 OPENAI_API_KEY 的值填 one-api 令牌页面复制的值。再增加一个 BASE_URL 参数,值为 one-api 的地址(极空间 ip+one-api 的本地端口)&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;&lt;img data-src=&#34;https://npic.hitoli.com:8443/images/2025/02/17/2025-02-17-00-04-28.png&#34; alt=&#34;2025-02-17-00-04-28.png&#34; /&gt;&lt;br /&gt;
&lt;img data-src=&#34;https://npic.hitoli.com:8443/images/2025/02/17/2025-02-17-00-03-04.png&#34; alt=&#34;2025-02-17-00-03-04.png&#34; /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;3、对话&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;note info&#34;&gt;
&lt;p&gt;恭喜你,至此已经搭建完成。通过极空间 ip+chatgpt-next-web 的本地端口就可以开始和 DeepSeek 对话了。&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;&lt;img data-src=&#34;https://npic.hitoli.com:8443/images/2025/02/17/2025-02-17-00-06-07.png&#34; alt=&#34;2025-02-17-00-06-07.png&#34; /&gt;&lt;/p&gt;
&lt;h5 id=&#34;nginx-proxy-manager配置&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#nginx-proxy-manager配置&#34;&gt;#&lt;/a&gt; nginx proxy manager 配置&lt;/h5&gt;
&lt;div class=&#34;note info&#34;&gt;
&lt;p&gt;chatgpt-next-web 反代时需要在高级里加入以下代码,否则会报错。&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;&lt;figure class=&#34;highlight yaml&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;6&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;string&#34;&gt;location&lt;/span&gt; &lt;span class=&#34;string&#34;&gt;/&lt;/span&gt; &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;        &lt;span class=&#34;string&#34;&gt;proxy_pass&lt;/span&gt; &lt;span class=&#34;string&#34;&gt;http://极空间ip:chatgpt-next-web的本地端口;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; &lt;span class=&#34;string&#34;&gt;proxy_set_header&lt;/span&gt; &lt;span class=&#34;string&#34;&gt;Host&lt;/span&gt; &lt;span class=&#34;string&#34;&gt;$host;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;        &lt;span class=&#34;string&#34;&gt;proxy_set_header&lt;/span&gt; &lt;span class=&#34;string&#34;&gt;X-Forwarded-Host&lt;/span&gt; &lt;span class=&#34;string&#34;&gt;$host:8443(nginx&lt;/span&gt; &lt;span class=&#34;string&#34;&gt;proxy&lt;/span&gt; &lt;span class=&#34;string&#34;&gt;manager的ssl外网端口);&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; &lt;span class=&#34;string&#34;&gt;proxy_set_header&lt;/span&gt; &lt;span class=&#34;string&#34;&gt;X-Forwarded-Proto&lt;/span&gt; &lt;span class=&#34;string&#34;&gt;$scheme;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; &amp;#125;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;br /&gt;
最终成果&lt;br /&gt;
&lt;img data-src=&#34;https://npic.hitoli.com:8443/images/2025/02/16/0d5ddc77d244fcc4e1a60a1828eed054.png&#34; alt=&#34;0d5ddc77d244fcc4e1a60a1828eed054.png&#34; /&gt;&lt;/p&gt;
]]></description>
</item>
<item>
<guid isPermalink="true">https://hitoli.com/2024/09/29/dante-stunnel-clash-%E7%A7%91%E5%AD%A6%E4%B8%8A%E7%BD%91/</guid>
<title>dante+stunnel+clash 科学上网</title>
@@ -571,7 +647,7 @@ sudo passwd proxy&lt;br /&gt;
2、修改 /etc/squid/conf.d/debian.conf 文件&lt;br /&gt;
两种方式都一样,在底部加入以下代码&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;&lt;figure class=&#34;highlight yaml&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;14&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;15&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;16&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;17&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;18&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;19&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;20&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;21&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;22&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;23&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;24&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;25&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;26&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;27&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;28&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;29&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;30&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;31&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;32&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;33&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;34&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;35&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;36&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;37&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;38&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;39&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;40&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;comment&#34;&gt;#dns服务器地址&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;string&#34;&gt;dns_nameservers&lt;/span&gt; &lt;span class=&#34;number&#34;&gt;8.8&lt;/span&gt;&lt;span class=&#34;number&#34;&gt;.8&lt;/span&gt;&lt;span class=&#34;number&#34;&gt;.8&lt;/span&gt; &lt;span class=&#34;number&#34;&gt;8.8&lt;/span&gt;&lt;span class=&#34;number&#34;&gt;.4&lt;/span&gt;&lt;span class=&#34;number&#34;&gt;.4&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;string&#34;&gt;dns_v4_first&lt;/span&gt; &lt;span class=&#34;string&#34;&gt;on&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;comment&#34;&gt;# 监听端口&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;string&#34;&gt;http_port&lt;/span&gt; &lt;span class=&#34;number&#34;&gt;3128&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;comment&#34;&gt;# 定义squid密码文件与ncsa_auth文件位置&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;string&#34;&gt;auth_param&lt;/span&gt; &lt;span class=&#34;string&#34;&gt;basic&lt;/span&gt; &lt;span class=&#34;string&#34;&gt;program&lt;/span&gt; &lt;span class=&#34;string&#34;&gt;/usr/lib/squid/basic_ncsa_auth&lt;/span&gt; &lt;span class=&#34;string&#34;&gt;/etc/squid/squid_user.txt&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;comment&#34;&gt;# 认证进程的数量&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;string&#34;&gt;auth_param&lt;/span&gt; &lt;span class=&#34;string&#34;&gt;basic&lt;/span&gt; &lt;span class=&#34;string&#34;&gt;children&lt;/span&gt; &lt;span class=&#34;number&#34;&gt;15&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;comment&#34;&gt;# 认证对话框显示提示信息&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;string&#34;&gt;auth_param&lt;/span&gt; &lt;span class=&#34;string&#34;&gt;basic&lt;/span&gt; &lt;span class=&#34;string&#34;&gt;realm&lt;/span&gt; &lt;span class=&#34;string&#34;&gt;Squid&lt;/span&gt; &lt;span class=&#34;string&#34;&gt;proxy-caching&lt;/span&gt; &lt;span class=&#34;string&#34;&gt;web&lt;/span&gt; &lt;span class=&#34;string&#34;&gt;server&lt;/span&gt;&lt;/sLine truncated
&lt;p&gt;&lt;figure class=&#34;highlight yaml&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;14&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;15&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;16&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;17&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;18&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;19&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;20&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;21&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;22&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;23&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;24&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;25&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;26&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;27&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;28&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;29&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;30&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;31&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;32&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;33&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;34&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;35&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;36&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;37&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;38&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;39&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;40&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;41&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;42&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;43&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;44&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;45&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;46&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;47&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;48&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;49&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;50&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;51&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;52&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;53&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;54&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;55&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;comment&#34;&gt;#dns服务器地址&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;string&#34;&gt;dns_nameservers&lt;/span&gt; &lt;span class=&#34;number&#34;&gt;8.8&lt;/span&gt;&lt;span class=&#34;number&#34;&gt;.8&lt;/span&gt;&lt;span class=&#34;number&#34;&gt;.8&lt;/span&gt; &lt;span class=&#34;number&#34;&gt;8.8&lt;/span&gt;&lt;span class=&#34;number&#34;&gt;.4&lt;/span&gt;&lt;span class=&#34;number&#34;&gt;.4&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;string&#34;&gt;dns_v4_first&lt;/span&gt; &lt;span class=&#34;string&#34;&gt;on&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;comment&#34;&gt;# 监听端口&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;string&#34;&gt;http_port&lt;/span&gt; &lt;span class=&#34;number&#34;&gt;3128&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;comment&#34;&gt;# 定义squid密码文件与ncsa_auth文件位置&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;string&#34;&gt;auth_param&lt;/span&gt; &lt;span class=&#34;string&#34;&gt;basic&lt;/span&gt; &lt;span class=&#34;string&#34;&gt;program&lt;/span&gt; &lt;span class=&#34;string&#34;&gt;/usr/lib/squid/basic_ncsa_auth&lt;/span&gt; &lt;span class=&#34;string&#34;&gt;/etc/squid/squid_user.txt&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;comment&#34;&gt;# 认证进程的数量&lt;/span&Line truncated
&lt;div class=&#34;note primary&#34;&gt;
&lt;p&gt;至次已经可以通过填写安装 squid 的服务器 ip 加端口 3128 加用户名密码进行代理访问了(通过访问&lt;span class=&#34;blue&#34;&gt;&lt;span class=&#34;exturl&#34; data-url=&#34;aHR0cHM6Ly93d3cuaXAuY24v&#34;&gt; https://www.ip.cn/&lt;/span&gt;&lt;/span&gt; 查看 ip 就会发现自己的出口 ip 已经变成了 squid 服务器的 ip 了)。但是要想科学上网还必须对代理的数据进行加密,否则访问外网还是会被我国的长城防火墙阻挡,所以还需要安装 stunnel 来实现此目的。&lt;/p&gt;
&lt;/div&gt;
@@ -660,58 +736,6 @@ Lombok supports: OpenJDK javac, ECJ&lt;/p&gt;
&lt;img data-src=&#34;https://npic.hitoli.com:8443/images/2023/07/08/34bac08a5d10.png&#34; alt=&#34;&#34; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
]]></description>
</item>
<item>
<guid isPermalink="true">https://hitoli.com/2023/07/01/shoka%E4%B8%BB%E9%A2%98%E9%80%9F%E5%BA%A6%E4%BC%98%E5%8C%96-%E6%8B%86%E5%88%86jsdelivr/</guid>
<title>shoka主题速度优化-拆分jsdelivr</title>
<link>https://hitoli.com/2023/07/01/shoka%E4%B8%BB%E9%A2%98%E9%80%9F%E5%BA%A6%E4%BC%98%E5%8C%96-%E6%8B%86%E5%88%86jsdelivr/</link>
<category term="极空间" scheme="https://hitoli.com/categories/%E6%9E%81%E7%A9%BA%E9%97%B4/" />
<category term="Docker" scheme="https://hitoli.com/categories/%E6%9E%81%E7%A9%BA%E9%97%B4/Docker/" />
<category term="Hexo" scheme="https://hitoli.com/categories/%E6%9E%81%E7%A9%BA%E9%97%B4/Docker/Hexo/" />
<category term="Hexo" scheme="https://hitoli.com/tags/Hexo/" />
<category term="Shoka" scheme="https://hitoli.com/tags/Shoka/" />
<category term="jsdelivr" scheme="https://hitoli.com/tags/jsdelivr/" />
<pubDate>Sat, 01 Jul 2023 01:15:00 +0800</pubDate>
<description><![CDATA[ &lt;h4 id=&#34;前言&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#前言&#34;&gt;#&lt;/a&gt; 前言&lt;/h4&gt;
&lt;div class=&#34;note primary&#34;&gt;
&lt;p&gt;该篇文章介绍了如何对 shoka 主题进行 jsdelivr 聚合拆分,以便使用国内镜像源和异步加载,从而优化网站速度。具体操作包括更改模板、注册 helper 和更改配置。其中,推荐使用 advVendors 配置,可自定义加载源和 js 文件名,同时支持异步加载、pjax 刷新和 integrity 防 XXS 等特性。&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;众所周知,jsdelivr 在国内的速度可以用慢的一批来形容而 shoka 主题使用了 jsdelivr 的 combine 功能加载第三方 js, 而 combine 在国内没有镜像源并且阻断了使用 CDN 并发加速的道路,本篇博文会将 jsdelivr 聚合拆分为几个独立的 js, 以便使用国内镜像源和异步加载。&lt;/p&gt;
&lt;div class=&#34;note info&#34;&gt;
&lt;p&gt;此方案相较于本地化而言有较大速度优势,尤其在 CDN 并发加持下&lt;/p&gt;
&lt;/div&gt;
&lt;h4 id=&#34;拆分-jsdelivr&#34;&gt;&lt;a class=&#34;anchor&#34; href=&#34;#拆分-jsdelivr&#34;&gt;#&lt;/a&gt; 拆分 jsdelivr&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;更改模板&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;打开 &lt;span class=&#34;red&#34;&gt;shoka\layout\_partials\layout.njk&lt;/span&gt;,找到第 144 行左右:&lt;/p&gt;
&lt;p&gt;&lt;figure class=&#34;highlight html&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;4&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;tag&#34;&gt;&amp;lt;&lt;span class=&#34;name&#34;&gt;script&lt;/span&gt; &lt;span class=&#34;attr&#34;&gt;src&lt;/span&gt;=&lt;span class=&#34;string&#34;&gt;&amp;quot;https://cdn.polyfill.io/v3/polyfill.js&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;tag&#34;&gt;&amp;lt;/&lt;span class=&#34;name&#34;&gt;script&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;symbol&#34;&gt;&amp;amp;#123;&lt;/span&gt;&lt;span class=&#34;symbol&#34;&gt;&amp;amp;#123;&lt;/span&gt; _vendor_js() &lt;span class=&#34;symbol&#34;&gt;&amp;amp;#125;&lt;/span&gt;&lt;span class=&#34;symbol&#34;&gt;&amp;amp;#125;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;symbol&#34;&gt;&amp;amp;#123;&lt;/span&gt;&lt;span class=&#34;symbol&#34;&gt;&amp;amp;#123;&lt;/span&gt; _js(&amp;#x27;app.js&amp;#x27;) &lt;span class=&#34;symbol&#34;&gt;&amp;amp;#125;&lt;/span&gt;&lt;span class=&#34;symbol&#34;&gt;&amp;amp;#125;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;symbol&#34;&gt;&amp;amp;#123;&lt;/span&gt;&lt;span class=&#34;symbol&#34;&gt;&amp;amp;#123;&lt;/span&gt; partial(&amp;#x27;_partials/third-party/baidu-analytics.njk&amp;#x27;, &lt;span class=&#34;symbol&#34;&gt;&amp;amp;#123;&lt;/span&gt;&lt;span class=&#34;symbol&#34;&gt;&amp;amp;#125;&lt;/span&gt;, &lt;span class=&#34;symbol&#34;&gt;&amp;amp;#123;&lt;/span&gt;cache: true&lt;span class=&#34;symbol&#34;&gt;&amp;amp;#125;&lt;/span&gt;) &lt;span class=&#34;symbol&#34;&gt;&amp;amp;#125;&lt;/span&gt;&lt;span class=&#34;symbol&#34;&gt;&amp;amp;#125;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;/p&gt;
&lt;p&gt;更改为如下内容:&lt;/p&gt;
&lt;p&gt;&lt;figure class=&#34;highlight html&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;10&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;tag&#34;&gt;&amp;lt;&lt;span class=&#34;name&#34;&gt;script&lt;/span&gt; &lt;span class=&#34;attr&#34;&gt;src&lt;/span&gt;=&lt;span class=&#34;string&#34;&gt;&amp;quot;https://cdn.polyfill.io/v3/polyfill.js&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;tag&#34;&gt;&amp;lt;/&lt;span class=&#34;name&#34;&gt;script&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;symbol&#34;&gt;&amp;amp;#123;&lt;/span&gt;%- if theme.advVendors.enable %&lt;span class=&#34;symbol&#34;&gt;&amp;amp;#125;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; &lt;span class=&#34;symbol&#34;&gt;&amp;amp;#123;&lt;/span&gt;% for i in _list_vendor_js() %&lt;span class=&#34;symbol&#34;&gt;&amp;amp;#125;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; &lt;span class=&#34;symbol&#34;&gt;&amp;amp;#123;&lt;/span&gt;&lt;span class=&#34;symbol&#34;&gt;&amp;amp;#123;&lt;/span&gt; _adv_vendor_js(i) &lt;span class=&#34;symbol&#34;&gt;&amp;amp;#125;&lt;/span&gt;&lt;span class=&#34;symbol&#34;&gt;&amp;amp;#125;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; &lt;span class=&#34;symbol&#34;&gt;&amp;amp;#123;&lt;/span&gt;% endfor %&lt;span class=&#34;symbol&#34;&gt;&amp;amp;#125;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;symbol&#34;&gt;&amp;amp;#123;&lt;/span&gt;%- else %&lt;span class=&#34;symbol&#34;&gt;&amp;amp;#125;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;symbol&#34;&gt;&amp;amp;#123;&lt;/span&gt;&lt;span class=&#34;symbol&#34;&gt;&amp;amp;#123;&lt;/span&gt; _vendor_js() &lt;span class=&#34;symbol&#34;&gt;&amp;amp;#125;&lt;/span&gt;&lt;span class=&#34;symbol&#34;&gt;&amp;amp;#125;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;symbol&#34;&gt;&amp;amp;#123;&lt;/span&gt;%- endif %&lt;span class=&#34;symbol&#34;&gt;&amp;amp;#125;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;symbol&#34;&gt;&amp;amp;#123;&lt;/span&gt;&lt;span class=&#34;symbol&#34;&gt;&amp;amp;#123;&lt;/span&gt; _js(&amp;#x27;app.js&amp;#x27;)&lt;span class=&#34;symbol&#34;&gt;&amp;amp;#125;&lt;/span&gt;&lt;span class=&#34;symbol&#34;&gt;&amp;amp;#125;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;symbol&#34;&gt;&amp;amp;#123;&lt;/span&gt;&lt;span class=&#34;symbol&#34;&gt;&amp;amp;#123;&lt;/span&gt; partial(&amp;#x27;_partials/third-party/baidu-analytics.njk&amp;#x27;, &lt;span class=&#34;symbol&#34;&gt;&amp;amp;#123;&lt;/span&gt;&lt;span class=&#34;symbol&#34;&gt;&amp;amp;#125;&lt;/span&gt;, &lt;span class=&#34;symbol&#34;&gt;&amp;amp;#123;&lt;/span&gt;cache: true&lt;span class=&#34;symbol&#34;&gt;&amp;amp;#125;&lt;/span&gt;) &lt;span class=&#34;symbol&#34;&gt;&amp;amp;#125;&lt;/span&gt;&lt;span class=&#34;symbol&#34;&gt;&amp;amp;#125;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;/p&gt;
&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;注册 helper&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;打开 &lt;span class=&#34;red&#34;&gt;shoka\scripts\helpers\asset.js&lt;/span&gt;, 最后一行新建空行,增加如下内容:&lt;/p&gt;
&lt;p&gt;&lt;figure class=&#34;highlight javascript&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;14&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;15&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;16&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;17&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;18&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;19&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;20&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;21&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;22&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;23&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;24&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;25&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;26&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;27&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;28&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;29&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;30&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;31&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;hexo.&lt;span class=&#34;property&#34;&gt;extend&lt;/span&gt;.&lt;span class=&#34;property&#34;&gt;helper&lt;/span&gt;.&lt;span class=&#34;title function_&#34;&gt;register&lt;/span&gt;(&lt;span class=&#34;string&#34;&gt;&amp;#x27;_list_vendor_js&amp;#x27;&lt;/span&gt;, &lt;span class=&#34;function&#34;&gt;() =&amp;gt;&lt;/span&gt; &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; &lt;span class=&#34;keyword&#34;&gt;return&lt;/span&gt; hexo.&lt;span class=&#34;property&#34;&gt;theme&lt;/span&gt;.&lt;span class=&#34;property&#34;&gt;config&lt;/span&gt;.&lt;span class=&#34;property&#34;&gt;vendorsList&lt;/span&gt;.&lt;span class=&#34;property&#34;&gt;js&lt;/span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;&amp;#125;);&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;hexo.&lt;span class=&#34;property&#34;&gt;extend&lt;/span&gt;.&lt;span class=&#34;property&#34;&gt;helper&lt;/span&gt;.&lt;span class=&#34;title function_&#34;&gt;register&lt;/span&gt;(&lt;span class=&#34;string&#34;&gt;&amp;#x27;_adv_vendor_js&amp;#x27;&lt;/span&gt;, &lt;span class=&#34;keyword&#34;&gt;function&lt;/span&gt; (&lt;span class=&#34;params&#34;&gt;js_name&lt;/span&gt;) &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; &lt;span class=&#34;keyword&#34;&gt;const&lt;/span&gt; config = hexo.&lt;span class=&#34;property&#34;&gt;theme&lt;/span&gt;.&lt;span class=&#34;property&#34;&gt;config&lt;/span&gt;.&lt;span class=&#34;property&#34;&gt;advVendors&lt;/span&gt;.&lt;span class=&#34;property&#34;&gt;js&lt;/span&gt;[js_name];&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; &lt;span class=&#34;keyword&#34;&gt;const&lt;/span&gt; src = config[&lt;span class=&#34;string&#34;&gt;&amp;quot;src&amp;quot;&lt;/span&gt;];&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; &lt;span class=&#34;keyword&#34;&gt;let&lt;/span&gt; result;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; &lt;span class=&#34;keyword&#34;&gt;if&lt;/span&gt; (src.&lt;span class=&#34;title function_&#34;&gt;indexOf&lt;/span&gt;(&lt;span class=&#34;string&#34;&gt;&amp;quot;http&amp;quot;&lt;/span&gt;) !== -&lt;span class=&#34;number&#34;&gt;1&lt;/span&gt;) &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; result = src;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; &amp;#125; &lt;span class=&#34;keyword&#34;&gt;else&lt;/span&gt; &lt;span class=&#34;keyword&#34;&gt;if&lt;/span&gt; (src.&lt;span class=&#34;title function_&#34;&gt;indexOf&lt;/span&gt;(&lt;span class=&#34;string&#34;&gt;&amp;quot;combine&amp;quot;&lt;/span&gt;) !== -&lt;span class=&#34;number&#34;&gt;1&lt;/span&gt;) &amp;#123;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; &lt;span class=&#34;variable language_&#34;&gt;console&lt;/span&gt;.&lt;span class=&#34;title function_&#34;&gt;log&lt;/span&gt;(&lt;span class=&#34;string&#34;&gt;&amp;quot;The cLine truncated
&lt;ol start=&#34;3&#34;&gt;
&lt;li&gt;更改配置&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;在 shoka 目录下 &lt;span class=&#34;red&#34;&gt;_config.yml&lt;/span&gt; 增加如下内容:&lt;/p&gt;
&lt;div class=&#34;note info&#34;&gt;
&lt;p&gt;推荐内容,可根据自己情况更改&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;&lt;figure class=&#34;highlight yaml&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;14&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;15&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;16&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;17&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;18&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;19&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;20&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;21&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;22&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;23&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;24&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;25&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;26&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;27&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;28&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;29&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;30&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;31&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;32&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;33&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;34&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;35&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;36&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;37&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;38&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;39&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;40&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;41&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;42&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;43&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;44&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;45&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;46&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;47&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;attr&#34;&gt;advVendors:&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; &lt;span class=&#34;attr&#34;&gt;enable:&lt;/span&gt; &lt;span class=&#34;literal&#34;&gt;true&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; &lt;span class=&#34;attr&#34;&gt;github:&lt;/span&gt; &lt;span class=&#34;string&#34;&gt;&amp;quot;https://cdn.jsdelivr.net/gh/&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; &lt;span class=&#34;attr&#34;&gt;combine:&lt;/span&gt; &lt;span class=&#34;string&#34;&gt;&amp;quot;https://cdn.jsdelivr.net/&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; &lt;span class=&#34;attr&#34;&gt;npm:&lt;/span&gt; &lt;span class=&#34;string&#34;&gt;&amp;quot;https://unpkg.com/&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; &lt;span class=&#34;attr&#34;&gt;js:&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; &lt;span class=&#34;attr&#34;&gt;pace:&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; &lt;span class=&#34;attr&#34;&gt;src:&lt;/span&gt; &lt;span class=&#34;string&#34;&gt;https://lf9-cdn-tos.bytecdntp.com/cdn/expire-1-M/pace/1.0.2/pace.min.js&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; &lt;span class=&#34;attr&#34;&gt;pjax:&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; &lt;span class=&#34;attr&#34;&gt;src:&lt;/span&gt; &lt;span class=&#34;string&#34;&gt;https://lib.baomitu.com/pjax/0.2.8/pjax.min.js&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; &lt;span class=&#34;attr&#34;&gt;fetch:&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; &lt;span class=&#34;attr&#34;&gt;src:&lt;/span&gt; &lt;span class=&#34;string&#34;&gt;npm/whatwg-fetch@3.4.0/dist/fetch.umd.js&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; &lt;span class=&#34;attr&#34;&gt;anime:&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&Line truncated
&lt;p&gt;下面为结构详解:&lt;/p&gt;
&lt;p&gt;&lt;figure class=&#34;highlight yaml&#34;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#34;gutter&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;14&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;15&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;16&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#34;code&#34;&gt;&lt;pre&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;attr&#34;&gt;advVendors:&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; &lt;span class=&#34;attr&#34;&gt;enable:&lt;/span&gt; &lt;span class=&#34;literal&#34;&gt;true&lt;/span&gt; &lt;span class=&#34;comment&#34;&gt;#是否开启,关闭使用主题默认加载&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; &lt;span class=&#34;attr&#34;&gt;github:&lt;/span&gt; &lt;span class=&#34;comment&#34;&gt;#github 使用的加载源,需要协议头和末尾斜杠&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; &lt;span class=&#34;attr&#34;&gt;combine:&lt;/span&gt; &lt;span class=&#34;comment&#34;&gt;#聚合 js 使用的加载源 (不建议使用)&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; &lt;span class=&#34;attr&#34;&gt;npm:&lt;/span&gt; &lt;span class=&#34;comment&#34;&gt;#npm 的加载源&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; &lt;span class=&#34;attr&#34;&gt;js:&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; &lt;span class=&#34;attr&#34;&gt;jspackage:&lt;/span&gt; &lt;span class=&#34;comment&#34;&gt;#js 名,可以与文件名不一致&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; &lt;span class=&#34;attr&#34;&gt;src:&lt;/span&gt; &lt;span class=&#34;string&#34;&gt;&amp;quot;资源地址,详情见后面&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; &lt;span class=&#34;comment&#34;&gt;# async: true 异步加载此 js&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; &lt;span class=&#34;comment&#34;&gt;# data-pjax: true 在 pjax 加载时刷新此 js&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; &lt;span class=&#34;comment&#34;&gt;# hash-value: 这个资源的 integrity 值,用于防 XXS&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; &lt;span class=&#34;comment&#34;&gt;# deferLoad: true 使用动态 DOM 节点添加延迟 js 加载 (实验性)&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;attr&#34;&gt;vendorsList:&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; &lt;span class=&#34;attr&#34;&gt;js:&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&#34;line&#34;&gt; &lt;span class=&#34;bullet&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;string&#34;&gt;jspackage&lt;/span&gt; &lt;span class=&#34;comment&#34;&gt;#与上方 jspackage 一致即可&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;/p&gt;
&lt;p&gt;资源地址格式如下:&lt;/p&gt;
&lt;p&gt;&lt;span class=&#34;red&#34;&gt;&lt;span class=&#34;exturl&#34; data-url=&#34;aHR0cHM6Ly9leGFtcGxlLmNvbS94eHguanM=&#34;&gt;https://example.com/xxx.js&lt;/span&gt;&lt;/span&gt; 使用 http (s) 地址加载 js&lt;br /&gt;
&lt;span class=&#34;red&#34;&gt;combine/xxx.js,xxx.js&lt;/span&gt; 使用 jsdelivr 的 combine 功能加载 (不推荐)&lt;br /&gt;
&lt;span class=&#34;red&#34;&gt;npm/xxx/xxx.js&lt;/span&gt; 使用 npm 源加载 js&lt;br /&gt;
&lt;span class=&#34;red&#34;&gt;gh/xxx/xxx.js&lt;/span&gt; 使用 gh 源加载 js&lt;br /&gt;
&lt;span class=&#34;red&#34;&gt;xxx.js&lt;/span&gt; 从本地加载 js&lt;br /&gt;
优先级如下:&lt;br /&gt;
&lt;span class=&#34;red&#34;&gt;http&amp;gt;combine&amp;gt;npm&amp;gt;gh &amp;gt; 本地&lt;/span&gt;&lt;/p&gt;
]]></description>
</item>
</channel>