Somnia
Without further ado
| markdown
Somnia 是一个 Alpine.js + Swup.js 的主题。下面是自定义主题的一些概述。
基础
- Hugo 查找优先级。如
website/assets/js/custom.js>website/themes/Somnia/assets/js/custom.js。前者存在时,优先使用。
这为非侵入式 Hugo 主题的自定义提供了基础。方便后续更新主题。
重要文件位置
Somnia 是主题名,也是文件夹名称。如果是 Hugo-Landscape 主题,则为目录前缀为 Hugo-Landscape。
- Somnia/layouts/partials/head/css.html 或 Somnia/layouts/_partials/head/css.html
- Somnia/layouts/partials/head/js.html 或 Somnia/layouts/_partials/head/js.html
- Somnia/assets/css/
- Somnia/assets/js/
- Somnia/layouts/partials/data.html 或 Somnia/layouts/_partials/data.html
主要文件 - JS
整体 js 逻辑:
- 主题代码初始化内联防闪烁
- 定义变量,主要逻辑,库的引入加载,Alpine.js 组件函数。
- 引入 Swup.js 实现无刷新页面过渡。
- 引入 Alpine.js 实现响应式界面。简化 Swup.js 页面切换前后组件 js 逻辑。
- 引入 Async Alpine 实现异步加载 Alpine.js。切分 js 文件,适用于大型、独立、低频组件。如评论系统。简化 shortcodes 开发。
- Swup.js 初始化,定义页面切换逻辑。注册 sw.js 。
Somnia/layouts/partials/head/js.html - Hugo 模板引擎中用于管理和引入 JavaScript 文件的配置。js 位置:
Somnia/assets/js
.
|-- alpinejs.min.js
|-- async-alpine.min.js
|-- components.js
|-- custom.js
|-- main.js
|-- medium-zoom.min.js
|-- sw.js
|-- swup
| |-- Swup.umd.js
| |-- preload-plugin.js
| `-- scroll-plugin.js
`-- variable.jstext
variable.js
- 存储全局变量、配置参数
- 在各个模块间共享的数据
main.js
- 主入口文件
- 负责初始化整个应用
- 协调各个模块的加载和调用
components.js
Alpine.store('somnia')存储响应式全局状态function somniaData()处理页面数据 负责动态加载 js 等- 自定义组件逻辑
custom.js
- 用户
layouts/partials/head/js.html覆盖 - 欢迎内容
- 修改变量
- 定义 Swup.js 页面切换逻辑
第三方库 - JS
async-alpine.min.js
Code splitting and lazy-loading components for Alpine.js!
https://async-alpine.dev/ ↗
- Alpine.js的异步加载版本
- 优化页面加载性能
- 支持延迟加载Alpine组件
alpinejs.min.js
Your new, lightweight, JavaScript framework.
Simple.
Lightweight.
Powerful as hell.
Alpine is a rugged, minimal tool for composing behavior directly in your markup. Think of it like jQuery for the modern web. Plop in a script tag and get going.
Alpine is a collection of 15 attributes, 6 properties, and 2 methods.
https://alpinejs.dev/ ↗
- Alpine.js框架核心库
- 轻量级的JavaScript框架,类似Vue/React的响应式特性
- 用于处理DOM交互、数据绑定、事件监听等
medium-zoom.min.js
Medium Zoom - A JavaScript library for zooming images like Medium
https://medium-zoom.francoischalifour.com/ ↗
- Medium风格图片缩放库
- 点击图片可实现平滑放大预览
- 提供优雅的图片查看体验
swup/Swup.umd.js
Versatile and extensible page transition library for server-rendered websites
https://swup.js.org/ ↗
- Swup页面切换库核心
- 实现无刷新的页面过渡动画
- 提升单页应用(SPA)体验
swup/scroll-plugin.js
A swup plugin for customizable smooth scrolling.
https://swup.js.org/plugins/scroll-plugin/ ↗
- Swup的滚动位置管理插件
- 在页面切换时保存和恢复滚动位置
- 确保用户在不同页面间导航时滚动位置正确
其余逻辑 - JS
- Swup.js 初始化
- Swup.js 定义页面切换逻辑
- PWA 支持(可选)
整体作用 - JS
这套配置主要实现:
- 模块化开发 - 按功能拆分JS文件
- 增强交互 - 通过 Alpine.js 实现响应式界面。简化开发,提高可维护性。
- 改善体验 - Swup 实现平滑页面切换,medium-zoom 优化图片查看
- 性能优化 - 异步加载 Alpine 方便开发
这套配置适用:内容型网站(如博客、文档)或轻量级Web应用,在保持SEO友好的同时提供接近SPA的流畅体验。
主要文件 - CSS
Somnia/layouts/partials/head/css.html - Hugo 模板引擎中用于管理和引入 CSS 文件的配置。
注意:CSS import 是在 Hugo >= v0.158.0 时才支持的。