Hexo 优化配置汇总【GitHub Actions 看板娘 数学公式 标签云 README 转义问题】

简介: Hexo 优化配置汇总【GitHub Actions 看板娘 数学公式 标签云 README 转义问题】

文章目录

GitHub Actions 自动化部署

本文最具价值的配置莫过于此,没有用到 GitHub Actions 前,每次发文需要将 markdown 文件放入 _post 文件夹下,然后执行 hexo clean && hexo g && hexo s && hexo g一连串命令,执行无报错还好说,万一本地环境出现错误,还得花时间找错,非常麻烦

使用 GitHub Actions 后,发文只需要在博客的源文件仓库中拖拽源文件或者 push 源文件到仓库,GitHub Actions 即可监测仓库状态,自动执行部署操作到指定位置,不必担心本地环境出错等系列问题

效果 预览地址

有关介绍和详细令牌、密钥配置请 参考此处,以下主要是 .github/workflows/deploy.yml文件 的配置

# Action's Name
name: AutoDeploy
on:
  # Triggering Condition 1 Main Branch Performs The Task After Receiving Push
  push:
    branches:
      - master
  # Triggering Condition 2 Manual Button
  workflow_dispatch:
# Putting Environment Variables Here You Need To Replace It With Your Own
env:
  # After Hexo Compiles Use This Git User To Deploy To The Github Warehouse
  GIT_USER: PDPENG
  # After Hexo Compiles Use This Git Mailbox To Deploy To The Github Warehouse
  GIT_EMAIL: jason.peng.code@gmail.com
  # The Git Hub Warehouse To Be Deployed After Hexo Compiles
  GIT_DEPLOY_REPO: PDPENG/pdpeng.github.io
  # Hexo Compiles The Branch To Deploy After Compilation
  GIT_DEPLOY_BRANCH: master
  # After Hexo Compiles Use This Gitee User To Deploy To The Gitee Warehouse
  GITEE_USER: Coder-Jason
  # The Gitee Warehouse To Be Deployed After Hexo Compiles
  GITEE_DEPLOY_REPO: Coder-Jason/Coder-Jason
  # Hexo Compiles The Branch To Deploy After Compilation
  GITEE_DEPLOY_BRANCH: master
  # Pay Attention To Replacing Your Github Source Warehouse Address
  GIT_SOURCE_REPO: git@github.com:PDPENG/pdpeng.github.io.git
  # Pay Attention To Replacement To Your Gitee Target Warehouse Address
  GITEE_DESTINATION_REPO: git@gitee.com:Coder-Jason/coder-jason.git
jobs:
  build:
    name: Build on node ${{ matrix.node_version }} and ${{ matrix.os }}
    runs-on: ubuntu-latest
    if: github.event.repository.owner.id == github.event.sender.id
    strategy:
      matrix:
        os: [ubuntu-latest]
        node_version: [16.x]
    steps:
      - name: Checkout
        uses: actions/checkout@v2
      - name: Checkout deploy repo
        uses: actions/checkout@v2
        with:
          repository: ${{ env.GIT_DEPLOY_REPO }}
          ref: ${{ env.GIT_DEPLOY_BRANCH }}
          path: .deploy_git
      - name: Use Node.js ${{ matrix.node_version }}
        uses: actions/setup-node@v1
        with:
          node-version: ${{ matrix.node_version }}
      - name: Configuration environment
        env:
          HEXO_DEPLOY_PRI: ${{secrets.HEXO_DEPLOY_PRI}}
        run: |
          sudo timedatectl set-timezone "Asia/Shanghai"
          mkdir -p ~/.ssh/
          echo "$HEXO_DEPLOY_PRI" > ~/.ssh/id_rsa
          chmod 600 ~/.ssh/id_rsa
          ssh-keyscan -t rsa github.com >> ~/.ssh/known_hosts
          # coding Cancelled Synchronization
          ssh-keyscan -t rsa e.coding.net >> ~/.ssh/known_hosts
          ssh-keyscan -t rsa gitee.com >> ~/.ssh/known_hosts
          git config --global user.name $GIT_USER
          git config --global user.email $GIT_EMAIL
      - name: Install dependencies
        run: |
          npm install hexo-cli -g
      # Install According To The Components You Installed
         npm install - gulp gulp-uglify hexo hexo-deployer-git hexo-generator-archive hexo-generator-category hexo-generator-feed hexo-generator-index hexo-generator-search hexo-generator-searchdb hexo-generator-sitemap hexo-generator-tag hexo-leancloud-counter-security hexo-renderer-ejs hexo-renderer-marked hexo-renderer-pug hexo-renderer-stylus hexo-server hexo-tag-cloud hexo-word-counter readable-stream uglify-es --save
      - name: Deploy hexo
        run: |
          npm run deploy
      # The Following Is The Release To Gitee
      - name: Sync to Gitee
        uses: wearerequired/git-mirror-action@master
        env:
          # Using Hexo Deploy Pri Directly
          SSH_PRIVATE_KEY: ${{ secrets.HEXO_DEPLOY_PRI }}
        with:
          # GitHub Source Warehouse Address
          source-repo: ${{ env.GIT_SOURCE_REPO }}
          # Gitee Target Warehouse Address
          destination-repo: ${{ env.GITEE_DESTINATION_REPO }}
      - name: Build Gitee Pages
        uses: yanglbme/gitee-pages-action@main
        with:
          # Your Gitee Username
          gitee-username: ${{ env.GITEE_USER }}
          # Note At Settings Secrets Configuration Gitee Password
          gitee-password: ${{ secrets.GITEE_PASSWORD }}
          # Your Gitee Warehouse The Warehouse Name Is Strictly Distinguished Please Fill In It Accurately Otherwise There Will Be An Error
          gitee-repo: ${{ env.GITEE_DEPLOY_REPO }}
          # To Deploy Branches The Default Is Master If It Is Other Branches You Need To Specify The Specified Branch Must Exist
          branch: ${{ env.GITEE_DEPLOY_BRANCH }}

在配置完令牌及密钥后,可以直接复制 该文件 使用,如果仅需要同步 Github,则不必配置 Gitee 同步字段配置

杰森的仓库分布是

https://github.com/PDPENG/MyBlog 私有仓库 (actions 部署位置)
https://github.com/PDPENG/pdpeng.github.io 公共仓库 (actions 部署后推送的位置)

配置完成后,GitHub Actions 一旦检测到 MyBlog 仓库下的变动后,将会自动部署至 pdpeng.github.io 仓库

RSS 订阅按钮

这里默认您已经添加了 RSS 相关插件,站点已具备生成 atom.xml 文件能力

效果图,预览地址

将下面的代码

<html>
<head>
    <style>
        .rss-button div {
            display: block;
            margin-top: 5px;
            background-color: transparent;
            position: relative;
            font-family: 'Lato', "PingFang SC", "Microsoft YaHei", sans-serif;
            font-size: 14px;
            line-height: 2;
        }
        .feed-link a {
            display: inline-block;
            padding: 0 15px;
            color: #fc6423;
            border: 2px solid #fc6423;
            border-radius: 6px;
            text-decoration: none;
        }
        .feed-link a:hover {
            background-color: #fc6423;
            border-bottom-color: #fc6423;
            color: #fff;
        }
    </style>
</head>
<body class="rss-button">
    <div class="feed-link" title="RSS → /atom.xml">
        <a href="/atom.xml">
            <i class="fa fa-rss"> </i> RSS
        </a>
    </div>
</body>
</html>

插入到 MyBlog\themes\next\layout\_partials\sidebar\site-overview.njk 文件图示位置中

社交图标加入 CSDN

效果图,预览地址

Next 最新版的主题,没有找到引用阿里巴巴图标库的方法(总提示请求无效),如果你有不错的解决方案,欢迎评论区留言

这里给出一个和 CSDN 比较类似的图标

social:
  CSDN: https://blog.csdn.net/m0_51269961 || fa-solid fa-c

点击头像返回主页效果

这个比较简单,在头像的位置添加 <a></a> 标签就好。可能定位比较麻烦,文件位置是 MyBlog\themes\next\layout\_partials\sidebar\site-overview.njk

  {%- if theme.avatar.url %}
    <a href="/">
    <img class="site-author-image" itemprop="image" alt="{{ author }}"
      src="{{ url_for(theme.avatar.url) }}">
    </a>
  {%- endif %}

删除社交链接底部横线

效果图,预览地址

文件位置是MyBlog\themes\next\source\css\_schemes\Muse\_sidebar.styl ,找到 a 标签的 css 样式,添加 border-bottom 0px; 即可

加入看板娘

效果图,预览地址

如果你的站点开启了侧边栏 始终显示,在进行下述操作后,请隐藏侧边栏后查看效果

图示路径下

加入这段代码

<script src="/live2d-widget/autoload.js"></script>

然后在主题配置文件末尾加入下列配置项

# 自定义看板娘 https://github.com/PDPENG/live2d-widget
live2d:
  enable: true

效果即可显示


如果你需要更高级的自定义,可继续完成下面的配置

切换到主题的 source 文件夹下,克隆项目到本地(删除项目 .git 文件,避免推送报错),项目地址

git clone https://github.com/stevenjoezhang/live2d-widget

*注意:live2d_path 参数应使用 绝对路径

更多自定义配置参见,live2d-widget 自定义配置


自定义 404 页面

效果图,预览地址

之前部署在服务器时,站点是配置了 404 页面的,但是在 Github Pages 中只有访问 /404 时,才能定向到页面,并不能实现真正的 404 效果

查看了官方文档后,实现也比较容易,只需要在站点资源文件夹(source 目录下)添加 404.md404.html 即可

下面放上杰森的页面配置,供大家参考

---
title: 404
date: 2022-01-29 18:14:03
comments: false
layout: false
---
<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>页面走丢啦~</title>
  <link rel="shortcut icon" href="/images/favicon-32x32.png" type=image/x-icon>
</head>
<style type="text/css">
  .error{
    position: absolute;
    top:50%;
    margin-top:-250px;
    width:100%;
    height:400px;
    /*border:1px solid red;*/
    overflow: hidden;
  }
  .error img{
    display: block;
    margin:0 auto;
  }
  .error p{
    text-align: center;
    font-size: 16px ! important;
    font-weight: 600
  }
  .back{
    display: block;
    width:80px;
    text-align: center;
    margin:20px auto;
    padding:8px 0;
    border:1px solid #333;
    border-radius: 100px;
    cursor: pointer;
        text-decoration: none;
        color: #666;
  }
  .back:hover{
    color:#fff;
    background: #000000;
    border:0px solid #333;
  }
  /* base.css */
  body,html{
       height: 100%;
       width: 100%;
       min-width: 950px;
  }
  html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr, acronym,address,big,cite,code,del,dfn,em,font,img,ins,kbd,q,s,samp,small,strike, sub,sup,tt,var,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption, tbody,tfoot,thead,tr,th,td,p,span{
      align:baseline;
      background:transparent;
      margin: 0;
      padding:0;
      -moz-box-sizing:border-box; /* Firefox */
      -webkit-box-sizing:border-box; /* Safari */
      box-sizing:border-box;
      list-style-type:none;
      font-family: Microsoft YaHei,microsoft yahei ui,微软雅黑,SimSun,楷体,楷体_GB2312;
      font-size: 13px;
  }
  option,input,button,select,textarea{
      border:0;
      outline:none;
      appearance:none;
      -moz-appearance:none;
      -webkit-appearance:none;
      background: none;
      webkit-appearance: none;
      background:none;
  }
  body, td, div,span,a{
      line-height:1;
      letter-spacing:0; 
      margin:0; 
      padding:0; 
      -moz-font-smoothing:antialiased; 
      -webkit-font-smoothing: antialiased;
      font-smoothing:antialiased; 
  }
      blockquote,q{
      quotes:none;
  }
      blockquote:before,blockquote:after,q:before,q:after{
      content:none;
  }
      :focus{
      outline:0;
  }
      ins{
      text-decoration:none;
  }
      del{
      text-decoration:line-through;
  }
      table{
      border-collapse:collapse;
      border-spacing:0;
  }
  img{
      border:0px;
  }
  .banner{
      width: 1004px;
      height:232px;
      margin: 10px auto 0 auto;
      border-radius: 6px;
      overflow: hidden;
  }
  .banner img{
      width: 100%;
  }
  a{  
      text-decoration:none; 
      cursor:pointer; 
      outline:none; 
      text-decoration-line: none;
      color:#666;
  }
  a, area {
      outline:none; 
      blr:expression(this.onFocus=this.blur())
  } 
  a:hover{ 
      text-decoration:none;
  }
</style>
<body>
  <div class="error">
    <img src="/images/404.png">
    <p>抱歉!您访问的页面不存在或已删除</p>
    <a class="back" href="/">返回主页</a>
  </div>
</body>
</html>

数学公式支持

效果图,预览地址

主题配置文件中,该字段配置,详情参考 Math Equations

# Math Formulas Render Support
# Warning: Please install / uninstall the relevant renderer according to the documentation.
# See: https://theme-next.js.org/docs/third-party-services/math-equations
# Server-side plugin: https://github.com/next-theme/hexo-filter-mathjax
math:
  # Default (false) will load mathjax / katex script on demand.
  # That is it only render those page which has `mathjax: true` in front-matter.
  # If you set it to true, it will load mathjax / katex script EVERY PAGE.
  every_page: false
  mathjax:
    enable: true
    # Available values: none | ams | all
    tags: none
  katex:
    enable: true
    # See: https://github.com/KaTeX/KaTeX/tree/master/contrib/copy-tex
    copy_tex: true

如依照上述配置,日后发文请在需要加载数学公式渲染文章的 front-matter 处添加 mathjax: true。例如

本地搜索功能排错指南

效果图,预览地址

部署完成后,发现本地搜索功能失效,直接 访问站点search.xml 浏览器显示

这里在保证插件配置正常的前提下,给出排除字符错误的解决方案

我们将 search.xml 保存到本地用 vscode 打开,根据浏览器报错的行、列指示,发现字符转义错误。在文章页面下删除该类字符后重新部署,搜索功能恢复

自定义站点页脚

效果图,预览地址

路径如图,按需修改

加入标签云

效果图,预览地址

  • 进入到 hexo 的根目录,然后在 package.json 中添加依赖: "hexo-tag-cloud": "2.1.*"
  • 然后执行 npm install 命令

打开路径 next/layout/_macro/sidebar.swig,添加如下配置

{% if site.tags.length > 1 %}
<script type="text/javascript" charset="utf-8" src="{{ url_for('/js/tagcloud.js') }}"></script>
<script type="text/javascript" charset="utf-8" src="{{ url_for('/js/tagcanvas.js') }}"></script>
<div class="widget-wrap">
   <div id="myCanvasContainer" class="widget tagcloud">
        <canvas width="250" height="250" id="resCanvas" style="width:100%">
            {{ list_tags() }}
        </canvas>
    </div>
</div>
{% endif %}
  • 完成安装和显示,可以通过 hexo clean && hexo g && hexo s 来进行本地预览, hexo clean 为必须选项。
  • *注:不要使用 hexo g -d 或者 hexo d -g 这类组合命令,详见

项目地址及详细教程参考

README 转义问题

效果图,预览地址

当我们为项目配置 README.md 文件时,发布后会发现文件会被 hexo 转义成 .html 文件,详见 Hexo 配置

这里以站点添加中英双语介绍文件为例,将项目 README.mdEN.md 放在 source 目录下

然后在图示位置根据 glob 语法规则添加值即可

这样 hexo 就不会渲染匹配到的文件,显示正常

杰森博客即将同步至 腾讯云+社区,邀请优秀的你一起加入:https://cloud.tencent.com/developer/support-plan?invite_code=n3sgpli9dqc8




相关文章
|
2月前
|
JavaScript API 开发工具
使用GitHub Actions自动发布electron多端安装程序
使用GitHub Actions自动发布electron多端安装程序
41 8
|
2月前
|
JavaScript Linux Windows
Typora图床配置(用自带的 PicGo-Core(command line) 插件GitHub
Typora图床配置(用自带的 PicGo-Core(command line) 插件GitHub
利用 GitHub Actions 自动化你的软件开发流程
GitHub Actions 是由 GitHub 提供的自动化工具,可让你在仓库中触发和执行自动化工作流程,如自动运行测试和部署应用。其核心概念包括工作流程(定义在 YAML 文件中的一系列自动化步骤)、作业和步骤。本文将指导你如何设置和使用 GitHub Actions,并提供实用的自动化示例,帮助你提高开发效率和代码质量。通过简单的配置文件,你可以实现自动运行测试、部署应用甚至自动合并 Pull Requests。
利用 GitHub Actions 自动化你的软件开发流程
在现代软件开发中,自动化是提升效率与质量的关键。GitHub Actions 作为 GitHub 的强大自动化工具,允许你在仓库中自动执行多种任务,如测试、打包、部署代码及自动合并 Pull Requests。本文介绍了 GitHub Actions 的核心概念、设置方法及其实用示例,帮助你快速上手并优化开发流程。通过 YAML 文件定义的工作流程可显著提高工作效率和代码质量。
|
3月前
|
网络协议 开发工具 git
hexo github部署,通过域名访问你的博客
本文介绍了如何使用Hexo命令部署博客到GitHub,并详细说明了如何通过自定义域名访问GitHub上部署的博客。
hexo github部署,通过域名访问你的博客
|
3月前
|
开发者
利用 GitHub Actions 自动化你的软件开发流程
在快速发展的软件开发环境中,自动化对于提升效率与质量至关重要。GitHub Actions 作为一款强大的工具,能帮助开发者实现从自动运行测试到部署应用等工作的自动化。本文详细介绍了 GitHub Actions 的核心概念、设置方法及实际应用示例,如自动测试、部署和合并 Pull Requests,助力提升开发流程的自动化水平。
利用 GitHub Actions 自动化你的软件开发流程
GitHub Actions 是 GitHub 提供的自动化工具,可在仓库中触发和执行工作流程,包括自动运行测试、部署应用等。其核心概念包括工作流程(Workflow)、作业(Job)和步骤(Step),均定义在 YAML 文件中。本文将指导你如何设置和使用 GitHub Actions,并提供自动运行测试、部署应用及合并 Pull Requests 的示例,帮助提高开发效率和代码质量。
|
4月前
|
安全 网络协议 Shell
Github代码仓库SSH配置流程
这篇文章是关于如何配置SSH以安全地连接到GitHub代码仓库的详细指南,包括使用一键脚本简化配置过程、生成SSH密钥对、添加密钥到SSH代理、将公钥添加到GitHub账户以及测试SSH连接的步骤。
77 0
Github代码仓库SSH配置流程
|
4月前
|
安全 Shell 网络安全
告别繁琐密码,一键解锁GitHub高效秘籍!SSH配置大揭秘,让你的代码托管之旅飞起来!
【8月更文挑战第4天】在使用GitHub时,频繁输入账号密码颇为不便。采用SSH协议可提升安全性并简化流程。本文以问答形式指导你快速配置GitHub SSH:了解SSH优势、学会生成与添加SSH密钥及测试连接。通过简单的步骤,即可实现无缝代码推送与拉取,享受高效、安全的开发体验。记得保护好私钥并根据需要设置多个密钥对。
67 7
|
4月前
|
Java Spring 传感器
AI 浪潮席卷,Spring 框架配置文件管理与环境感知,为软件稳定护航,你还在等什么?
【8月更文挑战第31天】在软件开发中,配置文件管理至关重要。Spring框架提供强大支持,便于应对不同环境需求,如电商项目的开发、测试与生产环境。它支持多种格式的配置文件(如properties和YAML),并能根据环境加载不同配置,如数据库连接信息。通过`@Profile`注解可指定特定环境下的配置生效,同时支持通过命令行参数或环境变量覆盖配置值,确保应用稳定性和可靠性。
65 0