1

在 Hugo 中使用 Sass

 2 years ago
source link: https://wocai.de/post/2019/03/%E5%9C%A8-hugo-%E4%B8%AD%E4%BD%BF%E7%94%A8-sass/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

在 Hugo 中使用 Sass

三月 25, 2019 · 2 分钟 · kokdemo

目录

当网站结构复杂的时候,使用 sass 就很必要了。但是 hugo+sass 的教程很少见,我这里参考一些英语资料总结一些你可能需要的 tips。

一、Sass 的支持#

从 0.43版本之后,Hugo 就支持了 Sass 的编译,这意味着在编译静态网站的时候不用同时运行 Gulp 或者其他的什么前端工具。

什么,你连 Sass 是什么都不知道,快戳这个链接看看吧。

二、Sass 的文件结构#

在 Hugo 中,你只能把 Sass 的源文件放到 /assets/scss//themes/your-theme/assets/scss/ 下,没有别的路径可以选择。

这里假设入口 scss 文件为 main.scss。根据《Architecture for a Sass Project》的建议,我们也在 scss 文件夹下创建这样的目录:

vendor/  预设文件
base/    
|
|-- _variables.scss   变量
|-- _mixins.scss
|-- _placeholders.scss

layout/   框架
components/    模块
pages/
main.scss   入口

对了,这篇文章的作者叫做 Hugo Giraudel,如果你在Google 中搜索 hugo + sass ,大概率搜索到的是这位大牛写的关于 sass 的文章……

接着,在 main.scss 中将这些模块都 @import 进去。

三、通过 Hugo 编译 scss 文件#

如果你前面做的都没问题,那么在对应的模板中加入:

{{ $styles := resources.Get "scss/main.scss" | toCSS | minify | fingerprint }}

其中 resouces.Get 是 Huho 提供的函数获取 scss 文件内容,后面的 toCSS,minify,fingerprint是一些管道操作,用来编译和压缩 CSS。

Fingerprint 这个技术可以给生成的文件加上独一无二的 hash 文件名,这样网站更新后,用户从CDN拉取的也是最新的 css 而不是缓存中的老文件。

接着,在 html 的 head 中加入

<link rel=”stylesheet” href=”{{ $styles.Permalink }}” integrity="{{ $styles.Data.Integrity" media=”screen”>

基本就完成了整个引入的操作。

四、覆写主题中已有的 scss#

如果你已经引入了别人的主题,对方有一个 scss 文件,你自己想要覆写,你可以在本地的 /assets/scss/ 下建立一个同名的文件,这个文件的优先级比主题中的更高。

五、根据 Hugo 的模板来写 scss#

我目前使用的是 hugo-paper 主题,当然我自己已经魔改好几轮了。包括:

  • 增加图片展示
  • 增加 valine 支持
  • 增加 脑图 支持
  • 增加 category 支持

姑且把这个主题叫做 hugo-paper-plus 吧。

这个主题的模板很简单,一共包括四个部分:

  • 全局的 header.html
  • 全局的 footer.html
  • 文章列表页 list.html
  • 文章页 single.html

所以针对这个结构,我想到对应的 scss 结构是这样的:

  • /pages/single.scss
  • /pages/list.scss
  • /layout/header.scss
  • /layout/footer.scss
  • /components/list-item.scss

六、分割 CSS,重写#

这段就没什么好说的了,苦逼编码中。目前已经将一个大的 css 文件分割成了若干个小文件。

啊对了,如果你和我一样用的 netlify 来编译网站的话,记得修改一下 hugo 的版本,最新的版本是 0.54.02019-05-13-40931.jpg

参考文章:

How to cache-bust and concatenate JS and SASS files with Hugo in 2018


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK