详细阅读前可以先去阅读常见错误

在此提前说明个人口语化,请谅解

Front-matter也就是文章开头的---划定的区域,我个人叫头代码,其实就是前置数据 mermaid流程图我会略写,mermaid图,虽然导致我一时半会儿想不起全名是什么

Hexo社区是不错的,stellar的设计是非常好的,废话就不多说了,那就开始吧

安装与初始化

能找到我就说明,你看了很多文章,还是不太明白一些细节,正好我最近又重新整了一遍

,不过如果我讲的不是很明白,你可以查阅以下文章,或者官网,然后开始喷吧

Hexo的中文官方文档

Stellar:每个人的独立博客 - XAOXUU

1
2
3
4
Hexo: 6.3.0 ~ 7.0.0
hexo-cli: 4.3.0 ~ latest
node: 14.17.3 ~ 20.10.0 # 建议选择 LTS 版本,过高的版本 hexo 还没有进行兼容。
npm: 6.14.13 ~ 10.2.3

博主系统和配置,如果出些差别,可考虑是不是这个原因

1
2
3
4
Windows 10 家庭中文版
Node.js 18.15.0
npm 9.8.1
yarn 1.22.19

安装脚手架

前情提示:选择你的包管理器命令运行

全局安装

1
2
yarn global add hexo-cli # yarn
npm install -g hexo-cli # npm

局部安装

1
2
yarn add hexo	# yarn
npm intall hexo # npm

hexo初始化

全局安装可以直接在空文件夹里执行下面这一句话

1
hexo init [folder] # 要求全局安装或将局部安装添加到path

新建一个网站。如果没有设置 folder ,Hexo 默认在目前的文件夹建立网站,并且要求为空文件夹。

局部安装或者全局安装失败可以执行这语句话

1
npx hexo init [folder]

在blog\package.json他自动配置了四种脚本命令

目录结构如下

1
$ hexo generate

生成静态文件。

1
$ hexo server

启动服务器。默认情况下,访问网址为: http://localhost:4000/

1
$ hexo clean

清除缓存文件 (db.json) 和已生成的静态文件 (public)。

在某些情况(尤其是更换主题后),如果发现您对站点的更改无论如何也不生效,您可能需要运行该命令。

1
$ hexo deploy

部署网站。部署之前预先生成静态文件

指令 | Hexo官网详细参考

此处我们多添加一条命令,一是记忆,二是IDE识别,三是方便之后的操作

blog\package.json
1
2
3
4
5
6
7
"scripts": {
"build": "hexo generate",
"clean": "hexo clean",
"deploy": "hexo deploy",
"server": "hexo server",
"new": "hexo new"
},

启动后的默认页面效果

使用Stellar主题

更换主题

1
2
yarn add hexo-theme-stellar
npm i hexo-theme-stellar --save
_config.yml
1
2
# theme: landscape 默认
theme: stellar

将*_config.landscape.yml* 文件修改为 _config.stellar.yml,并清空内容

先clean再build这点很重要,在后面的修改样式增加一些功能需要重复执行这两个命令。

可以先启动服务器看看效果

主题更新

package.json 和中修改 stellar 的版本号,然后执行:

1
2
npm i
yarn

你果你有一些个性化的设置,并且复制了stellar到blog/themes/,那么需要注意,你就需要考虑更新带来的兼容问题了。

更新后将blog\node_modules\hexo-theme-stellar覆盖为blog/themes/stellar

配置亿下

目录结构

有关配置问题的首先就是我该写在哪,其次才是我该怎么写,那么贴出两张不同版本的目录结构,你可以比较一下。

1.19.0

1.21.0-1.22.1

blog/source的目录结构
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
35
36
37
38
39
40
41
42
43
44
45
46
47
├─about
│ ├─index.md
│ └─index
├─CNAME
├─assets
├─bookmark
│ └─index.md
├─css
├─friends
│ └─index.md
├─js
├─notes
| ├─index.md
| ├─Node.js常用命令.md
| ├─...
├─wiki
│ └─vue
│ ├─Axios
│ ├─Vite项目构建工具
│ ├─Vue对象提供的属性功能
│ ├─Vue对象的生命周期
│ ├─Vue常用指令
│ ├─Vue快速入门
│ ├─Vue路由
│ ├─单文件组件的使用
│ ├─组合API
│ ├─项目构建工具
│ ├─Axios.md
│ ├─Vite项目构建工具.md
│ ├─Vue对象提供的属性功能.md
│ ├─Vue对象的生命周期.md
│ ├─Vue常用指令.md
│ ├─Vue快速入门.md
│ ├─Vue路由.md
│ ├─单文件组件的使用.md
│ ├─组合API.md
│ └─项目构建工具.md
├─_data
│ ├─wiki
| | ├─notes.yml
| | └─Vue.yml
| ├─links.yml
| ├─widgets.yml
| └─wiki.yml
└─_posts
├─...

重点在于wikinotes

1.23.0

blog/source的目录结构
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
├─about
│ ├─index.md
│ └─index
├─CNAME
├─assets
├─bookmark
│ └─index.md
├─css
├─friends
│ └─index.md
├─js
├─notes
| ├─index.md
| ├─Node.js常用命令.md
| ├─...
├─wiki
│ └─vue
│ ├─Axios
│ ├─Vite项目构建工具
│ ├─Vue对象提供的属性功能
│ ├─Vue对象的生命周期
│ ├─Vue常用指令
│ ├─Vue快速入门
│ ├─Vue路由
│ ├─单文件组件的使用
│ ├─组合API
│ ├─项目构建工具
│ ├─Axios.md
│ ├─Vite项目构建工具.md
│ ├─Vue对象提供的属性功能.md
│ ├─Vue对象的生命周期.md
│ ├─Vue常用指令.md
│ ├─Vue快速入门.md
│ ├─Vue路由.md
│ ├─单文件组件的使用.md
│ ├─组合API.md
│ └─项目构建工具.md
├─_data
│ ├─wiki
| | ├─notes.yml
| | └─Vue.yml
| ├─links
| | ├...
| | ├─设计灵感和素材.yml
| | └─期待友链.yml
| ├─authors.yml
| ├─widgets.yml
| └─wiki.yml
└─_posts
├─...

重点在于linksauthors

代码推送(必须)

线上部署用

1
yarn add hexo-deployer-git

你还需要在提送前绑定推送域名此处为跳看

Rss订阅功能(建议)

(用于搜索引擎和友链抓起你的动态)

1
2
npm i hexo-generator-feed
yarn add hexo-generator-feed

添加

blog/_config.yml
1
2
3
4
5
6
7
8
feed:
type: atom # RSS的类型(atom/rss2)
path: atom.xml # 文件路径,默认是atom.xml/rss2.xml
limit: 20 # 展示文章的数量,使用0或则false代表展示全部hub
# hub:
# content: # 在RSS文件中是否包含内容 ,有3个值 true/false默认不填为false
# content_limit: # 指定内容的长度作为摘要,仅仅在上面content设置为false和没有自定义的描述出现
# content_limit_delim: ' ' #上面截取描述的分隔符,截取内容是以指定的这个分隔符作为截取结束的标志.在达到规定的内容长度之前最后出现的这个分隔符之前的内容,防止从中间截断

在你的主题配置中如:

blog/_config.stellar.yml
1
2
3
4
5
6
7
footer:
social:
rss:
icon: '<i class="fa-solid fa-rss fa-shake"></i>'
url: /atom.xml

rss: /atom.xml

我在stellar模板提供的底部侧边栏添上一个答案的天线意图已经很强烈了!qwq

你只要指向对应的url即可。rss部分是必填的

atom.xml乱码

如题

有人说是

如果你使用了hexo-assert-image库,那是版本太老,因为作者没有及时更新npm,所以卸载后直接安装github上的版本

但是我也没有用这个啊

但是你别担心,很多人都这样,

看这个issues很多人的原因都是版本太低了,但我目前使用的是3.0.0(latest),但是啊~关键的来了!只要你推送到服务器上,他就是好的,一点乱码的问题也么有,如图

补充,我就跟傻X一样,模板主题的大佬给了他提供的rss位置我还自己手动整理一个,而且他写的很明白,就一个容器

blog/source/_data/widgets.yml
1
2
3
4
recent:
layout: recent
rss: atom.xml # npm i hexo-generator-feed
limit: 5 # Count of posts

现在

真的在遥相呼应,把我气的,必须在任何地方都出现底部的这些icons

让我的这份不找目的的用功多点成果

图片显示和New post命令(建议)

图片显示

图片显示主要可以使用三种语法格式

1
2
![图片标注](图片地址)
![image-20230601215212688](image-20230601215212688.png)
1
2
{%image 图片地址 图片标注 %}
{%image image-20231002230627780.png image-20231002230627780 %}
1
2
{% asset_img 图片地址 图片标注 %}
{% asset_img image-20230917223904196.png 20230917223904196 %}

目前本博客没用最后一个语法了,当初是看官方文档的

资源文件夹 | Hexo

它还需要下载一个包

1
2
yarn add  hexo-asset-image
npm -i hexo-asset-image --save

因为那是我不清楚图片到底如何才能正确的显示出来,瞎琢磨的。

补充:

图片地址:build后public文件夹中图片的位置,你可以把public/assets中的public看作是你的站点,实际上也就是替换成你的站点,然后依次推路径,相对路径绝对路径都可以

图片标注:即图片下面的标注,图片路径错误的情况,标注依然正常显示

补充的补充:

第一种写法的图片标注好像1.21.0没有编译作用了

1.19.0:

1.21.0:

不知道是不是少了hexo-asset-image这个包,懒得想了,只能动手改成第二种了。

1.22.1:

使用正则表达式进行快速替换

1
2
3
!\[.*?\]\(.*?/([^/]+)\)

{% image Vue快速入门/$1 %}

一般开发工具都有,全部替换即可

New post

很多人在执行下面的命令的时候,没有自动创建对应post(文章)的文件夹

1
hexo new post

这是因为你需要进行一些简单的设置

blog\_config.yml
1
2
3
4
5
render_drafts: false
post_asset_folder: true # false
# marked: # 1.19.0 我是有加这个的,1.21.0我没有加,因为我没有看见什么变化和作用 img_assest这个语法标签我也不用了
# prependRoot: true
# postAsset: true
编辑器New post

在配置好博客网站的一些设置后,不需要实时的打开项目,单独使用编辑器也可以。

记得新建的md文件要在blog\source_posts内,或者最后发布前和对应的图片文件夹放到这里。

这里我使用的markdown编辑器是Typora

在设置中对保存文件夹名进行更改

1
./${filename}

好吧,其实我这里提的,也不是什么好方法,你需要最后手动删除./${filename}这一部分,因为启用了post_asset_folder: true 最后无论build还是deploy生成html文件中,图片和网页是一个文件里的,相对的路径就错了

最后你可以试试PicGo,也就是上传至图床,保存的是url。

Mermaid流程图支持(选)

美人鱼图支持

1
2
npm install --save hexo-filter-mermaid-diagrams;
yarn add hexo-filter-mermaid-diagrams;

这个东西的兼容在我这里一直是个谜,但不妨碍我想要使用这个工具

blog\_config.stellar.yml
1
2
3
4
5
6
7
8
9
10
######## JS Plugins ########
plugins:
## required plugins ## # mermaid chart美人鱼流程图配置
mermaid:
enable: true
# js: https://unpkg.com/mermaid@9.0.0/dist/mermaid.min.js
js: https://cdn.jsdelivr.net/npm/mermaid@v9/dist/mermaid.min.js
# Available themes: default | dark | forest | neutral
theme: dark # 推荐使用 dark 主题 在夜间模式下显示效果更好

在文件头代码启用

1
mermaid: true # 美人鱼图不需要就注释
flowchart  LR
      Model-->ModelView
      ModelView<-->View
    ModelView-->Model
1
2
3
4
flowchart  LR
Model-->ModelView
ModelView<-->View
ModelView-->Model

具体mermaid语法就要自己去学习了

文章分享与推荐(选)

blog\_config.yml
1
url: https://bxzdyg.cn/  # 网站地址#对于这分享连接网站

可能会增加文章与评论区的距离感(多滑一点距离)

1
2
npm i hexo-related-popular-posts --save
yarn add hexo-related-popular-posts

复制下面的代码到blog\_config.stellar.yml

blog\_config.stellar.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
article:
# 如果没有指定封面,是否根据 tags 作为关键词搜索封面图片?
auto_cover: false # search from https://source.unsplash.com/
# 如果没有指定横幅,是否根据 tags 作为关键词搜索横幅图片?
auto_banner: false # search from https://source.unsplash.com/
# 如果没有指定 excerpt 和 description,将自动取多长的内容作为文章摘要?
auto_excerpt: 200
# 分类颜色
# category_color:
# '探索号': '#f44336' # 不会用qwq
# 文章许可协议
license: '本文采用 [署名-非商业性使用-相同方式共享 4.0 国际](https://creativecommons.org/licenses/by-nc-sa/4.0/) 许可协议,转载请注明出处。'
# 分享
share: [wechat, weibo, email, link]
# 相关文章,需要安装插件 (for layout: post)
# npm i hexo-related-popular-posts
related_posts:
enable: true
title: 您可能感兴趣的文章

注意:有的人的分享网站可能和当前的网址不一样

是谁要害我啊?

其实吧,这个网站是根据这个有关的,更换网址记得修改

blog\_config.yml
1
2
# url: https://yguang233.github.io/  # 网站地址
url: https://bxzdyg.cn/ # 网站地址 # 对应这分享连接网站

文章路由(选)

能够解决中文标题转义的现象,因为你直接给她转码了。并且创建文章自动添加abbrlink

1
2
npm -i hexo-abbrlink --save
yarn add hexo-abbrlink

blog/_config.yml 中找到对应 permalink 标签,进行修改即可:

1
2
3
4
5
6
7
8
9
10
url: https://yguang233.github.io/  # http://YGuang233.github.io
#permalink: :year/:month/:day/:title/
permalink: p/:abbrlink/
abbrlink:
alg: crc32 #算法: crc16(default) and crc32
rep: hex #进制: dec(default) and hex
permalink_defaults:
pretty_urls:
trailing_index: true # Set to false to remove trailing 'index.html' from permalinks
trailing_html: true # Set to false to remove trailing '.html' from permalinks

使用了这个每使用命令新建一篇文章会在头代码上插入abbrlink:及对应的转码后的代码,

这使得他会自动去匹配每个md文件的头代码中的abbrlink

不同算法、进制生成的链接格式如下:

算法 进制 生成链接示例
crc16 hex https://yourname.github.io/p/66c8.html
crc16 dec https://yourname.github.io/p/65535.html
crc32 hex https://yourname.github.io/p/8ddf18fb.html
crc32 dec https://yourname.github.io/p/1690090958.html

如果你不想使用这个,就想让美丽的汉字显示在URL上,当然也没有问题,如果你还想自定义和指定路由可以采用下面的方式:

blog/_config.yml 中找到对应 permalink 标签,进行修改即可:

1
permalink: :year/:month/:day/:title/

使用默认的或者更改一下

1
permalink: p/:title/
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
---
title: {{ title }}
date: {{ date }}
tags: [] # 标签
categories: [] # 分类 可以嵌套多个层级
description:
cover:
banner:
poster: # 海报(可选,全图封面卡片)
topic: # 标题上方的小字 # 可选 # 选了这个就是在上方
headline: # 大标题 # 必选
caption: # 标题下方的小字 # 可选
color: # 标题颜色 # 可选
mermaid: true # 美人鱼图不需要就注释
---

效果

线上部署

提前安装git,配置好ssh密钥。

Github配置SSH密钥连接(附相关问题解决) - 知乎 (zhihu.com)

GitHub Pages

使用GitHub Pages托管静态页面站点。

优点:

  1. 不需要域名,有域名可以绑定自己的域名
  2. 不需要自己的服务器
  3. 一键推送方便
  4. 适合运维小白没错就是我

缺点:

  1. 访问慢,且看地理位置,看脸

GitHub Pages 快速入门 - GitHub 文档

创建一个仓库,仓库名

在_config.yml中

blog\_config.yml
1
2
3
4
5
6
7
8
9
10
11
12
# Deployment
## Docs: https://hexo.io/docs/one-command-deployment
# 推送设置
deploy:
# 类型
type: git
# 部署分支名称,按照自己喜欢的起名就可以。这里写完还需要在 GitHub 上进行分支创建并配置
branch: master
# 仓库,这里使用的 SSH 方式
repo: git@github.com:YGuang233/YGuang233.github.io.git
# 如果你看了 hexo 的文档,这里很清楚。部署的时候会使用这个消息作为提交的信息
message: Automatic deploy by Github Action:{{ now('YYYY-MM-DD HH:mm:ss') }}

我这里采用的只是默认的主分支,你可以自行更改

然后更新提交(输入下面的命令就会自动更新提交到git上,前提配置好ssh,要不然显示权限不够,即使你使用网页登录过)

1
2
hexo generate
hexo deploy
这是很久以前写的,不清楚如果没用build推送会怎么样,不过这里也不是说每次都要build一下,写好文章build看看效果辣,然后推送而已。直接推送会怎么样,我不清楚啊,不过推送都会生成文件,影响应该不大

未安装hexo-deployer-git包会导致下面的错误

1
ERROR Deployer not found: git

其实就这两个点一下就可以了

运行成功则变成了一个绿钩

setting/code and automation/pages则会自动执行静态页面文件的路径和显示已经成功生成的站点。这一现象可能稍晚,可以先一步去查看站点。

如果你一小时内重复提交查看申请,发现不能生成了,那是因为它一个小时内只能生成10次,而一个用户的站点存储上限为1G

我在网上看到有些人使用修改.git/config这个文件夹本地仓库配置信息,来解决在github pages编译和上传的问题,这次我并没有用到,但我还是把它贴出来(这部分也不需要自己写会自动生成,你就看看自己缺了什么吧)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#[user]
# email=email@qq.com
# name=YGuang233 #这部分是我手动添加上去的,我不清楚这个是写我git的用户名还是github的用户名,但是我使用websotrm提交的时候还增加了作者签名
[core]
repositoryformatversion = 0
filemode = false
bare = false
logallrefupdates = true
symlinks = false
ignorecase = true
[remote "origin"]
url = https://github.com/YGuang233/YGuang233.github.io.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master

Vercel(已被墙)

尝试在Vercel中部署你的博客

推送绑定域名

blog/source/中添加CNAME文件,无类型文件(没有文件后缀)

写入你自己的博客地址

blog\source\CNAME
1
blog.bxzdyg.cn

其他

待编辑……qwq(其实写了的,一定是不见了!)

一些问题

toc样式的问题

默认设置在

blog/source/_data/widgets.yml
1
2
3
4
5
6
7
toc:
layout: toc
list_number: false # 是否显示序号
min_depth: 2 # 建议不要低于 2 即从 H2 标签开始解析(H1标签用于文章大标题)
max_depth: 5 # 5 代表最多解析到 H5 标签
fallback: recent # Use a backup widget when toc does not exist.

禁用h1

如在wiki使用h1标题也就是#

标题等级必需连续

如上一个标题是h1下一个就是h3、h4

不连续会以下一个高级标题,形成断层。

toc最多显示到h5

备注:1.19.0只能到h4

Mermaid样式问题

话说同样是dark主题,样式这么差了这么多

不明白,怎么下面的样式又对了

Mermaid代码冲突问题(已解决)

主题语法不能和Mermaid代码块进行嵌套

以前(v1.19.0)在这个主题下很多都不能够嵌套,基本上都是我现在浏览器上渲染一遍,复制html元素粘贴到markdown里面

mermaid代码块临近主题语法会无法正常编译,还是代码块

没想到现在居然可以了,牛哇。

不过这里的嵌套却不能显示原有的代码了,都能被识别,进行编译

但是用起来警告有点多啊……

post的相关问题

文章如何置顶?

front-matter加入pin: true就可以了。然后就会在对应的文章多一个赞的小徽章

wiki的相关问题

很遗憾的告诉各位高手们,stellar1.20.0将wiki重做了,不过如果你依然是老用户,我还是将对应的wiki项目的写法贴出来

1.19.0

版本使用起来是相当费力的,不知怎么的,当时我读不懂文档,搞了很久才折腾出来了。

目录结构如下

1
2
3
4
5
6
7
8
9
10
11
12
13
---
mermaid: true
date: 2023-09-19 16:25:20
layout: wiki # 使用wiki布局模板
wiki: Vue # 这是项目名
title: Vue快速入门
order: 0
sidebar:
- layout: search
override: search
filter: '/wiki/vue/'
- toc
---

重点是order要在对应的序列范围内

blog/source/_data/projects.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
Vue:
name: Vue
title: Vue - 渐进式的前端框架
subtitle: '很开心的学了 | 结果又多了一个学过而不会的技术' # 项目中和主页相似的两个副标题
tags: 前端 # 分类
cover: true # 是否图片
# cover: [logo, description] # 如果 logo 中已经包含了项目标题,可以这样设置不显示项目标题
logo:
src: /assets/wiki/vue/vue-js.svg # 项目封面
small: 112px
large: 240px
description: 我的Vue学习笔记-不断改进和完善中,欢迎留言批斗,但别说的太过分,我并没有那么坚强。
# repo: xaoxuu/hexo-theme-stellar
# comment_title: '评论区仅供交流,有问题请提 [issue](https://github.com/xaoxuu/hexo-theme-stellar/issues) 反馈。'
# giscus: # 对应仓库
# data-repo: xaoxuu/hexo-theme-stellar
# data-mapping: number
# data-term: 226
sections:
'快速开始': [ 0, 99 ]
'基本使用': [ 100, 199 ]
'深入组件': [ 200, 299 ]
'应用规模化': [ 300, 399 ]
'跨域问题': [ 400, 599 ]
'进阶主题': [ 600, 699 ]
# sidebar: [search,toc] #侧边栏
# index: false #在项目列表中隐藏

1.20.0+

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

```sh
├─wiki
│ └─vue
│ ├─Axios
│ ├─Vite项目构建工具
│ ├─Vue对象提供的属性功能
│ ├─Vue对象的生命周期
│ ├─Vue常用指令
│ ├─Vue快速入门
│ ├─Vue路由
│ ├─单文件组件的使用
│ ├─组合API
│ ├─项目构建工具
│ ├─Axios.md
│ ├─Vite项目构建工具md
│ ├─Vue对象提供的属性功能.md
│ ├─Vue对象的生命周期.md
│ ├─Vue常用指令.md
│ ├─Vue快速入门.md
│ ├─Vue路由.md
│ ├─单文件组件的使用.md
│ ├─组合API.md
│ └─项目构建工具.md
├─_data
| ├─wiki.yml
│ └─wiki
│ └─Vue.yml

blog\source\_data\wiki\Vue.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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
name: Vue
title: Vue.js - 渐进式的前端框架
subtitle: '很开心的学了 | 结果又多了一个学过而不会的技术' # 项目中和主页相似的两个副标题
tags: 前端
cover: /assets/wiki/vue/vue-js.svg # 封面页大图
icon: /assets/wiki/vue/vue-js.svg # 列表页图标
# coverpage: [logo, description]
coverpage: true # 默认是 true
description: 我的vue学习笔记-不断改进和完善中,欢迎留言批斗,但别说的太过分,我并没有那么坚强。
# repo: xaoxuu/hexo-theme-stellar
sidebar:
- search:
override: search
filter: /wiki/vue/
placeholder: '在 Vue笔记 中搜索...'
- toc
# - timeline_stellar_releases
- related
# comment_title: '评论区仅供交流,有问题请提 [issue](https://github.com/xaoxuu/hexo-theme-stellar/issues) 反馈。'
# comments:
# service: giscus
# giscus:
# data-repo: xaoxuu/hexo-theme-stellar
# data-mapping: number
# data-term: 226
path: /wiki/vue/
toc:
'快速开始':
- 'Vue快速入门'
'基本使用':
- 'Vue常用指令'
- 'Vue对象提供的属性功能'
- 'Vue对象的生命周期'
- 'Vue组件化开发基础和浅入'
- '项目构建工具'
'深入组件':
- '单文件组件的使用'
'应用规模化':
- 'Vue路由'
'跨域问题':
- Axios
- Proxy
- WebSocket
'进阶主题':
- '组合API'
- 'Vite项目构建工具'

blog\source\_data\wiki.yml
1
2
 # 上架项目
- Vue

头代码如下面写到

blog\source\wiki\vue\Vue快速入门.md
1
2
3
4
5
---
layout: wiki # 使用wiki布局模板
wiki: Vue # 这是项目名
title: Vue快速入门
---

总结

&nsbp;&nsbp;对于这个改动,对比以往,相当于多了一个草稿wiki,可以选择上不上架blog\source\_data\wiki.yml中添加即可

在写某一分页的时候不用去打开上一页的order是什么,只需要在blog\source\_data\wiki\Vue.yml这类的项目去添加下一个分页的title

这些都是有好处的,但是作为一个老用户,我哭啊,也要改些东西,不想动啊~

缺点也是有一些的就是文章标题不允许重复了

title要和markdown文件名一致

其他

乱序

还有莫名的省略号。

解答:船新版本不能像1.19.0那样,进行目录嵌套,全部写在一个文件里,否则会在构建的时候报如下的错误

多次重写构建是能够正常构建,但是效果就像上面一样乱序。

消失的toc

title要和文件名一致,否则会出现省略号

而内容为空,只写了头代码toc就会消失

notes相关问题

如何隐藏covertitle还有name

这个大概就是notes上拉有wiki的开始使用提示字样

blog\source\_data\wiki\notes.yml
1
2
3
4
5
6
# name: 备忘录
# title: 备忘录
# icon: # 列表页图标
# cover: # 封面页大图
# coverpage: [cover, title, description] # 封面页显示的内容
coverpage: false # 封面页显示的内容

这部分修改成这样

你可能还是不清楚子文件的front-matter怎么写

blog\source\notes\vite初始化vue.md
1
2
3
4
5
6
7
8
---
date: 2023-12-31 18:58:39
layout: wiki
wiki: notes # 这个跟上面的 /wiki/notes.yml 关联起来
menu_id: explore # 这个跟配置文件中的 `sidebar.menu.notes` 关联起来,这很重要,如果没有这个,就像普通的wiki项目一样了
title: vite初始化vue
---
待编辑……qwq{% psw 其实写了的,一定是不见了!%}

代码块怎么显示文件地址

Stellar一些没有说明或者一时看不明白的,但是看起来就很叼的效果实现

这样编写在一般的md是不会被这样解析的,而是作为一整个字符串当作代码的类型打脸打的啪啪响 两个小时后:typora 也能够区分识别,将空格前面的作为类型,当然了有时候你写的一些语言,会无法识别,突出高亮如vue

1
2
3
4
{% folding child:codeblock open:flase color:yellow 警告此处为个人本题答案仅供参考,非唯一答案 %}
``` 这是代码语言
这是代码内容
{% endfolding %}

代码块折叠

1
{% quot  你好世界  el:h2 %}

使用这种指定标题,每个属性要隔开一些

1
2
3
{% quot 热门话题 %}  []
{% quot 热门话题 icon:default %} “”
{% quot 热门话题 icon:hashtag %} #

wiki项目的icon如何向老版本一样整大一点

不知道

okr嵌套gallery如何控制哪些是大图哪些是小图

不知道

一些小花样

动态友链

文章参考:

https://weekdaycare.cn/posts/stellar-friends/

克隆仓库后,开放Issues功能,按需求划定标签,并且修改厂库对应的判断语句,就可以在文章中

1
{% friends repo:YGuang233/friends %}

就能加载出对应的友链信息

朋友文章(朋友圈)

2023/10

1
{% timeline type:fcircle api:https://github.com/YGuang233/friends-rss-generator/tree/output/data.json %}

有些人很好奇,明明这样写,打开一看是我厂库里的output分支的data.json

但实际上你只要多点一步,我们需要的是这个叫做data.json的字节流

1
https://raw.githubusercontent.com/YGuang233/friends-rss-generator/output/data.json
1
{% timeline type:fcircle api:https://raw.githubusercontent.com/YGuang233/friends-rss-generator/output/data.json %}

但是这个国内好像访问不了,Stellar作者又给了一个api接口

1
2
{% timeline type:fcircle api:https://api.vlts.cc/output_data/v1/YGuang233/friends-rss-generator %}
{% endtimeline %}

将其改成你对应的厂库就可以了

或者你可以显示在侧边栏

blog\source\_data\widgets.yml
1
2
3
4
5
6
timeline_friend_blog:
layout: timeline
title: 朋友的文章
api: https://api.vlts.cc/output_data/v1/YGuang233/friends-rss-generator
type: fcircle
limit: 30 # 限制显示30条

在头代码sidebar加入这个自定义的组件

1
sidebar: [timeline_friend_blog]

使用「memos」

待编辑……qwq(其实写了的,一定是不见了!)

接入API

欢迎图片

接口地址
1
https://api.szfx.top/info-card/?word=%E6%AC%A2%E8%BF%8E%E6%9D%A5%E8%AE%BF%20%E5%8D%8A%E9%86%92%E7%9D%80%E7%9A%84%E9%98%B3%E5%85%89%20%E7%9A%84%E5%8D%9A%E5%AE%A2

你可以试着打开这个网址将word=欢迎词,修改成你喜欢的

blog/source/_data/widgets.yml
1
2
3
4
5
welcome:
layout: markdown
title: 哈喽~ 旅人:
content: |
<img src="https://api.szfx.top/info-card/?word=%E6%AC%A2%E8%BF%8E%E6%9D%A5%E8%AE%BF%20%E5%8D%8A%E9%86%92%E7%9D%80%E7%9A%84%E9%98%B3%E5%85%89%20%E7%9A%84%E5%8D%9A%E5%AE%A2">

效果展示,看起来挺有新意的,就是图片内的字太小

将上面的img部分改成下面的,可以有在文章那样的缩放图效果

blog/source/_data/widgets.yml
1
<img src="https://api.szfx.top/info-card/?word=%E6%AC%A2%E8%BF%8E%E6%9D%A5%E8%AE%BF%20%E5%8D%8A%E9%86%92%E7%9D%80%E7%9A%84%E9%98%B3%E5%85%89%20%E7%9A%84%E5%8D%9A%E5%AE%A2" fancybox="true">

二次元图片

是非题 | ACG-API (shifeiti.com)

我们使用是非题大佬提供的api可以获取对应或随机的二次元图片

食用方式也是很简单,和上面接入欢迎图片是一样的将src改成下面的api接口url地址即可。

假定 API 部署到 https://acgapi.shifeiti.com

访问 https://acgapi.shifeiti.com/api ,跳转至图片地址

访问 https://acgapi.shifeiti.com/api/?id=数字 ,跳转至指定图片

示例 https://acgapi.shifeiti.com/api/?id=1717

示例 https://acgapi.shifeiti.com/api/?id=1717&json

效果展示

是挺赞的。

访问 https://acgapi.shifeiti.com/api/?json

输出json,例如:

1
{"id":3,url":"https://z3.ax1x.com/2021/08/19/fqDucQ.png"}   

相似的大家可以去网上找

如下面这个

这个博主推荐的推荐的api还有涩图版本🙈

诗词和骚话

今日诗词

接入随机诗词提升网站逼格

今日诗词 - 一言API - 诗词实时智能推荐 - 今日诗词开放接口 - 今日诗词 API - 个人文章分享 (jinrishici.com)

接着我们只要在welcome引入就可以了

blog\source\_data\widgets.yml
1
2
3
4
5
6
7
8
welcome:
layout: markdown
title: 哈喽~ 远道而来的朋友呀~
content: |
欢迎来到我这么一个小破站哟~
希望你能够在这里找到自己想要了解的东西
<span id="jinrishici-sentence">正在加载今日诗词....</span>
<script src="https://sdk.jinrishici.com/v2/browser/jinrishici.js" charset="utf-8"></script>

效果展示

xenv/gushici: 一言·古诗词 API (Hitokoto API),随机返回一条古诗词名句。采用 Vert.x + Redis 全异步开发,毫秒级稳定响应。 (github.com)

其开源项目

或者接入另外一个一言开源api

一言

Hitokoto - 一言

blog\source\_data\widgets.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
welcome:
layout: markdown
title: 哈喽~ 远道而来的朋友呀
content: |
<p id="hitokoto">
<a href="#" id="hitokoto_text">:D 获取中...</a>
</p>
<script>
fetch('https://v1.hitokoto.cn')
.then(response => response.json())
.then(data => {
const hitokoto = document.querySelector('#hitokoto_text')
hitokoto.href = `https://hitokoto.cn/?uuid=${data.uuid}`
hitokoto.innerText = data.hitokoto
})
.catch(console.error)
</script>

这个感觉更像是一个有趣的灵魂

我自己?

但是你也可以接入大脑,放入一些自己想说的话,更加个性化和展现个人魅力!

blog\source\_data\widgets.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
welcome:
layout: markdown
title: 哈喽~ 远道而来的朋友呀
content: |
<p id="bxzdyg">
<span id="bxzdyg_text">:D 获取中...</span>
</p>
<script>
const myTextArray = ['龙年大吉!阖家欢乐!', '目标实现共产主义', '天天幸福快乐!健健康康!远离疾病与伤痛。', '人民万岁!', '我想玩黑神话悟空!','丝之歌!呜呜呜~','天行健!君子以自强不息']; // 将字符替换为你要说的话
const getRandomText = (array) => {
return array[Math.floor(Math.random() * array.length)];
};
const bxzdyg = document.querySelector('#bxzdyg_text');
bxzdyg.innerText = getRandomText(myTextArray);
</script>

这部分也可以改成图片,用img标签,图片就放在blog\source\assets里就行了,然后你也明白该怎么做了吧?

接入Steam(危)

待编辑……qwq(其实写了的,一定是不见了!)

接入音乐播放器

PicGo

使用PicGo无非就是连接自己的图床,截图直接上传到网上,图床的服务器上与博客分开。

一般事是合一个markdown的编辑器使用的,文章推送再用命令提示符或者终端之类的切换到blog目录下,执行一段推送命令即可。这个就是使用这个的思路:

  1. 提高编写效率
  2. 减轻服务器分担,进行分流,提高阅读感受。

待编辑……qwq(其实写了的,一定是不见了!)

加水印

待编辑……qwq(其实写了的,一定是不见了!)

评论系统

这篇主要讲解waline的评论系统的部署和使用,当然你还可以选择其他的评论系统,如 twikoo,artalk等都是不错的评论系统,自己觉得合适和好用才是最重要的。

站点统计

参考文章

Hexo添加字数统计 - Ezhixuan

Stellar主题在页脚添加访客统计及运行时间 - 酷小呵 (kuhehe.top)

这两位博主讲的都是可行的方法,不过第一种太麻烦了,我之前也尝试过,不过不利于以后更新,他直接上手模板文件,我还是建议在给定的位置插入,下方是本站的插入方式

footer:sitemap:

blog\_config.stellar.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
28
footer:
content: |
<!--不蒜子计数器-->
<script async src="//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js"></script>
<!--添加一个访问量-->
<span>
本"<span style="color: hsl(192 98% 55%); font-weight: bold;">页面</ a></span>"访问 <span id="busuanzi_value_page_pv" style="color: hsl(192 98% 55%); font-weight: bold;"></span> 次 | 👀总访问 <span id="busuanzi_value_site_pv" style="color: hsl(192 98% 55%); font-weight: bold;"></span> 次 | 总访客 <span id="busuanzi_value_site_uv" style="color: hsl(192 98% 55%); font-weight: bold;"></span> 人
</span>
</br>
<span id="runtime_span"></span>
<script type="text/javascript">
function show_runtime() {
window.setTimeout("show_runtime()", 1000);
X = new Date("2023/09/17 17:00:00");
Y = new Date();
T = (Y.getTime() - X.getTime());
M = 24 * 60 * 60 * 1000;
a = T / M;
A = Math.floor(a);
b = (a - A) * 24;
B = Math.floor(b);
c = (b - B) * 60;
C = Math.floor((b - B) * 60);
D = Math.floor((c - C) * 60);
runtime_span.innerHTML = "⏱️本站已运行 " + A + "天" + B + "小时" + C + "分" + D + "秒"
}
show_runtime();
</script>

自定义样式

使用霞鹜文楷字体

blog\_config.stellar.yml
1
"LXGW WenKai Screen"

将themes中的stellar的style复制到根目录下的_config.stellar.yml

字体大小也可以在这里一起设置,在下面代码块一起贴出

找到style:font-family:body:,添加到最前面就可以了,放在前面的意思就是优先用前面的

blog\_config.stellar.yml
1
2
3
4
5
6
7
8
9
10
style:
font-size:
root: 16px # 阅读字体大小
body: .9375rem # 15px # 相对大小
code: 85% # 14px
codeblock: 0.8125rem # 13px
font-family:
logo: 'system-ui, "Microsoft Yahei", "Segoe UI", -apple-system, Roboto, Ubuntu, "Helvetica Neue", Arial, "WenQuanYi Micro Hei", sans-serif'
body: 'system-ui, "Microsoft Yahei", "Segoe UI", -apple-system, Roboto, Ubuntu, "Helvetica Neue", Arial, "WenQuanYi Micro Hei", sans-serif'

首页轮播图(1.19.0)

听stellar作者说首页这块地方要整点别的,后面的可以不用考虑了,如果你还是想要用的话,那就以这个版本为基础吧。

如果缺少或者说是没有目标文件,那就需要手动添加

添加自定义css

blog/themes/stellar/source/css/_custom/ 目录中添加 swiperstyle.styl 文件

blog/themes/stellar/source/css/_custom/swiperstyle.styl
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
div#swiper_container
background var(--card);
z-index auto
.blog-slider
position relative
border-radius 12px 12px 12px 12px
margin auto
padding: 10px
transition all .3s

.blog-slider__item
display flex
align-items center
&.swiper-slide-active
.blog-slider__img
img
opacity 1
transition-delay .3s
.blog-slider__content
& > *
opacity 1
transform none
& > *:nth-child(1)
transition-delay 0.3s
& > *:nth-child(2)
transition-delay 0.4s
& > *:nth-child(3)
transition-delay 0.5s
& > *:nth-child(4)
transition-delay 0.6s
& > *:nth-child(5)
transition-delay 0.7s
& > *:nth-child(6)
transition-delay 0.8s
& > *:nth-child(7)
transition-delay 0.9s
& > *:nth-child(8)
transition-delay 1s
& > *:nth-child(9)
transition-delay 1.1s
& > *:nth-child(10)
transition-delay 1.2s
& > *:nth-child(11)
transition-delay 1.3s
& > *:nth-child(12)
transition-delay 1.4s
& > *:nth-child(13)
transition-delay 1.5s
& > *:nth-child(14)
transition-delay 1.6s
& > *:nth-child(15)
transition-delay 1.7s



.blog-slider__img
width 300px
flex-shrink 0
height 200px
padding 10px
border-radius 20px
transform translateX(0px)
overflow hidden
&:after
content ''
position absolute
top 0
left 0
width 100%
height 100%
border-radius 15px
opacity 0.8
img
width 100%
height 100%
object-fit cover
display block
opacity 0
border-radius 5px
transition all .3s

.blog-slider__content
padding-right 50px
padding-left 25px
& > *
opacity 0
transform translateY(25px)
transition all .4s


.blog-slider__code
text-align left
color var(--text-p3)
margin-bottom 10px
display block
font-weight 500

.blog-slider__title
text-align left
font-size $fs-h3
font-weight 500
color var(--text-p1)
margin-bottom 15px
-webkit-line-clamp 1
display -webkit-box
overflow hidden
-webkit-box-orient vertical

.blog-slider__text
text-align left
font-size $fs-h5
color var(--text-p3)
-webkit-line-clamp 3
display -webkit-box
overflow hidden
-webkit-box-orient vertical
margin-bottom 15px
line-height 1.5em
width 100%
word-break break-all
word-wrap break-word

.blog-slider__button
display inline-flex
background-color var(--block)
padding 14px 14px
border-radius 8px
color var(--text-p1)
text-decoration none
font-weight 500
justify-content center
text-align center
letter-spacing 1px
display none
&:hover
background-color var(--block-hover)


.blog-slider .swiper-container-horizontal > .swiper-pagination-bullets, .blog-slider .swiper-pagination-custom, .blog-slider .swiper-pagination-fraction
bottom 10px
left 0
width 100%

.blog-slider__pagination
position absolute
z-index 1
right 20px
width 11px !important
text-align center
left auto !important
top 50%
bottom auto !important
transform translateY(-50%)
&.swiper-pagination-bullets
.swiper-pagination-bullet
margin 8px 0 !important
.swiper-pagination-bullet
width 11px
height 11px
display block
border-radius 10px
background #858585
opacity 0.2
transition all .3s
.swiper-pagination-bullet-active
opacity 1
background $color-theme
height 30px

@media screen and (max-width: 600px)
.blog-slider__pagination
transform translateX(-50%)
left 50% !important
top 320px
width 100% !important
display flex
justify-content center
align-items center

.blog-slider__pagination
&.swiper-pagination-bullets
.swiper-pagination-bullet
margin 0 5px !important

.blog-slider__pagination
.swiper-pagination-bullet-active
height 11px
width 30px

.blog-slider
min-height 350px
height auto
margin-bottom 10px

.blog-slider__content
margin-top 20px
text-align center
padding 0 30px

.blog-slider__item
flex-direction column

.blog-slider__img
.blog-slider__content
padding-left 10px
padding-right 10px

.blog-slider__pagination.swiper-pagination-clickable.swiper-pagination-bullets
top 230px

添加自定义文件之后需要在 themes/stellar/source/css/main.styl 中引用

themes/stellar/source/css/main.styl
1
2
// 自定义样式
@import '_custom/*'

增改 文件

添加如下代码:

blog/themes/stellar/layout/_partial/scripts/index.ejs
1
2
3
4
5
// -------- start 自定义首页文章轮播
if ('<%- theme.customSwiperTopArticle.enable %>' == 'true') {
stellar.plugins.customSwiperTopArticle = Object.assign(<%- JSON.stringify(theme.customSwiperTopArticle) %>);
}
// -------- end 自定义首页文章轮播
blog/themes/stellar/layout/index.ejs
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
function layout_post_pin_article(type,post,content){
var el='';
if(post.post===undefined){
post.post='article';
}
//文章简述
var articleDescription='';
if(post.excerpt){
articleDescription=strip_html(post.excerpt)
}else if(post.description){
articleDescription=post.description
}else if(post.content&&theme.article.auto_excerpt>0){
articleDescription=truncate(strip_html(post.content),{length:theme.article.auto_excerpt})
}

el +='<div class="blog-slider__item swiper-slide">';
el +='<a class="blog-slider__img" href="' + url_for(post.link || post.path) + '">';
el +='<img width="48" height="48" no-lazy src="' + post.swiper_thumbnail + '" alt=""/>';
el +='</a>';
el +='<div class="blog-slider__content">';
el +='<span class="blog-slider__code">'+ date(post.date,config.date_format) +'</span>';
el +='<a class="blog-slider__title" href="' + url_for(post.link || post.path) + '" title="'+ (post.title || post.seo_title) +'">'+(post.title || post.seo_title) +'</a>';
el +='<div class="blog-slider__text">'+articleDescription +'</div>';
el +='<a class="blog-slider__button" href="' + url_for(post.link || post.path) + '">详情</a>';
el +='</div>';
el +='</div>';
return el;
}

function layout_posts(partial) {
var el = '';
el += '<div class="post-list post">';
if (is_home()) {
// pinned posts
const pinned = site.posts.filter(function(post){
return post.pin !== undefined;
}).sort((config.index_generator && config.index_generator.order_by) || '-date');

if (page.current === 1) {
el += '<div id="_custom-post-categories"></div>';
if(theme.customSwiperTopArticle.enable){
el+='<div class="blog-slider swiper-container-fade swiper-container-horizontal" id="swiper_container">';
el+='<div class="blog-slider__wrp swiper-wrapper">';
pinned.forEach((post,i)=>{
el+=layout_post_pin_article('post',post,partial(post));
});
el+='</div>';
el+='<div class="blog-slider__pagination swiper-pagination-clickable swiper-pagination-bullets"></div>';
el+='</div>';
}else{
pinned.forEach((post,i)=>{
el += layout_post_card('post',post,partial(post));
});
}
}
// unpinned posts
page.posts.each(function(post){
if (theme.customSwiperTopArticle.enable) {
el += layout_post_card('post', post, partial(post));
}else{
if(post.pin == undefined){
el += layout_post_card('post',post,partial(post));
}
}
})
} else {
page.posts.each(function(post){
el += layout_post_card('post', post, partial(post));
})
}
el += '</div>';
return el;
}

起始位置在function layout_post_card的下面

覆盖了function layout_posts

末尾在function layout_wikis的上方

blog/themes/stellar/source/js/main.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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
// swiper
// ------------------- start 首页置顶文章轮播 新增
if (stellar.plugins.swiper) {
const swiper_container = document.getElementById('swiper_container');
if (swiper_container !== undefined) {
stellar.loadCSS(stellar.plugins.customSwiperTopArticle.css);
stellar.loadScript(stellar.plugins.customSwiperTopArticle.js, {defer:true}).then(function () {
var swiper = new Swiper('.blog-slider', {
passiveListeners: true,
spaceBetween: 30,
effect: 'fade',
loop: true,
autoplay: {
disableOnInteraction: true,
delay: 3000
},
mousewheel: false,
// autoHeight: true,
pagination: {
el: '.blog-slider__pagination',
clickable: true,
}
});
swiper_container.onmouseenter = function() {
swiper.autoplay.stop();
};
swiper_container.onmouseleave = function() {
swiper.autoplay.start();
}
});
}
// ------------------- end 首页置顶文章轮播 新增

// swiper
const swiper_api = document.getElementById('swiper-api');
if (swiper_api != undefined) {
stellar.loadCSS(stellar.plugins.swiper.css);
stellar.loadScript(stellar.plugins.swiper.js, {defer:true}).then(function () {
var swiper = new Swiper('.swiper-container', {
slidesPerView: 'auto',
spaceBetween: 8,
centeredSlides: true,
loop: true,
pagination: {
el: '.swiper-pagination',
clickable: true,
},
navigation: {
nextEl: '.swiper-button-next',
prevEl: '.swiper-button-prev',
},
});
})
}
}
引入swiper轮播图插件
blog/_config.stellar.yml
1
2
3
4
5
6
# 自定义swiper文章置顶
customSwiperTopArticle:
enable: true
css: https://cdn.jsdelivr.net/gh/XuxuGood/simple-blog-cdn@main/css/swiper/swiper.min.css
js: https://cdn.jsdelivr.net/gh/XuxuGood/simple-blog-cdn@main/js/swiper/swiper.min.js
init_js: https://cdn.jsdelivr.net/gh/XuxuGood/simple-blog-cdn@main/js/swiper/swiper_init.js
正式使用
1
2
pin: true # 是否置顶
swiper_thumbnail: 图片地址
效果展示

由于字少,没有将左边顶过去

bug和缺陷

将鼠标放在文字那一块有一个图片放大放大镜图标
在除了主页外就会报错,待修(不过不影响使用),最大的问题应该是加载的问题,图片比js早就会出现分离的状况

嗯,怎么嗦呢,他这个都是有点偏左,我某名奇妙就是想让这块部分居中,神奇吧?!那就开干吧

方法一

使用css对样式调整一下,然后在head导入css。需要对css选择器和样式有一定了解。

blog/source/css/override.css
1
2
3
.page-footer .text p {
text-align: center;
}
blog/_config.yml
1
2
3
inject:
head:
- <link rel="stylesheet" href="/css/override.css">

方法二

使用<center>标签

blog\_config.stellar.yml
1
2
3
4
5
footer:
content: |
<center>
<p>本破站由 <a href="/">@BXZDYG</a> 使用 <a target="_blank" rel="noopener" href="https://github.com/xaoxuu/hexo-theme-stellar">Stellar</a> 主题创建。<br>本博客部分素材来源于网络,如有侵权请联系<a href="mailto:1476341845@qq.com">1476341845@qq.com</a>删除<br>本博客所有文章除特别声明外,均采用 <a target="_blank" rel="noopener" href="https://creativecommons.org/licenses/by-nc-sa/4.0/">CC BY-NC-SA 4.0</a> 许可协议,转载请注明出处。</p>
</center>

使用这种方式嵌套*[@BXZDYG](/)*这类markdown语法无法进行正常转义,需要先运行一次,将对应的html元素复制下来,放到这里。

更换代码高亮显示

诱因:默认的无法识别vue

待编辑……qwq(其实写了的,一定是不见了!)

图片点击放大

官方文档很详细的说明了

Stellar:表达类标签组件(15+个) - XAOXUU

但是居然你跟着我一步一步的配置,那我就不能不提,我觉得这个很重要

全局配置
blog\_config.stellar.yml
1
2
3
tag_plugins:
image:
fancybox: true # true, false # 全局配置图片点击放大
局部配置
1
{% image ./index/image-20230809162752613.png fancybox:true %}

黑夜模式

代码过长,写在这篇文章里了。

常见错误

1
2
3
4
5
6
hexo : 无法将“hexo”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。
所在位置 行:1 字符: 1
+ hexo --help
+ ~~~~
+ CategoryInfo : ObjectNotFound: (hexo:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException

没有进行全局安装,解决办法,将node_modules文件中的.bin文件设置环境变量

1
E:\....\blog\node_modules\.bin

如果还是不行,那就使用npm run 之类的命令吧,每次运行项目你也可以看见的

package.json

1
2
3
4
5
6
7
"scripts": {
"build": "hexo generate",
"clean": "hexo clean",
"deploy": "hexo deploy",
"server": "hexo server",
"new": "hexo new"
},
1
2
3
4
5
6
npm run server # 运行
npm run clean #清除public
npm run build #build public文件
npm run new 文章 # 创建文章
npm run new page # 创建页面
npm run new draft # 创建草稿 # 不会被build

更新后引起的错误

头代码中的参考资料

1
2
3
4
5
references:
- title: Django+cropper实现用户头像裁剪, 预览和上传 - 大江狗的文章 - 知乎
url: https://zhuanlan.zhihu.com/p/41181618
- title: 在Django中如何限制上传文件的类型与大小_Sc.Crist的博客-CSDN博客
url: https://blog.csdn.net/weixin_51523373/article/details/117562387

现象:无法build正常文章,其他文章都能够生成

新版本:Stellar:编写文章以及独立页面 - XAOXUU

1
2
3
references:
- '[Django+cropper实现用户头像裁剪, 预览和上传 - 大江狗的文章 - 知乎](https://zhuanlan.zhihu.com/p/41181618)'
- '[在Django中如何限制上传文件的类型与大小_Sc.Crist的博客-CSDN博客](https://blog.csdn.net/weixin_51523373/article/details/117562387)'

我大概明白这部分更新的意义是什么,就是可以直接复制到头代码里面,省去自己划分的时间,之前还需要划分一个auth

消失的tag

一刻也没有为tag哀悼,立刻赶来战场的是…hashtag !

图片无非正常显示

不知怎么评价,多clean build就好了

本来正常的静态友链和网站卡片都无法显示

改了,详见官方文档

具体变更实在原有的主键划分上分为多个yaml子文件


本破站由 @BXZDYG 使用 Stellar 主题创建。
本博客部分素材来源于网络,如有侵权请联系1476341845@qq.com删除
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。

本"页面"访问 次 | 👀总访问 次 | 总访客
全部都是博主用心学编写的啊!不是ai啊 只要保留原作者姓名并在基于原作创作的新作品适用同类型的许可协议,即可基于非商业目的对原作重新编排、改编或者再创作。