在過去 sass/scss 興起的時期,最常搭配 compass 以及相關的 mixins 來進行開發
但是隨著編輯的 sass/scss 內容開始變多之後,底層執行編譯的效能也開始下降
這樣的編譯速度對於需要經常性更新功能的專案而言,使用過程會非常不便,讓體驗變得非常不友善
因此,在後來就有了另一個替代方案 - Node-sass
關於 Node Sass
Node-sass 可以將 .scss 檔案轉換成 css,並且維持著良好的效能
它是藉由Node.js 來控制 LibSass 的方式來運作,因此基本底層是以 LibSass (C++ 編寫的 Sass 編譯器 ) 來編譯
安裝
先初始化環境
npm init
yarn install
接下來,安裝 node-sass
npm install node-sass
//or
yarn add node-sass
建立 scss & css 資料夾及檔案
建立 scss/main.scss 與 css/ 資料夾
scss/main.scss
$base-txt-color: #bada55;
$base-bg-color: #333;
.hello {
color: $base-txt-color;
background-color: $base-bg-color;
}
設定 package.json
開啟 package.json 檔案,並且在"script"物件加入下方內容
package.json
"scripts": {
"build-css": "node-sass scss/main.scss css/main.css",
}
執行 script
在 terminal 輸入下方指令,執行 script 新增的動作,將 scss 轉換為 css
npm run build-css
//or
yarn build-css
watch 自動監測
watch 可以以一次啟用就能隨時監督檔案變更動作,一有變更就要執行 build-css
只要加入一個 -w 即可啟用
開啟 package.json 並且在 scripts 的 build-css 加入 -w
package.json
"scripts": {
"build-css": "node-sass -w node-sass scss/main.scss css/main.css",
}
接下來,在 termilal 輸入下方指令,啟用 watch 功能
npm run build-css
//or
yarn build-css
接下來,變動 scss/main.scss 的內容,就會看到 termial 視窗會根據變動時間點來進行 Rendering
其他
node-sass 有許多參數可以使用,例如,壓縮輸出的css內容,則可以直接加入 output-style package.json
"scripts": {
"build-css": "node-sass -w scss/main.scss css/main.css --output-style compressed",
}
這裡則列出相關的選項作為參考:
-w, --watch Watch a directory or file
-r, --recursive Recursively watch directories or files
-o, --output Output directory
-x, --omit-source-map-url Omit source map URL comment from output
-i, --indented-syntax Treat data from stdin as sass code (versus scss)
-q, --quiet Suppress log output except on error
-v, --version Prints version info
--output-style CSS output style (nested | expanded | compact | compressed)
--indent-type Indent type for output CSS (space | tab)
--indent-width Indent width; number of spaces or tabs (maximum value: 10)
--linefeed Linefeed style (cr | crlf | lf | lfcr)
--source-comments Include debug info in output
--source-map Emit source map
--source-map-contents Embed include contents in map
--source-map-embed Embed sourceMappingUrl as data URI
--source-map-root Base path, will be emitted in source-map as is
--include-path Path to look for imported files
--follow Follow symlinked directories
--precision The amount of precision allowed in decimal numbers
--error-bell Output a bell character on errors
--importer Path to .js file containing custom importer
--functions Path to .js file containing custom functions
--help Print usage info
另外,如果有使用 gulp ,則可以另外參考 gulp-sass 以及搭配 gulp-watch 來監控
…