构建与托管
本站使用 HEXO 构建生成静态网站文件,托管在云服务器创建的 Plesk 面板中。
在 Plesk 中配置了 Webhook,当我提交变更到我的 Github 私有仓库以后,触发 Actions 构建网站,变更的内容将自动同步到 Plesk 网站文件夹进行更新。
个性化
主题
使用 Icarus 主题。
大屏设备可以获得最佳阅读体验。
字体
本站共计使用两种开源字体:
- LXGWWenKai
The quick brown fox jumps over the lazy dog 敏捷的棕色狐狸跳过了懒狗 - SourceHanSerifCN
The quick brown fox jumps over the lazy dog 敏捷的棕色狐狸跳过了懒狗
字体文件由脚本收集所有用到字符简化而成,提高加载速度。
generate-font-files.js1 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
| const fs = require("fs"); const _ = require("lodash"); const Fontmin = require("fontmin");
const directory = "source/_posts"; const scriptDirectory = "custom-scripts/font"; const fontFileDirectory = `${scriptDirectory}/files`;
const files = fs.readdirSync(directory).filter((item) => item !== ".DS_Store"); const fonts = fs .readdirSync(fontFileDirectory) .filter((item) => item !== "index.js");
const getLetters = () => { const letterMap = {};
_.forEach(files, (file) => { const fileContent = fs.readFileSync(`${directory}/${file}`, "utf8"); const letters = _.toArray(fileContent); _.forEach(letters, (letter) => { if (!letterMap[letter]) { letterMap[letter] = 1; } }); }); return Object.keys(letterMap).join(""); };
const currentLetters = getLetters();
const lettersText = fs.existsSync(`${scriptDirectory}/letters.txt`) ? fs.readFileSync(`${scriptDirectory}/letters.txt`, "utf8") : "";
if (currentLetters === lettersText) { return; }
fs.writeFileSync(`${scriptDirectory}/letters.txt`, getLetters());
const generateFontFile = (letters) => { _.forEach(fonts, (font) => { const task = new Fontmin() .src(`${fontFileDirectory}/${font}`) .dest("themes/icarus/source/fonts") .use( Fontmin.glyph({ text: letters, hinting: false, }) ) .use(Fontmin.ttf2woff2());
task.run(function (err, files) { if (err) { throw err; } }); }); };
generateFontFile(currentLetters);
|
插件
懒加载
使用了 hexo-lazyload-element 处理图片、视频、iframe 资源的懒加载,提升页面性能的同时避免消耗不必要的流量的。
使用 hexo-generator-feed 生成 /feed.xml
便于 RSS 阅读器订阅。
你可以使用以下地址订阅内容。
RSS1
| https://lynan.cn/feed.xml
|
评论区
使用 Gitalk。
彩蛋
CSS 动画
iframe 交互
页面和 iframe 之间使用了 postMessage 方式进行通信,丰富静态页面的功能。
单独设置的文章背景
例如关西旅行的枫叶背景。