在 hugo 中使用 UnoCSS
这个网站使用了 hugo 静态网站生成器,CSS 方面使用 UnoCSS。以下记录了如何在 hugo 中使用 UnoCSS。
- 将主题文件的 CSS 样式引入修改如下:
{{- $unocss := resources.Match "css/*.css" | resources.Concat "css/main.css" -}}
{{- if hugo.IsProduction }}
{{ $unocss = $unocss | minify | fingerprint }}
{{ end -}}
<link rel="stylesheet" href="{{ $unocss.RelPermalink }}" {{ if hugo.IsProduction }} integrity="{{ $unocss.Data.Integrity }}" {{ end }}>
注意:
代码将会获取你的 assets/css
文件夹中的所有 CSS 文件。如果你更喜欢将 CSS 文件放置在其他文件夹或者放置在嵌套的文件夹中,则需要修改第一行代码。另外,生成的 main.css 文件是存储在 hugo 内存中的,所以无法查看到。
- 安装 UnoCSS 依赖,这里安装你需要的即可
npm install --save-dev @unocss/cli @unocss/preset-typography @unocss/preset-uno @unocss/preset-wind
- 创建
uno.config.ts
并导入预设
import { defineConfig, presetUno } from 'unocss'
export default defineConfig({
presets: [
presetUno(),
],
shortcuts: []
})
- 添加运行脚本到 package.json。
"scripts": {
"uno-dev": "unocss \"layouts/**/**/*.html\" --watch -o ./assets/css/uno.css",
"uno-build": "unocss \"layouts/**/**/*.html\" -o ./assets/css/uno.css"
},
之后运行 npm run uno-dev
应该就可以看到 UnoCSS 正确导入了。
另外:
如果想一行命令同时运行 hugo server
和 unocss
的话可以使用 concurrently
,并在脚本中添加
"start": "concurrently \"pnpm:dev\" \"pnpm:uno-dev\""
之后,运行 npm run start
便可使用一条命令在一个窗口中运行这两个命令了。
整个导入的过程其实还是踩了不少坑。例如:
- 获取 css 文件的时候,参考链接中是将 css 文件放置在
css/uno/main.css
路径下,但是使用resources.Match "css/*.css"
是无法获取到这个文件的,所以如果你也喜欢将它放置在子目录下,需要将这行代码修改成:resources.Match "css/**/*.css"
,但是如果只修改成resources.Match "css/**/*.css"
,hugo 又只会获取 css 所有子文件夹中的 css 文件,css 文件夹下的 css 文件是无法获取到的(这里虽然使用了**
通配符,但是是没有作用的)。 - 参考链接中使用的版本较低,
unocss/preset-typography
现在需要使用@unocss/preset-typography
来安装。 - 参考链接中也没有
scripts
,这还是在作者提供的hugo + UnoCSS
模板中找到的。不过这一步由于之前使用 TailwindCSS 的时候在这里踩过坑,所以还算顺利。
参考:https://github.com/unocss/unocss/discussions/555