resources.ToCSS
{{ with resources.Get "sass/main.scss" }}
{{ $opts := dict "transpiler" "libsass" "targetPath" "css/style.css" }}
{{ with . | toCSS $opts }}
{{ if hugo.IsDevelopment }}
<link rel="stylesheet" href="{{ .RelPermalink }}">
{{ else }}
{{ with . | minify | fingerprint }}
<link rel="stylesheet" href="{{ .RelPermalink }}" integrity="{{ .Data.Integrity }}" crossorigin="anonymous">
{{ end }}
{{ end }}
{{ end }}
{{ end }}
使用 Hugo extended 和 extended/deploy 版本內建的 LibSass 轉譯器將 Sass 轉譯為 CSS,或安裝 Dart Sass以使用 Sass 語言的最新功能。
Sass 有兩種語法形式:SCSS 和 縮排式。Hugo 支援兩者。
選項
- transpiler
- (
string
) 使用的轉譯器,可為libsass
(預設)或dartsass
。Hugo 的 extended 和 extended/deploy 版本內建 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 的 extended 版本內建 LibSass,可將 Sass 轉譯為 CSS。在 2020 年,Sass 團隊宣布棄用 LibSass,改用 Dart Sass。
透過在開發和生產環境中安裝 Dart Sass,即可使用 Sass 語言的最新功能。
安裝概述
Dart Sass 與 Hugo v0.114.0 及更新版本相容。
如果您在使用 Hugo v0.113.0 及更早版本時使用了嵌入式 Dart Sass1,請先卸載嵌入式 Dart Sass,然後安裝 Dart Sass。如果兩者都已安裝,Hugo 會使用 Dart Sass。
如果您以 Snap 套件 安裝 Hugo,則無需另外安裝 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: Install 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 進行轉譯,請在傳遞給 resources.ToCSS
的選項映射中將 transpiler
設為 dartsass
。例如:
{{ with resources.Get "sass/main.scss" }}
{{ $opts := dict "transpiler" "dartsass" "targetPath" "css/style.css" }}
{{ with . | toCSS $opts }}
{{ if hugo.IsDevelopment }}
<link rel="stylesheet" href="{{ .RelPermalink }}">
{{ else }}
{{ with . | minify | fingerprint }}
<link rel="stylesheet" href="{{ .RelPermalink }}" integrity="{{ .Data.Integrity }}" crossorigin="anonymous">
{{ end }}
{{ end }}
{{ end }}
{{ end }}
其他事項
如果您從原始碼建置 Hugo 並執行 mage test -v
,若您以 Snap 套件方式安裝 Dart Sass,測試會失敗。這是由於 Snap 套件的嚴格限制模式所致。