建站过程中遇到的一些问题的总结
用的next8
0.远古时期的忘掉了……
0.1.这个是next的网址QAQ: https://theme-next.js.org/
0.2.悲伤的故事:Markdown语法在HTML区块标签中将不会被进行处理。例如,无法在HTML区块内使用Markdown形式的*强调*。
使用了自己的域名,更新后页面找不到github pages。
hexo d后仓库被强行覆盖,原先的CNAME就没有了。 在source文件夹里加一个CNAME再更新就好了。 CNAME里填写自己的域名名字。
使用next主题,出现% extends '_layout.swig' %等等
hexo在5.后删除了swig,需要自己手动安装
1 | npm i hexo-renderer-swig |
想要播放歌曲。
参考了很多不同站点的做法,其实大同小异。 最后发现还是去官网最快。 但是没能将云音乐红心歌单加进来还是不太开心,metingjs没解析出来。 aplayer:https://aplayer.js.org/#/zh-Hans/?id=%E5%85%A5%E9%97%A8 MetingJS:https://github.com/metowolf/MetingJS 首先根据APlayer教程安装:
1 | npm install aplayer --save |
然后到主题配置文件_config.yml改custom_file_path: 将head和sidebar加上(也就是去掉前边的#) 同时分别到hexo下source/_data里新建这两个njk文件
siderbar.njk里的内容直接参考MeetingJS主页的教程就好了
1 | <!-- require APlayer --> |
BUT, jsdelivr不好用了,可以改成(具体见这里:jsdelivr不稳定,替代品,pjax那里同理,自己改一下吧: 1
2
3
4
5
6
7
8
9
10
11<!-- require APlayer -->
<link rel="stylesheet" href="https://gcore.jsdelivr.net/npm/aplayer/dist/APlayer.min.css">
<script src="https://gcore.jsdelivr.net/npm/aplayer/dist/APlayer.min.js"></script>
<!-- require MetingJS -->
<script src="https://gcore.jsdelivr.net/npm/meting@2/dist/Meting.min.js"></script>
<meting-js
server="netease"
type="playlist"
id="3744805">
</meting-js>
meting-js里的参数除了这三个还有APlayer里的,反正具体看官网吧,我这里没必要多复制了。 上述是加云音乐的,还有藤子,酷狗,虾米,百度的可以改。
具体来说就是APlayer负责播放器的部分,MetingJS负责解析各大网站id。 但是autoplay真的能autoplay吗。→发现是浏览器限制了,唔,也好吧
最后在head.njk里写上
1 | <!--pjax:防止跳转页面音乐暂停--> |
可以跨页面放歌。 接着到主题配置文件_config.yml里把pjax改为true就好了。
添加sitemap,网站地图
安装搜索引擎插件:
1 | npm install hexo-generator-sitemap --save |
在站点配置文件中把url改为自己的域名
hexo cl -g后public会生成sitemap和baidusitemap两个xml文件
分别到谷歌、bing站点地图输入 域名/sitemap.xml
百度是专用的 域名/baidusitemap.xml
百度还可以手动提交:
安装插件:
1 | npm install hexo-baidu-url-submit --save |
在站点配置文件添加:
1 | baidu_url_submit: |
到普通收录_加快网站内容抓取,快速提交数据工具_站长工具_网站支持_百度搜索资源平台 (baidu.com)看自己的host和token
在站点配置文件更改deploy:
1 | deploy: |
注意repo和branch的缩进
这样以后hexo d的时候就自动提交url到百度了。 更新:但是后来发现这个baidu_url_submit可能会导致一些问题,hexo s后出现warning,虽然对提交后的成品网页没影响,但是无法预览也很麻烦,所以把nodejs退到了12……
希望某些文件夹不渲染
到站点配置文件检索skip,在skip_render后加上想不被渲染的,可使用glob表达式来匹配路径
如我这里的是:
1 | # Directory |
表示source/_ing/里的所有东西都不会被渲染
next主题偶尔打开会变成空白(2022.5.20)next 8
先甩上参考: 感谢分享 用同样的思路发现我也是这个原因,因为不太懂所以还是上next theme官网vendors下瞅了一下,直接复制翻译一下好了,反正我是看这个搞定的。
plugins: jsdelivr is used to set how to load the third-party plugins, e.g. anime.js. Third-party plugins are loaded from jsDelivr CDN by default.
And we also provide other optional CDNs, including the famous UNPKG and CDNJS. These CDN providers are chosen to deliver our third-party plugins because they are fast and reliable. Set plugins to unpkg or cdnjs to load them from different CDN provider.
Particularly, if you are a Chinese blogger or most of your visits come from China, please note that the CDNJS is blocked in some parts of China, don't use it as your CDN provider.
If your would like to load all third-party plugins from your site, please set plugins to local and install the @next-theme/plugins package: https://github.com/next-theme/plugins
plugins: 默认设置是jsdelivr,用来设置加载第三方插件(如anime.js)。 但我们也留了其他选项,比如著名的unpkg和cdnjs,选择这几个因为他们可靠且迅速,设置一个你想用的吧。 但是,如果您老在中国或者你访问者大多数在中国的话,注意cdnjs在中国部分地区禁了,谨慎选用。 虽然官网这么写了,但是实测是jsdelivr不稳定,另外两个可用,反正这种瞬息万变的东西自己看情况吧 但你要是想从自己网站加载第三方插件的话,把plugins项设置local然后安装@next-theme/plugins package: https://github.com/next-theme/plugins |
Custom CDN URLs Sometimes you may need to use CDNs other than jsdelivr, unpkg or cdnjs. For example, users can get faster loading speed in certain areas using the mirror site of jsDelivr.
To enable custom CDN URL, you need to set internal: custom and / or plugins: custom in the vendors section, and then specify a CDN URL with the custom_cdn_url option.
Remember to use the HTTPS protocol of CDN links when you enable HTTPS on your site.
自定义CDN链接 有时候,或许上边三个满足不了你,比如在某些特定的地方用JSDelivr的镜像站会快一些。 这时候你需要将internal和/或plugins设为custom,具体看你情况,然后填上底下的custom_cdn_url。 如果你的网站开启了HTTPS协议注意也要用CDN链接的HTTPS协议。 |
我目前是先改成unpkg了,如果之后还是经常空白就换成镜像站,还是不行的话就本地吧。
添加对公式的支持
再更新:
katex别的都挺好,能自动换行,能复制,可是在复杂一点的html语言里就会无法解析,懒得折腾跟着next官网又换成了mathjax,然后手动换行了。
看了mathjax官网,确实v3还不支持自动换行,摊手,就先这样吧。
但确实katex更好看……
更新: 看都推荐用mathjax,但用了之后长公式不能换行,换成katex感觉这个更好,还可以选中。 主题config.yml中math下开启katex, 然后前边差不多,先卸载原先的 1
npm uninstall hexo-math --save
1
npm i @upupming/hexo-renderer-markdown-it-plus --save
mathjax: 完全参考了这一篇文章 完全可行,但以防万一给自己备一份吧:
1.在hexo目录下使用下面的命令查看你是否已经安装了hexo-math插件 1
npm list hexo-math
1
npm uninstall hexo-math --save
1
npm install hexo-filter-mathjax --save
1
npm list hexo-filter-mathjax
1
2
3
4
5
6
7mathjax:
tags: none # or 'ams' or 'all'
single_dollars: true # enable single dollar signs as in-line math delimiters
cjk_width: 0.9 # relative CJK char width
normal_width: 0.6 # relative normal (monospace) width
append_css: true # add CSS to pages rendered by MathJax
every_page: false # if true, every page will be rendered by MathJax regardless the `mathjax` setting in Front-matter1
npm list hexo-renderer-marked
1
npm uninstall hexo-renderer-marked --save
1
npm install hexo-renderer-kramed --save
1
npm list hexo-renderer-kramed
1
2
3//escape: /^\\([\\`*{}\[\]()#$+\-.!_>])/,
//修改为:
escape: /^\\([`*\[\]()#$+\-.!_>])/,1
2
3//em: /^\b_((?:__|[\s\S])+?)_\b|^\*((?:\*\*|[\s\S])+?)\*(?!\*)/,
//修改为
em: /^\*((?:\*\*|[\s\S])+?)\*(?!\*)/,1
mathjax: false
这里要多提一嘴镜像站了,避免以后又有啥不能使的可以替换: CDNJS:原本的:cdnjs.cloudflare.com,可用替换:cdnjs.loli.net unpkg可作为jsdelivr的替换用
jsdelivr不稳定,替代品
替换法 cdn.jsdelivr.net选一个改: 1
2
3fastly.jsdelivr.net
gcore.jsdelivr.net
testingcf.jsdelivr.net
其他CDN站 https://cdn.bytedance.com/ 字节跳动 https://www.staticfile.org/ 七牛云 https://cdnjs.com/ https://unpkg.com/
替换背景
到next主题打开styles,在source _data.styl后加上: 1
2
3
4
5
6body {
background-image: url();
background-repeat: no-repeat;
background-attachment: fixed;
background-size: cover;
}1
2
3
4
5
6
7
8
9
10
11
12// 菜单栏
.header-inner {
opacity: 0.75;
}
// 侧边框
.sidebar{
opacity: 0.75;
}
// 文章
.post-block{
opacity: 0.8;
}
框框圆角
到next主题打开variables,source _data.styl中添加 1
2$border-radius-inner = 30px 30px 30px 30px;
$border-radius = 30px;
添加鼠特效小爆炸
参考了https://www.smoe.top/2020/12/27/Hexo-click/ 但是版本不同,所以我稍微改了一下。 js找个source文件夹放,然后直接在_data.njk里加上想要的那个效果就好了,改一下相应路径,我也是放的,所以就抄原博文的了 1
2
3
4<!--点击爆炸-->
<canvas class="fireworks" style="position: fixed;left: 0;top: 0;z-index: 1; pointer-events: none;" ></canvas>
<script src="//cdn.bootcss.com/animejs/2.2.0/anime.min.js"></script>
<script async src="/js/cursor/explosion.min.js"></script>