博客搭建

原理

用hexo+github page搭建.
hexo生成静态网页HTML,GitHub page展示HTML

github page

每个仓库都有一个pages服务,可用来展示项目,通过简单的设置项目的index.html,并以此做为入口供用户参观访问.
当然也可以用来跑博客. ^dca042

hexo

  1. hexo g:生成静态文件。将我们的数据和主题相结合生成静态文件的过程。
  2. hexo d:部署文件。部署主要是根据在 _config.yml 中配置的 git 仓库或者 coding 的地址,将 public 文件上传至 github 或者 coding 中。然后再根据上面的 github 提供的 pages 服务呈现出页面。
    source储存md
    themes储存主题
    md+主题 生成静态HTML
    hexo_repo文件下还有一个public的文件夹.执行hexo clean,会清除public,执行hexo d会生成public.还会生成.deploy_git文件夹,这个文件夹就是我们部署到github或者gitee上面的文件.
    只有public的文件才会上传到github.如果github page的结果不对,可能是hexo没有执行好 hexo deploy命令.
    hexo server执行,依赖的不是public文件内容.可能会导致localhost展示结果与github page不同.
    source -> public -> .deploy_git
    执行hexo generate,根据source,更新public
    执行hexo deploy,根据public,更新.deploy_git
    1
    2
    hexo clean
    hexo g -d
    是最优解
    详解Hexo搭建博客的底层原理

    搭建reference:

    ubuntu 安装hexo
    已经放弃,转windows hexo
    由于是在git bash里面操作,没区别…可以直接参考ubuntu系统下的安装

    域名绑定:

    https://blog.csdn.net/weixin_45961774/article/details/108402406
    cpolar + PHP study
    本地配置网站,再内网穿透到公网

不需要
我有ipv4

icarus修改

live2d

使用的是张书樵的live2d-widget
live2d模型添加
live2d模型库,超多色色
依赖cdn服务,直接从别人的服务器上拉取的live2d.所以hexo库里面并没有原生的live2d文件
好像要自己部署cdn服务,再调用api添加新的live2d模型
有点难度,暂时放弃,以后有机会接触到cdn,本地api部署再说

进阶修改

文章加宽

参考1
主要是修改三个文件
\themes\icarus\include\style\responsive.styl
\themes\icarus\layout\layout.jsx
\themes\icarus\layout\common\widgets.jsx
responsive.styl负责管理几个既定的参数 gap mobile tablet fullhd widescreen
layout.jsx负责管理文章
widgets.jsx负责管理侧边栏
注意,使用的12块分配,
对于单侧边栏,
侧边栏+文章=12
对于双侧边栏,
侧边栏*2+文章=12

share管理

使用addtoany
搞不懂什么情况,实现不了,放弃
试试换成sharethis
在_config.yml中增加

1
2
share: 
type: sharejs

在_config.icarus.yml中增加
1
2
share: 
type: sharejs

对sharejs 的效果不满意,放弃share模块,有机会再搞
分享设置

  • [ ] https://wiki.kunzhang.me/tech/%E5%91%A8%E8%BE%B9%E5%BC%80%E5%8F%91%E6%8A%80%E6%9C%AF/hexo.html#widget

    latex添加

    参考1
    参考2
    问题:中间的下划线都会被识别为斜体符号,需要转义.
    更改inline.js文件中的em行
    1
    2
    //em: /^\b_((?:__|[\s\S])+?)_\b|^\*((?:\*\*|[\s\S])+?)\*(?!\*)/,
      em: /^\*((?:\*\*|[\s\S])+?)\*(?!\*)/,
    记得hexo clean

    categories设置

    categories 自动化
    注意修改depth

    指定文章隐藏

    https://github.com/im0o/hexo-generator-index-custom/blob/master/README_zh.md
    https://blog.csdn.net/qq_42777659/article/details/126516780

    跳过某些文件hexo skip render设置

    _config.yml中设置
    1
    2
    3
    skip_render:
    - _posts/fleeting/**/**/**/*
    - _posts/templates/*

    目录设置

    _config.yml中开启
    1
    toc: true
    _config.icarus.yml
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    widgets:
        # 目录 小部件配置
        -
            # 小部件显示位置
            position: left
            type: toc
            # 是否显示每个标题的索引
            index: true
            # 是否在看不到副标题时折叠副标题
            collapsed: true
            # 标题显示的最高水平
            depth: 5
    对于过长的标题,需要处理显示器不够大,目录无法完全显示的情况
    参考

    可滚动目录

    参考

    图片添加

    自定义css
    对于前端三件套不熟悉,只能自己看
    1
    2
    3
    4
    5
    6
    7
    8
    .is-2-column { 
    background-image: url(/img/backgroud.png);
    background-position: center center;
    background-repeat: no-repeat;
    background-attachment: fixed;
    background-size: cover;
    // background-color: #f5f5fa;
    }
    这段代码只对2列的排版生效,不会对于三列排版生效.
    要改成
    1
    2
    3
    4
    5
    6
    7
    8
        .is-3-column { 
    background-image: url(/img/backgroud.png);
    background-position: center center;
    background-repeat: no-repeat;
    background-attachment: fixed;
    background-size: cover;
    // background-color: #f5f5fa;
    }

    添加readmore功能

    采用插件hexo-excerpt
    github仓库

    实现文章根据最近的更新排序,而不是发布时间创建时间排序

    修改node_modules\hexo-generator-index\lib\generator.js中的内容
    修改结果为
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    'use strict';
    const pagination = require('hexo-pagination');
    const { sort } = require('timsort');
    module.exports = function(locals) {
      const config = this.config;
      const posts = locals.posts.sort(config.index_generator.order_by);
    // sort(posts.data, (a, b) => (b.sticky || 0) - (a.sticky || 0));
      posts.data = posts.data.sort(function(a, b) {
        if(a.top && b.top) { // 当两篇文章top都有定义时
            if(a.top == b.top) return b.updated - a.updated; // 若top值一样,则按照文章更新日期降序排列
            else return b.top - a.top; // 否则按照top值降序排列
        }
        else if(a.top && !b.top) { // 以下两种情况是若只有一篇文章top有定义,则将有top的排在前面(这里用异或操作居然不行233)
            return -1;
        }
        else if(!a.top && b.top) { //上一条已解释
            return 1;
        }
        else return b.updated - a.updated; // 若都没定义,则按照文章更新日期降序排列
    });
      const paginationDir = config.pagination_dir || 'page';
      const path = config.index_generator.path || '';
      return pagination(path, posts, {
        perPage: config.index_generator.per_page,
        layout: ['index', 'archive'],
        format: paginationDir + '/%d/',
        data: {
          __index: true
        }
      });
    };

    别人的icarus

    Anne Wu配置
    peiyingchi配置

    站点google收入

    google console中验证站长的身份

    验证身份部分可以google console中的引导或者看其他博客.

    添加sitemap

    sitemap由插件辅助完成
    在hexo目录下安装hexo-generator-sitemap插件
    1
    npm install hexo-generator-sitemap --save
    _config.yml添加
    1
    2
    sitemap:
      path: sitemap.xml
    注意在_config.yml,你应该设定好了自己的url.
    例如我的是
    1
    2
    3
    4
    author: l4rk
    language: zh-CN
    timezone: Asia/shanghai
    url: http://domonnss.github.io
    hexo-generator-sitemap会根据这里的url生成xml文件.

如果提示此位置的 Sitemap 不允许此网址。,可能是因为生成的xml文件中的url与你的域名不同
xml中为

1
2
3
4
5
6
<url>
<loc>http://domonnss.github.io/2023/10/f85834e8ad59.html</loc>
<lastmod>2023-12-18</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>

而我填入的站点地图为https://l4rk.cn/sitemap.xml

domonnss.github.iol4rk.cn不是同一个域名.就会出现这个报错提示
修改_config,yml的url为
url: http://l4rk.cn
输入命令
hexo clean && hexo g && hexo d
生成新的xml文件为

1
2
3
4
5
6
<url>
<loc>http://l4rk.cn/2023/10/f85834e8ad59.html</loc>
<lastmod>2023-12-18</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>

当xml文件中的url与站点地图的网址域名相同时,就不会出现报错啦☺

等待几天时间,google就会收录网站

obsidian+hexo

把md推到github,再从github推到hexo,再在hexo上
要不把hexo配置到windows,要不放弃hexo,围绕obsidian配置博客
尝试用插件
选择在windows环境下重新配置hexo.
reference:
windows hexo+obsidian+github 写的特别棒
https://zhuanlan.zhihu.com/p/613429644

问题

hexo d 无法连接至github

更改_config.yml内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
l4rk@l4rkserver:~/hexo$ hexo d
INFO Validating config
Inferno is in development mode.
Inferno is in development mode.
INFO =======================================
██╗ ██████╗ █████╗ ██████╗ ██╗ ██╗███████╗
██║██╔════╝██╔══██╗██╔══██╗██║ ██║██╔════╝
██║██║ ███████║██████╔╝██║ ██║███████╗
██║██║ ██╔══██║██╔══██╗██║ ██║╚════██║
██║╚██████╗██║ ██║██║ ██║╚██████╔╝███████║
╚═╝ ╚═════╝╚═╝ ╚═╝╚═╝ ╚═╝ ╚═════╝ ╚══════╝
=============================================
INFO === Checking package dependencies ===
INFO === Checking theme configurations ===
INFO === Registering Hexo extensions ===
INFO Deploying: git
INFO Clearing .deploy_git folder...
INFO Copying files from public folder...
INFO Copying files from extend dirs...
On branch master
nothing to commit, working tree clean
fatal: unable to access 'https://github.com/domonnss/domonnss.github.io/': Failed to connect to github.com port 443 after 129455 ms: Connection timed out
FATAL Something's wrong. Maybe you can find the solution here: https://hexo.io/docs/troubleshooting.html
Error: Spawn failed
at ChildProcess.<anonymous> (/home/l4rk/hexo/node_modules/hexo-deployer-git/node_modules/hexo-util/lib/spawn.js:51:21)
at ChildProcess.emit (node:events:514:28)
at ChildProcess._handle.onexit (node:internal/child_process:294:12)

reference:
https://blog.csdn.net/weixin_48927364/article/details/123405585

hexo deploy 报错:

reference:
https://blog.csdn.net/nineya_com/article/details/103301870
完美解决

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
l4rk@l4rkserver:~/hexo$ hexo deploy
INFO Validating config
Inferno is in development mode.
Inferno is in development mode.
INFO =======================================
██╗ ██████╗ █████╗ ██████╗ ██╗ ██╗███████╗
██║██╔════╝██╔══██╗██╔══██╗██║ ██║██╔════╝
██║██║ ███████║██████╔╝██║ ██║███████╗
██║██║ ██╔══██║██╔══██╗██║ ██║╚════██║
██║╚██████╗██║ ██║██║ ██║╚██████╔╝███████║
╚═╝ ╚═════╝╚═╝ ╚═╝╚═╝ ╚═╝ ╚═════╝ ╚══════╝
=============================================
INFO === Checking package dependencies ===
INFO === Checking theme configurations ===
INFO === Registering Hexo extensions ===
INFO Deploying: git
INFO Clearing .deploy_git folder...
INFO Copying files from public folder...
INFO Copying files from extend dirs...
Author identity unknown
*** Please tell me who you are.
Run
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
to set your account's default identity.
Omit --global to set the identity only in this repository.
fatal: unable to auto-detect email address (got 'l4rk@l4rkserver.(none)')
error: src refspec HEAD does not match any
error: failed to push some refs to 'https://github.com/domonnss/domonnss.github.io'
FATAL Something's wrong. Maybe you can find the solution here: https://hexo.io/docs/troubleshooting.html
Error: Spawn failed
at ChildProcess.<anonymous> (/home/l4rk/hexo/node_modules/hexo-deployer-git/node_modules/hexo-util/lib/spawn.js:51:21)
at ChildProcess.emit (node:events:514:28)
at ChildProcess._handle.onexit (node:internal/child_process:294:12)

github master与main的问题

https://juejin.cn/post/7135335154716770341

不知道为什么npm无法在git bash中使用

直接换成cnpm就行.
换源,清除缓存都失效…

每次hexo g -d github库中的CNAME都会不在

在/d/hexo_repo/source中添加 CNAME文件

Pio酱Tia酱的模型不能像在其他网站看到的那样可以换装

reference:
https://akilar.top/posts/5b8f515f/

TypeError: Cannot read properties of null (reading ‘type’)

在原来的_config.icarus.yml文件中,由于注释语法不正确引起的

1
2
3
4
5
    # # 谷歌分析插件设置
    # # https://analytics.google.com
    # google_analytics:
    #     # Google Analytics tracking ID
    #     tracking_id:

多个#注释,出现错误
修改注释方式或者直接删除注释内容就好了

高亮问题

==高亮== 语法,hexo无法为它添加高亮
使用`高亮`可以
效果:高亮

挂了代理之后,hexo d的出错

kex_exchange_identification: Connection closed by remote hostConnection closed
在储存ssh密钥的位置.我的windows上位置为C:\Users\28763\.ssh\.增加config文件,内容为

1
2
3
4
Host github.com
HostName ssh.github.com
User git
Port 443

再次hexo d,会有一个弹窗出来,填入yes就行