# 第三方支持 ## PWA 如果你想要使网站支持 PWA 特性,需要安装插件 [hexo-pwa](https://github.com/lavas-project/hexo-pwa),该插件可以使你的网站具有以下功能: - [Web App Manifest](https://developer.mozilla.org/en-US/docs/Web/Manifest) - 用户可以将您的站点添加到移动主屏幕 - [Service Worker](https://developers.google.com/web/fundamentals/primers/service-workers/) - 让您的网站离线可用 使用步骤如下: 1. 安装插件 ```bash $ npm install --save hexo-pwa ``` 2. 配置插件 找到 Hexo 根目录下的 `_config.yml` 文件,添加以下字段: ``` yaml pwa: manifest: # Manifest 文件名和路径 path: /manifest.json serviceWorker: # Service Worker 的文件名和路径 path: /sw.js # 在 / 路径(首页)下,预加载的文章数 preload: urls: - / posts: 5 # 具体请查看:https://googlechromelabs.github.io/sw-toolbox/api.html#options opts: # 网络请求超时自动返回到缓存过的响应的时间 networkTimeoutSeconds: 5 routes: # 缓存你的静态资源,例如你使用了 webp 格式的图片,将其添加进去 - pattern: !!js/regexp /.*\.(js|css|html|jpg|jpeg|png|svg|gif|json|xml|eot|ttf|woff|woff2)$/ # 缓存策略,可选值:cacheFirst, networkFirst, cacheOnly, networkOnly, fastest # 每个值的具体含义请查看:https://googlechromelabs.github.io/sw-toolbox/api.html#handlers strategy: cacheFirst - pattern: !!js/regexp /\// strategy: networkFirst # 如果你想缓存 CDN 资源,请像下面这样进行设置 - pattern: !!js/regexp /cdn.jsdelivr.net/ strategy: cacheFirst # Hexo 插件的优先级,默认为 10 priority: 5 ``` 有关插件的详尽信息,请查看插件的[文档](https://github.com/lavas-project/hexo-pwa)。 3. 修改主题配置 修改主题配置文件: ```yaml pwa: # 是否启用 enable: true manifest: /manifest.json theme_color: "#54bcff" ``` 4. 创建 `manifest.json` 文件 你可以通过 [Web App Manifest](https://app-manifest.firebaseapp.com/) 网站来快速生成 `manifest.json` 文件。`manifest.json` 文件的内容如下: ```json { "name": "xxx", // 应用全称 "short_name": "xxx", // 应用简称 "theme_color": "#ffffff", // 匹配浏览器的地址栏颜色 "background_color": "#ffffff", // 加载应用时的背景色 "display": "standalone", // 首选显示模式。其他选项有:fullscreen, minimal-ui, browser "scope": "/", "start_url": "/", "icons": [ // 该数组指定图标参数,用来适配不同设备(格式为 png,至少包含一个 192px*192px 的图标) { "src": "images/icons/favicon-48x48.png", // 图标文件的路径,需在 source/ 目录下自行创建 "sizes": "48x48", "type": "image/png" }, { "src": "images/icons/favicon-72x72.png", "sizes": "72x72", "type": "image/png" }, { "src": "images/icons/favicon-96x96.png", "sizes": "96x96", "type": "image/png" }, { "src": "images/icons/favicon-144x144.png", "sizes": "144x144", "type": "image/png" }, { "src": "images/icons/favicon-192x192.png", "sizes": "192x192", "type": "image/png" } ], "splash_pages": null // 配置自定义启动动画。 } ``` 5. 重启 Hexo 服务器 ```bash $ hexo clean && hexo s ``` ## 启用 Quicklink 如果想要使用 [quicklink](https://github.com/GoogleChromeLabs/quicklink/),使浏览器在空闲时间预取可视区内的链接,以加快后续页面的加载速度。你需要按照如下步骤设置: 1. 修改主题配置文件 ``` yaml quicklink: # 是否启用。这里启用之后并不会对所有页面生效,你还需要进行下面的设置 enable: true # 设置 home 页面和 archive 页面是否启用 home: true archive: true # 当浏览器 load 事件触发后,开始初始化 quicklink delay: true # 自定义一个时间,必须进行预取。这里默认 10s timeout: 10000 # 启用 fetch() 或回退到 XHR priority: true # 设置忽略预取的链接类型 # !!如果你不懂,请忽略这一项!! # 例如: # ignores: # - /\/api\/?/ # - uri => uri.includes('.zip') # - (uri, el) => el.hasAttribute('nofollow') ignores: ``` 2. 添加 `Front-Matter` 上一步只是设置了 home 页面和 archive 页面是否启用 quicklink,对于其他页面或文章,你必须手动设置:在页面或文章的 markdown 文件的 `Front-Matter` 中,添加 `quicklink: true`。 ## 添加 Emoji 支持 如果想要使用 Emoji,你可以直接在[这里](http://emojihomepage.com/)复制粘贴使用。 如果你更喜欢使用 Emoji 代码,例如:将 `:sparkles:` 解析为 :sparkles:, 那么你需要安装插件 [hexo-filter-github-emojis](https://github.com/crimx/hexo-filter-github-emojis) 来支持这种语法。 使用步骤如下: 1. 安装插件 在 Hexo 根目录下,执行指令: ```bash $ npm install hexo-filter-github-emojis --save ``` 2. 重启 Hexo 服务器 ```bash $ hexo clean && hexo s ``` 如果你不喜欢 `::` 的语法,你可以使用下面这种方法代替: ```text {% github_emoji sparkles %} ``` 如果你需要某个 markdown 文件不解析这种语法,可以在 markdown 文件里的 `front-matter` 中,设置 `no-emoji: true`。这样 `::` 会保持原来的样子。 ```yaml --- title: Hello World no-emoji: true --- ``` 有关该插件的更详尽的用法,请自行查阅其[文档](https://github.com/crimx/hexo-filter-github-emojis)。查看所有支持的 Emoji 请访问:[Github Emojis API](https://api.github.com/emojis) 或者 [Emoji Cheat Sheet](http://www.webpagefx.com/tools/emoji-cheat-sheet/)。 > 你也可以通过更换 markdown 渲染器 `hexo-renderer-markdown-it-plus` 来支持 Emoji。详情请看:[https://github.com/CHENXCHEN/hexo-renderer-markdown-it-plus](https://github.com/CHENXCHEN/hexo-renderer-markdown-it-plus)。 ## 评论系统 ### Gitment 首先,你需要注册一个新的 **GitHub Application** 来授权,点击[这里](https://github.com/settings/applications/new)注册。这样可以获取所需的 `client ID` 和 `client secret`。 ::: warning 注意 您必须在 `Authorization callback URL` 字段中指定网站的 URL。 ::: 然后修改 `stun.yml`: ```yaml gitment: # 是否启用 enable: false # Github 用户名 owner: # Github 仓库名(需要是公开的仓库) repo: # Github 应用程序客户端 ID client_id: # Github 应用程序客户端密钥 client_secret: # 是否启用懒加载(如果启用,只有手动点击显示按钮才会显示评论) lazy: false ``` 如果你遇到了问题,请查看 Gitment 的文档:[https://github.com/imsun/gitment](https://github.com/imsun/gitment) ### Gitalk 首先,你需要注册一个新的 **GitHub Application** 来授权,点击[这里](https://github.com/settings/applications/new)注册。这样可以获取所需的 `client ID` 和 `client secret`。 ::: warning 注意 您必须在 `Authorization callback URL` 字段中指定网站的 URL。 ::: ```yaml gitalk: # 是否启用 enable: false # Github 用户名 owner: # Github 仓库名(需要是公开的仓库) repo: # Github 应用程序客户端 ID client_id: # Github 应用程序客户端密钥 client_secret: # GitHub 仓库所有者和合作者,只有这些人可以初始化 Gitalk admin: # 类似于 B 站的关灯模式 distraction_free_mode: true # 如果你想让每一个参观你网站的人看到统一的语言,你可以在这里设置, # 可选值:en, zh-CN, es-ES, fr, ru, zh-TW language: ``` 如果你遇到了问题,请查看 Gitalk 的文档:[https://github.com/gitalk/gitalk](https://github.com/gitalk/gitalk) ### Valine Valine 评论系统依赖于 LeanCloud,所以你需要[登录](https://leancloud.cn/dashboard/login.html#/signin)或[注册](https://leancloud.cn/dashboard/login.html#/signup) LeanCloud,获取 `APP ID` 和 `APP Key`。详细步骤,请查看:[https://valine.js.org/quickstart.html](https://valine.js.org/quickstart.html) ```yaml valine: enable: false # 你的 LeanCloud app appid appid: # 你的 LeanCloud app appkey appkey: # 是否启用评论回复邮件提醒 notify: true # 是否启用评论验证码 verify: true # 评论框占位提示符 placeholder: Just go go # Gravatar 头像展示方式 avatar: mp # 评论者相关属性(默认:昵称、邮件、网址) meta: nick,mail,link # 评论列表分页,每页条数 pageSize: 10 # 是否启用文章访问量统计 visitor: false # 是否记录评论者IP recordIP: false # 多语言支持,可选值:zh-cn, en language: ``` 完成上述步骤之后,你还需要在 LeanCloud 中新建 或 选择一个名为 `Comment` 的 Class 才能使用 Valine。详细步骤,请查看:[https://valine.js.org/quickstart.html#评论数据管理](https://valine.js.org/quickstart.html#评论数据管理) ### Livere(来必力) 进入来必力[官网](https://livere.com/)注册账号,登录,点击安装,选择合适的版本后,会显示安装代码,在代码中可以找到你的 `uid`,例如: ```html
``` 然后将 `uid` 填入主题的配置文件即可: ```yaml livere: enable: false uid: ``` ### Disqus 进入 Disqus [官网](https://disqus.com/)注册账号,登录,点击 `I want to install Disqus on my site`,在 `Website Name` 字段中,输入你的网站的名称(可以是任意的),然后选择好 `Category` 和 `Language` 字段后,点击 `Create Site`。 这里输入的网站名称,就是你的 `shortname`,将其填入主题的配置文件即可: ```yaml disqus: enable: false shortname: # 是否显示文章的评论数 count: true ``` ## 统计与分析 ### 卜蒜子统计 修改主题配置文件: ```yaml busuanzi: # 是否启用 enable: false site: # 是否只显示图标 icon_only: false # 统计站点 UV 数量 # 关于 UV 和 PV 的概念:https://zhuanlan.zhihu.com/p/27672009/ uv: # 是否启用 enable: true # FontAwesome 图标名称: https://fontawesome.com/v4.7.0/icons/ icon: user # 统计站点 PV 数量 pv: # 是否启用 enable: true # FontAwesome 图标名称 icon: eye # 统计每篇文章的 PV 数量 post_pv: # 是否只显示图标 icon_only: false # 是否启用 enable: true # FontAwesome 图标名称 icon: eye ``` ## 搜索系统 ### Algolia 搜索 如果你想使用 Algolia 搜索的话,并不会像其他配置那样,修改一下配置项就好了。你需要按照以下步骤进行配置: 1. 登录官网 访问 [Algolia 官网](https://www.algolia.com/),可以注册一个账号登录,也可以使用 Github 账号或者 Google 账号登录。 2. 进入 `Indices` 页面 点击 `Create Index`,然后输入 `Index name`(可以是任意字符)。 ![](https://raw.githubusercontent.com/liuyib/picBed/master/hexo-theme-stun/doc/20190711194035.png) 3. 进入 API Keys 页面 你会看到 `Application ID` 和 `Search-Only API Key`,将它们保存下来,在后面的设置中会用到。 ![](https://raw.githubusercontent.com/liuyib/picBed/master/hexo-theme-stun/doc/20190711194037.png) ::: danger 注意,这里一定不要使用 `Admin API Key` 作为你的 API Key,更不要将其写入你的配置文件。 ::: 点击 `ALL API KEYS` 和 `edit` 选项。这样会弹出一个框,在这个框中,你可以进行精确的授权和控制。 ![](https://raw.githubusercontent.com/liuyib/picBed/master/hexo-theme-stun/doc/20190711194036.png) 在弹出框底部的 `ACl` 选项中,勾选 `search`,`addObject`,`deleteIndex`,`listIndexes`,`deleteObject`。最后,点击 `Update` 按钮。 ![](https://raw.githubusercontent.com/liuyib/picBed/master/hexo-theme-stun/doc/20190711194038.png) 4. 修改 Hexo 配置 修改 Hexo 根目录下的 `_config.yml` 文件,添加 `applicationID` & `apiKey` & `indexName` 选项。 ```yaml algolia: applicationID: '填入你的 Application ID' apiKey: '填入你的 Search-only API key' indexName: '填入你的 indexName' ``` 5. 安装 Algolia 模块 Algolia 要求用户手动通过提供的 API 上传它们的搜索数据。在 Hexo 根目录中安装 `hexo-algolia`。这个插件将会搜索你的网站并将数据上传到 Algolia。 ```bash $ npm install --save hexo-algolia ``` 运行下面这些指令,上传索引数据。 ```bash $ export HEXO_ALGOLIA_INDEXING_KEY=你的Search-Only API key # 在 Git Bash 中使用这条指令 # set HEXO_ALGOLIA_INDEXING_KEY=你的Search-Only API key # 在 Windows 命令行中使用这条指令 $ hexo clean $ hexo algolia ``` ::: tip 1. 每次添加新的文章后,都需要运行上面这三条指令来更新你的索引数据,否则,将无法搜索到。 2. 如果你发现搜索到的结果有重复的或者有旧的数据,你需要去 Algolia 官网,清除上传的数据,然后执行上面这三条指令,重新上传索引数据即可。 ::: 6. 修改主题配置 修改你的主题配置文件: ```yaml algolia_search: # 是否启用 enable: false hits: # 每一页显示的搜索结果数量 per_page: 10 labels: # 是否显示搜索结果的统计信息 show_stats: true ``` 7. 重启 Hexo 服务器。 ```bash $ hexo clean && hexo s ``` 到这里不出意外的话,你就可以使用 Algolia 搜索网站里的文章标题了。 ### 本地搜索 从 `v1.2.1` 版本开始,Stun 原生支持本地搜索功能,和 Algolia 相比,该功能的好处如下: - 搜索次数无限制 - 支持多关键词搜素(在搜索框中,用空格将关键词隔开) - 既能搜索文章标题,又能搜索文章内容 - 搜索速度快 想启用这一功能,首先需要安装插件 [hexo-generator-search](https://github.com/wzpan/hexo-generator-search),这个插件用来**将网站的文章信息生成索引数据**。 使用步骤如下: 1. 安装插件 在 Hexo 根目录下执行指令: ```bash $ npm install hexo-generator-search --save ``` 2. 配置插件 找到 Hexo 根目录下的 `_config.yml` 文件,添加以下字段: ```yaml search: path: search.json field: post content: true ``` 有关插件的详尽信息和上述参数的含义,请查看插件的[文档](https://github.com/wzpan/hexo-generator-search)。 3. 生成数据 安装上述插件后,在 Hexo 根目录下执行指令: ```bash $ hexo g ``` 这样会在你网站根目录下的 `public` 的文件夹中,生成 `search.json` 文件,Stun 主题的本地搜索功能就是利用这个文件里的数据实现的。 4. 修改主题配置 修改主题配置文件: ```yaml local_search: # 是否启用 enable: true ``` 5. 重启 Hexo 服务器 ```bash $ hexo clean && hexo s ``` ## 数学公式 想要解析页面中的数学公式,首先,你需要修改主题配置文件,启用该功能,并选择解析引擎(默认是 katex 引擎): ```yaml math: # 是否启用 enable: true # 如果设为 true,将会为每一个页面启用该功能 # 如果设为 false,只有在 `Front-matter` 中设置了 `math: true` 的页面,才会启用该功能 per_page: false # 解析引擎,可选值:mathjax 或 katex(全小写) engine: katex ``` 然后,你需要根据下面 MathJax 或 KaTex 的说明进一步配置。 ::: tip MathJax 与 KaTex 相比之下,[KaTex 引擎速度更快](https://www.intmath.com/cg5/katex-mathjax-comparison.php),但 [KaTex 支持的语法更少](https://github.com/KaTeX/KaTeX/wiki/Things-that-KaTeX-does-not-%28yet%29-support),这里是 [KaTex 所支持的所有语法](https://katex.org/docs/supported.html)。 ::: ### MathJax 使用 mathjax 作为引擎,首先,你需要更换一个支持 MathJax 的 markdown 渲染器: - [hexo-renderer-kramed](https://github.com/sun11/hexo-renderer-kramed) - [hexo-renderer-pandoc](https://github.com/wzpan/hexo-renderer-pandoc) 两者选择其一即可。 1. 安装,执行指令。 ```bash # 卸载原来的渲染器 $ npm un hexo-renderer-marked --save # 安装新的渲染器 $ npm i hexo-renderer-kramed --save # 或 npm i hexo-renderer-pandoc --save ``` 2. 在主题配置文件中,选择 mathjax 引擎。 ```yaml math: ... # 全小写 engine: mathjax ``` 3. 重启 Hexo 服务器。 ```bash $ hexo clean && hexo s ``` ### KaTex 使用 katex 作为引擎,不需要引入 `katex.min.js`。相应的,你只需要更换一个支持 KaTex 的 markdown 渲染器。 首先,卸载原来的 markdown 渲染器,例如: ```bash $ npm un hexo-renderer-marked --save # 或 $ npm un hexo-renderer-kramed --save # 或 $ npm un hexo-renderer-pandoc --save # 以及 $ npm un hexo-math --save ``` 如果你安装过这些,都需要卸载。你可以到 Hexo 根目录下的 `package.json` 文件中,查看安装了哪些插件。然后,安装新的 markdown 渲染器: - [hexo-renderer-markdown-it-plus](https://github.com/CHENXCHEN/hexo-renderer-markdown-it-plus) - [hexo-renderer-markdown-it](https://github.com/hexojs/hexo-renderer-markdown-it) 两者选择其一即可。 - 如果你选择 `hexo-renderer-markdown-it-plus` 作为渲染器。 1. 安装,执行指令。 ```bash $ npm i hexo-renderer-markdown-it-plus --save ``` 2. 在主题配置文件中,选择 katex 引擎。 ```yaml math: ... engine: katex ``` 3. 重启 hexo 服务器。 ```bash $ hexo clean && hexo s ``` - 如果你选择 `hexo-renderer-markdown-it` 作为渲染器。 你需要额外安装 `markdown-it-katex`。 1. 安装,执行指令。 ```bash $ npm i hexo-renderer-markdown-it --save $ npm i markdown-it-katex --save ``` 2. 修改站点配置文件 添加 或 修改 `hexo-renderer-markdown-it` 的配置项。 ```yaml markdown: render: html: true xhtmlOut: false breaks: true linkify: true typographer: true quotes: '“”‘’' plugins: - markdown-it-katex ``` 有关 `hexo-renderer-markdown-it` 所有的配置项,在[这里](https://github.com/hexojs/hexo-renderer-markdown-it/wiki/Advanced-Configuration#all-options-configuration)查看。 3. 选择 katex 引擎 和 重启 Hexo 服务器的步骤同上。 ### 相关插件 Stun 主题默认提供了一些 MathJax 和 Katex 的插件。 - mhchem mhchem 是 MathJax 的插件,你可以使用这个插件来渲染化学方程式。详情请看:[MathJax/mhchem Manual](https://mhchem.github.io/MathJax-mhchem/)。 - Copy-tex Copy-tex 是 KaTex 的插件,当启用这个插件之后,你只需要单击公式即可复制其源码。详情请看:[Copy-tex extension](https://github.com/KaTeX/KaTeX/tree/master/contrib/copy-tex)。 效果如下: ![](https://raw.githubusercontent.com/liuyib/picBed/master/hexo-theme-stun/doc/20190720153859.gif) ### 如何使用 按照上述步骤配置之后,你就可以在 markdown 源文件中,使用数学公式了。使用 `$$...$$` 包裹的字符,即可被识别为数学公式,但是会另起一行来显示。如果想要公式和文字在同一行显示,需要使用 `$...$` 来包括字符。 效果如下: ![](https://raw.githubusercontent.com/liuyib/picBed/master/hexo-theme-stun/doc/20190720160555.png) ## 广告 ### 谷歌广告 首先登录谷歌广告[官网](https://www.google.com/adsense),选择添加广告,在给你的一段代码中找到 `client_id`,通常以 `ca-pub-` 开头。然后修改主题配置文件: ```yaml google_adsense: # 是否启用 enable: false # 如果和你的代码中的地址不一样,请更换 js_src: https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js # 填写你的 client-id client: enable_page_level_ads: true ``` ## 特效 ### Ribbon 修改主题配置文件: ```yaml canvas_ribbon: # 是否启用 enable: false # ribbon 的宽度 size: 300 # ribbon 的透明度 alpha: 0.6 # ribbon 的层级 zIndex: -1 ``` 效果如下: ![](https://raw.githubusercontent.com/liuyib/picBed/master/hexo-theme-stun/doc/20190725220144.png) ### Particle / Nest 修改主题配置文件: ```yaml canvas_nest: # 是否启用 enable: false # 是否在移动端显示 onmobile: true # 线条的颜色(RGB 值,请使用 "," 分隔) color: '0,0,0' # 线条的透明度 opacity: 0.6 # 线条数目 count: 99 # 效果的层级 zIndex: -1 ``` 效果如下: ![](https://raw.githubusercontent.com/liuyib/picBed/master/hexo-theme-stun/doc/20190725220344.png)