2026-11-13 13:17:59 +08:00
https://github.com/MoonLord-LM/MyPages
MyPages
Static Site Generator
静态页面生成工具
将 /pages 目录下的 Markdown / HTML 等源文件,构建为可部署的静态站点文件,输出到 /dist 目录
支持公共模板拼接、代码高亮、远程图片本地化、页面密码保护、自动生成列表页、自动生成站点地图和外链清单
[使用说明]
依赖 Node.js 运行,需要先安装 Node.js
执行 build.bat 即可完成构建
[生成规则]
页面文件
/pages 目录下存放 html 或 md 文件,视为页面文件
优先使用 html 文件生成页面,如果没有同名的 html 文件,则使用 md 文件进行生成
例如首页的内容就应该存放到 /pages/index.html 或 /pages/index.md
特殊文件名:header.html 和 footer.html,视为公共模板文件,不视作页面文件
生成结果
页面生成后,按原目录结构,存放到 /dist 目录中,例如 /pages/blog/post.md → /dist/blog/post.html
静态资源,按原目录结构,复制到 /dist 目录中,例如 /pages/assets/style/blog.css → /dist/assets/style/blog.css
公共模板文件 header.html 和 footer.html 不复制
构建时,默认会先清空 /dist 中的所有文件和文件夹,以保证和 /pages 一致
特殊路径: /dist/static/,构建过程不会清空,里面的文件只做新增、修改,不做删除
推荐将长期不修改的、较大的静态资源文件,命名为 <名称>.<哈希值>.<扩展名> 的格式,放到 /dist/static/ 中
静态资源
推荐使用 /assets 目录,单独存放页面使用的视频、图片、js、css、字体等各种静态资源文件
/pages 目录下的所有文件,只要不是 html 或 md 文件,一律视为静态资源
静态资源会被原样复制到 /dist 中对应的路径下,目录结构与 /pages 保持一致
例如 /pages/favicon.ico → /dist/favicon.ico
页面中引用静态资源时,必须使用相对路径,例如 ./assets/image/logo.png
如果 Markdown 中使用远程图片链接(http(s)://),自动下载并保存到页面所在目录的 assets/,并改写为本地相对路径
公共模板
header.html 和 footer.html 作为页面头部和底部加载的公共模板,与原始 html 进行拼接处理
header.html 的拼接位置在原始 html 的 <body> 标签后面,紧挨着的位置
footer.html 的拼接位置在原始 html 的 </body> 标签前面,紧挨着的位置
自动尝试向同级或上级目录,寻找最临近的 header.html 和 footer.html 文件,两者独立处理,缺失某个则仅省略该模板
模板中的静态资源引用,按模板文件的位置写相对路径,但是生成时,需要根据最终文件的位置,自动调整相对路径
自动调整相对路径,支持 src、href、url() 写法
密码保护
以 .enc.md 后缀结尾的文件,视为需要做密码保护的页面
在 .gitignore 中忽略 .enc.md 文件,避免提交到远程仓库中,保证安全
页面内容第一行必须是 <!-- { "password" : "xxxxxx" } --> 的形式,在注释中内嵌一个配置 JSON,保存密码
本地执行构建时,将 md 渲染为 html,然后压缩为 gzip 格式,然后用密码加密处理,保存为 .html.zip.enc 后缀
同时,生成一个与页面 md 同名的 html,只包含一个密码输入框
用户输入正确密码后,对 .html.zip.enc 做解密和 gzip 解压,然后再显示出实际内容
加密算法参考 /pages/tools/file-encrypt-aes.html 的实现
最终生成的 .html 和 .html.zip.enc 文件,在 /pages 和 /dist 目录中都进行保存
自动列表
当某个文件夹下存在多个页面,但没有 index 页面存在时,触发自动列表规则
首先,生成一个 index.html 的列表页面,展示当前文件夹下的全部页面和摘要信息,并带有跳转到每个页面的链接
对于 md 文件,摘要信息是第一行文本内容,对于 html 文件,摘要信息优先取 title,或者取 body 的第一行文本内容
对于存在 .enc.md 或 .html.zip.enc 的页面,因为有密码保护机制,不展示摘要信息,只显示页面受密码保护即可
然后,对此文件夹下的每个页面的 html 增加内容,在页面左侧展示一个简单的竖向列表菜单,可以在列表间跳转以及返回 index 页面
站点地图
自动列举 /dist 中所有的 html、php 文件,生成站点地图,存放到 /dist/sitemap.xml 中
站点地图需要精确到文件名,例如 index.html 和 index.php 是两个不同的文件,都列举出来
去除重复,对链接按字母做排序
外链清单
尝试扫描 /dist 中所有的 html、php 文件,将引用的外部站点的链接清单,存放到 /dist/external-url.json 中
需要包含完整的 URL 链接和参数,例如 index.html?q=1 和 index.html?q=2 是两个不同的链接,都列举出来
对于密码保护的页面,不采集外部链接,保证安全
去除重复,对链接按字母做排序
[工程结构]
MyPages/
├── dist/ # 站点构建产物
├── pages/ # 站点源文件
├── tools/ # 辅助工具
│ ├── tools.bat # 工具入口
│ ├── github/ # GitHub 相关工具
│ │ ├── github-profile.bat # 采集 GitHub 用户资料
│ │ ├── github-languages-color.bat # 采集 GitHub Linguist 语言配色
│ └── search/ # 搜索功能相关工具
│ ├── quark-update.bat # 处理夸克网盘资源链接,生成站点搜索数据与收录页面
├── build.bat # 构建脚本
├── LLM.md # 提示信息
└── README.md # 工程说明