Sass 擴展
1. 簡介
Sass 還為我們提供了很多非常高級的自定義功能,不過這需要你擁有非常良好的 Ruby 基礎才能隨心所欲的運用這些功能。所以本節內容也是作為了解的內容,使我們可以更全面的了解 Sass,本節我們將對自定義 Sass 函數和存儲緩存做一個簡單的講解。
2. 自定義 Sass 函數
我們前面的 Sass 函數指令講過可以通過 @function 來定義函數,這個自定義函數和本節講的并不一樣,本節中的自定義函數是通過 Ruby 語言來自定義用于 Sass 的函數,我們這里貼出一段使用 Ruby API 擴展 Sass 的代碼來感受下:
module Sass::Script::Functions
def myCustomSass(string)
assert_type string, :String
Sass::Script::Value::String.new(string.value.myCustomSass)
end
declare :myCustomSass, [:string]
end
不懂這段代碼沒關系,我們只是作為@use “sass:color”;
@use “sass:meta”;一個了解,知道 Sass 的函數是可以擴展的就好,我們在前端項目中是用不到的,這個自己有興趣可以自行深入研究。
其實 Sass 為我們提供了很多內置模塊,這其中就包含很多有用的函數,我們使用這些模塊也能很好的實現我們的擴展需求。我們可以通過 @use 來加載內置模塊,所有的內置模塊都以 sass 開頭以表示它們屬于 Sass 的一部分,我們舉例看下:
@use "sass:color";
@use "sass:meta";
@use "sass:math";
實際上基本我們是用內置模塊來完成很多自定義的功能,或者自定義函數,或者是 JavascriptAPI,基本不會接觸到 Ruby 去擴展。而且隨著 Dart-sass 的發布,Ruby-sass 已經被棄用,是在 2019 年 3 月 26 日左右被棄用的。
3. 存儲緩存
說到存儲緩存就更復雜了,因為這還會涉及到文件系統,如果你對這些不是很了解可以試著了解一下,如果不太明白可以先略過,隨著你在計算機行業的沉淀,慢慢就會理解這個,這屬于 Sass 的源代碼和設計思想范疇。
Sass 會緩存已經解析的文檔,以便可以重用它們,這樣就不用再次對這些文檔進行解析,這個就很像我們所熟知的 http 緩存。一般來說 Sass 會把緩存存儲在文件系統上,并且會通過 cache_location 標識其存儲位置,如果你想更改緩存的位置或者其他相關的選項,首先你需要有對文件的讀寫權限,然后在進程之間共享緩存,同時 Sass 為我們提供了配置項來修改這些。
我們可以在命令行中使用 –cache-location 來更改緩存存儲的位置,以便在后面的調用中運行的更快,這需要 Ruby 環境,用法如下:
$ sass --cache-location=/global/my-cache style.scss style.css
除了上面的配置外,我們還可以通過在命令行中使用 --no-cache 來取消 Sass 對解析文件的緩存,這同樣需要 Ruby 環境,用法如下:
$ sass --no-cache style.scss style.css
4. 小結
本節內容主要是為了讓大家了解 Sass 的一些高級玩法,比如自定義函數和自己設置存儲緩存,實際的工作中并不會用到,但如果你要加入到 Sass 的官方開發團隊中,這些東西就有必要去深入了解了。這些就不止是前端的范疇了,還會涉及到 Ruby 、Dart、C++ 等編碼語言,如果你對這些有著濃厚的興趣,可以去深入理解 Sass 的機制和擴展。