跳轉至

離線使用

想把文件當成下載檔案,或跟產品一起發行嗎?Zensical 可以確保從檔案系統直接開啟(file://)時,站內搜尋仍然能運作

啟用離線外掛

[project.plugins.offline]

設定之後,把 site/ 資料夾的內容當作下載檔案散布,使用者用瀏覽器直接開啟 index.html 就能搜尋。

離線外掛只有一個設定:

[project.plugins.offline]
enabled = false

沒辦法用環境變數切換

mkdocs.yml 可以用 !ENV [OFFLINE, false] 依環境變數啟用或停用;zensical.toml 目前沒有這個功能。官方表示之後會提供更完整的變體管理機制。

另外,離線建置時,use_directory_urls自動設成 false,見 專案基本設定

限制

Zensical 的許多互動功能在檔案系統上無法運作,因為現代瀏覽器的限制:所有使用 fetch API 的功能都會出錯。

因此,建置離線版本時,請關閉下列設定:

file:// 協定支援

離線模式需要一小段 JavaScript 來支援 file://,它使用一個叫 iframe-worker 的小型 WebWorker,預設會從 unpkg.com 下載。如果連這一步也要完全離線,可以把檔案放進自己的資源,再用 extra.polyfills 指定:

[project.extra]
polyfills = [
  "js/iframe-worker-shim.js",
]

或者使用完整的寫法:

[project.extra]
polyfills = [
  { path = "js/iframe-worker-shim.js", type = "text/javascript", async = false, defer = false },
]

檔案位置範例:

.
├── docs
│   ├── index.md
│   └── js
│       └── iframe-worker-shim.js
└── zensical.toml

檔名要包含 iframe-worker

檔名必須包含 iframe-worker 這個字串,否則 Zensical 還是會從 unpkg.com 再抓一次。

總結

步驟 做法
啟用 [project.plugins.offline]
關閉不相容功能 instant navigation、分析、程式庫、留言
完全離線 extra.polyfills 指定本地的 iframe-worker 檔案

參考資料