ToCSS
用法
使用 Hugo 擴展版和擴展/部署版本中包含的 LibSass 轉譯器,或安裝 Dart Sass(詳見 Dart Sass)以使用 Sass 語言的最新功能來將 Sass 轉譯為 CSS。
{{ $opts := dict "transpiler" "libsass" "targetPath" "css/style.css" }}
{{ with resources.Get "sass/main.scss" | toCSS $opts | minify | fingerprint }}
<link rel="stylesheet" href="{{ .RelPermalink }}" integrity="{{ .Data.Integrity }}" crossorigin="anonymous">
{{ end }}
Sass 有兩種語法形式:SCSS 和 縮排語法。Hugo 支援兩者。
選項
- transpiler
- (
string) 使用的轉譯器,默認為libsass,也可以選擇dartsass。Hugo 的擴展版和擴展/部署版本包含了 LibSass 轉譯器。若要使用 Dart Sass 轉譯器,請參閱下面的 安裝說明。 - targetPath
- (
string) 若未設定,轉譯後的資源目標路徑將是原始資產文件的路徑,並將其擴展名替換為.css。 - vars
- (
map) 一個鍵值對映射,將可用於hugo:vars命名空間。這對於 從 Hugo 模板初始化 Sass 變數 很有用。
// LibSass
@import "hugo:vars";
// Dart Sass
@use "hugo:vars" as v;
- outputStyle
- (
string) LibSass 可用的輸出樣式包括nested(預設),expanded,compact和compressed。Dart Sass 可用的輸出樣式包括expanded(預設)和compressed。 - precision
- (
int) 浮點數運算的精度。對於 Dart Sass 不適用。 - enableSourceMap
- (
bool) 如果為true,則會生成源地圖。 - sourceMapIncludeSources
- (
bool) 如果為true,則在生成的源地圖中嵌入源文件。對於 LibSass 不適用。 - includePaths
- (
slice) 一個相對於專案根目錄的路徑切片,轉譯器將使用這些路徑來解析@use和@import語句。
{{ $opts := dict
"transpiler" "dartsass"
"targetPath" "css/style.css"
"vars" site.Params.styles
"enableSourceMap" (not hugo.IsProduction)
"includePaths" (slice "node_modules/bootstrap/scss")
}}
{{ with resources.Get "sass/main.scss" | toCSS $opts | minify | fingerprint }}
<link rel="stylesheet" href="{{ .RelPermalink }}" integrity="{{ .Data.Integrity }}" crossorigin="anonymous">
{{ end }}
Dart Sass
Hugo 擴展版包含 LibSass 來將 Sass 轉譯為 CSS。2020 年,Sass 團隊已停止支援 LibSass,並推薦使用 Dart Sass。
為了使用 Sass 語言的最新功能,請在開發和生產環境中安裝 Dart Sass。
安裝概覽
Dart Sass 與 Hugo v0.114.0 及更高版本兼容。
如果您之前在 Hugo v0.113.0 及更早版本中使用了內嵌 Dart Sass1,請卸載內嵌 Dart Sass,再安裝 Dart Sass。如果兩者都安裝了,Hugo 會使用 Dart Sass。
如果您安裝 Hugo 為 Snap 套件,則無需額外安裝 Dart Sass。Hugo Snap 套件已包含 Dart Sass。
開發環境安裝
當您將 Dart Sass 安裝在 PATH 中的某個位置,Hugo 就能找到它。
| 操作系統 | 套件管理器 | 網站 | 安裝命令 |
|---|---|---|---|
| Linux | Homebrew | brew.sh | brew install sass/sass/sass |
| Linux | Snap | snapcraft.io | sudo snap install dart-sass |
| macOS | Homebrew | brew.sh | brew install sass/sass/sass |
| Windows | Chocolatey | chocolatey.org | choco install sass |
| Windows | Scoop | scoop.sh | scoop install sass |
您也可以安裝 預編譯二進制檔案,適用於 Linux、macOS 和 Windows。
運行 hugo env 可列出當前的轉譯器。
生產環境安裝
對於 CI/CD 部署(例如 GitHub Pages、GitLab Pages、Netlify 等),您需要在 Hugo 建立網站之前先安裝 Dart Sass2。某些服務提供商允許您使用上述的套件管理器,或者您可以下載並解壓預編譯的二進制檔案。
GitHub Pages
若要在 GitHub Pages 上安裝 Dart Sass,請在 GitHub Pages 工作流文件中添加以下步驟:
- name: 安裝 Dart Sass
run: sudo snap install dart-sass
如果您是第一次在存儲庫中使用 GitHub Pages,GitHub 提供了 入門工作流,其中包括 Dart Sass。這是開始使用的最簡單方法。
GitLab Pages
若要在 GitLab Pages 上安裝 Dart Sass,.gitlab-ci.yml 文件應如下所示:
variables:
HUGO_VERSION: 0.137.1
DART_SASS_VERSION: 1.80.6
GIT_DEPTH: 0
GIT_STRATEGY: clone
GIT_SUBMODULE_STRATEGY: recursive
TZ: America/Los_Angeles
image:
name: golang:1.20-buster
pages:
script:
# 安裝 Dart Sass
- curl -LJO https://github.com/sass/dart-sass/releases/download/${DART_SASS_VERSION}/dart-sass-${DART_SASS_VERSION}-linux-x64.tar.gz
- tar -xf dart-sass-${DART_SASS_VERSION}-linux-x64.tar.gz
- cp -r dart-sass/* /usr/local/bin
- rm -rf dart-sass*
# 安裝 Hugo
- curl -LJO https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/hugo_extended_${HUGO_VERSION}_linux-amd64.deb
- apt install -y ./hugo_extended_${HUGO_VERSION}_linux-amd64.deb
- rm hugo_extended_${HUGO_VERSION}_linux-amd64.deb
# 編譯
- hugo --gc --minify
artifacts:
paths:
- public
rules:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
Netlify
若要在 Netlify 上安裝 Dart Sass,netlify.toml 文件應如下所示:
[build.environment]
HUGO_VERSION = "0.137.1"
DART_SASS_VERSION = "1.80.6"
TZ = "America/Los_Angeles"
[build]
publish = "public"
command = """\
curl -LJO https://github.com/sass/dart-sass/releases/download/${DART_SASS_VERSION}/dart-sass-${DART_SASS_VERSION}-linux-x64.tar.gz && \
tar -xf dart-sass-${DART_SASS_VERSION}-linux-x64.tar.gz && \
rm dart-sass-${DART_SASS_VERSION}-linux-x64.tar.gz && \
export PATH=/opt/build/repo/dart-sass:$PATH && \
hugo --gc --minify \
"""
範例
若要使用 Dart Sass 轉譯,請在傳遞給 css.Sass 的選項映射中將 transpiler 設置為 dartsass。例如:
{{ $opts := dict "transpiler" "dartsass" "targetPath" "css/style.css" }}
{{ with resources.Get "sass/main.scss" | toCSS $opts | minify | fingerprint }}
<link rel="stylesheet" href="{{ .RelPermalink }}" integrity="{{ .Data.Integrity }}" crossorigin="anonymous">
{{ end }}
其他
如果您從源碼編譯 Hugo,並運行 mage test -v,如果您安裝了 Dart Sass 作為 Snap 套件,測試將會失敗。這是因為 Snap 套件的嚴格封閉模型。