详细阅读前可以先去阅读常见错误
在此提前说明个人口语化,请谅解
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 npm install -g hexo-cli
局部安装
1 2 yarn add hexo npm intall hexo
hexo初始化 全局安装可以直接在空文件夹里执行下面这一句话
新建一个网站。如果没有设置 folder
,Hexo 默认在目前的文件夹建立网站,并且要求为空文件夹。
局部安装或者全局安装失败可以执行这语句话
在blog\package.json他自动配置了四种脚本命令
目录结构如下
生成静态文件。
启动服务器。默认情况下,访问网址为: http://localhost:4000/
。
清除缓存文件 (db.json) 和已生成的静态文件 (public)。
在某些情况(尤其是更换主题后),如果发现您对站点的更改无论如何也不生效,您可能需要运行该命令。
部署网站。部署之前预先生成静态文件
指令 | 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
将*_config.landscape.yml* 文件修改为 _config.stellar.yml ,并清空内容
先clean再build 这点很重要,在后面的修改样式增加一些功能需要重复执行这两个命令。
可以先启动服务器看看效果
主题更新 在 package.json
和中修改 stellar 的版本号,然后执行:
你果你有一些个性化的设置,并且复制了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 ├─...
重点在于wiki
和notes
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 ├─...
重点在于links
和authors
代码推送(必须) 线上部署用
1 yarn add hexo-deployer-git
你还需要在提送前绑定推送域名 此处为跳看
(用于搜索引擎和友链抓起你的动态)
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 path: atom.xml limit: 20
在你的主题配置中如:
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 limit: 5
现在
真的在遥相呼应,把我气的,必须在任何地方都出现底部的这些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
(文章)的文件夹
这是因为你需要进行一些简单的设置
blog\_config.yml 1 2 3 4 5 render_drafts: false post_asset_folder: true
编辑器New post 在配置好博客网站的一些设置后,不需要实时的打开项目,单独使用编辑器也可以。
记得新建的md文件要在blog\source_posts内,或者最后发布前和对应的图片文件夹放到这里。
这里我使用的markdown编辑器是Typora
在设置中对保存文件夹名进行更改
好吧,其实我这里提的,也不是什么好方法,你需要最后手动删除./${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 plugins: mermaid: enable: true js: https://cdn.jsdelivr.net/npm/mermaid@v9/dist/mermaid.min.js theme: 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 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: auto_cover: false auto_banner: false auto_excerpt: 200 license: '本文采用 [署名-非商业性使用-相同方式共享 4.0 国际](https://creativecommons.org/licenses/by-nc-sa/4.0/) 许可协议,转载请注明出处。' share: [wechat , weibo , email , link ] related_posts: enable: true title: 您可能感兴趣的文章
注意:有的人的分享网站可能和当前的网址不一样
是谁要害我啊?
其实吧,这个网站是根据这个有关的,更换网址记得修改
blog\_config.yml 1 2 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/ permalink: p/:abbrlink/ abbrlink: alg: crc32 rep: hex permalink_defaults: pretty_urls: trailing_index: true trailing_html: true
使用了这个每使用命令新建一篇文章会在头代码上插入abbrlink:及对应的转码后的代码,
这使得他会自动去匹配每个md文件的头代码中的abbrlink
不同算法、进制生成的链接格式如下:
如果你不想使用这个,就想让美丽的汉字显示在URL上,当然也没有问题,如果你还想自定义和指定路由可以采用下面的方式:
在 blog/_config.yml
中找到对应 permalink
标签,进行修改即可:
1 permalink: :year/:month/:day/: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托管静态页面站点。
优点:
不需要域名,有域名可以绑定自己的域名
不需要自己的服务器
一键推送方便
适合运维小白没错就是我
缺点:
访问慢,且看地理位置,看脸
GitHub Pages 快速入门 - GitHub 文档
创建一个仓库,仓库名
在_config.yml中
blog\_config.yml 1 2 3 4 5 6 7 8 9 10 11 12 deploy: type: git branch: master repo: git@github.com:YGuang233/YGuang233.github.io.git 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 [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
其他 待编辑……qwq(其实写了的,一定是不见了!)
一些问题 toc样式的问题 默认设置在
blog/source/_data/widgets.yml 1 2 3 4 5 6 7 toc: layout: toc list_number: false min_depth: 2 max_depth: 5 fallback: recent
禁用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 logo: src: /assets/wiki/vue/vue-js.svg small: 112px large: 240px description: 我的Vue学习笔记-不断改进和完善中,欢迎留言批斗,但别说的太过分,我并没有那么坚强。 sections: '快速开始' : [ 0 , 99 ] '基本使用' : [ 100 , 199 ] '深入组件' : [ 200 , 299 ] '应用规模化' : [ 300 , 399 ] '跨域问题' : [ 400 , 599 ] '进阶主题' : [ 600 , 699 ]
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: true description: 我的vue学习笔记-不断改进和完善中,欢迎留言批斗,但别说的太过分,我并没有那么坚强。 sidebar: - search: override: search filter: /wiki/vue/ placeholder: '在 Vue笔记 中搜索...' - toc - related path: /wiki/vue/ toc: '快速开始' : - 'Vue快速入门' '基本使用' : - 'Vue常用指令' - 'Vue对象提供的属性功能' - 'Vue对象的生命周期' - 'Vue组件化开发基础和浅入' - '项目构建工具' '深入组件' : - '单文件组件的使用' '应用规模化' : - 'Vue路由' '跨域问题' : - Axios - Proxy - WebSocket '进阶主题' : - '组合API' - 'Vite项目构建工具'
blog\source\_data\wiki.yml
头代码如下面写到
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相关问题 如何隐藏cover 和title 还有name 这个大概就是notes上拉有wiki的开始使用提示字样
blog\source\_data\wiki\notes.yml
这部分修改成这样
你可能还是不清楚子文件的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 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
在头代码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目录下,执行一段推送命令即可。这个就是使用这个的思路:
提高编写效率
减轻服务器分担,进行分流,提高阅读感受。
待编辑……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
将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 code: 85 % codeblock: 0. 8125rem 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
增改 文件 添加如下代码:
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 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 , pagination : { el : '.blog-slider__pagination' , clickable : true , } }); swiper_container.onmouseenter = function ( ) { swiper.autoplay .stop (); }; swiper_container.onmouseleave = function ( ) { swiper.autoplay .start (); } }); } 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 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
局部配置 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 npm run build npm run new 文章 npm run new page npm run new draft
更新后引起的错误 头代码中的参考资料 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子文件