<為了Sass而學的Gulp>-Gulp基礎安裝及任務製作SOP
前言(可以略過)
如標題,為了練習Sass,所以最近切板練習時常常用Sass來處理樣式,殊不知這是噩夢的開始。
之前在Sass基礎學習No.1-Sass簡介有介紹過幾種Sass的編譯方式,之前我自己是選擇用Prepros,但不知道是我電腦問題還是Prepros出問題了(我相信一定是我電腦太爛,該買新的了!),導致我一直沒辦法編譯成功,又有點懶得學Gulp,我就轉戰VS code編輯器插件:Live Sass Compiler,結果更慘,每次編譯都要等好久。──這個等來等去,找問題的時間花了我快3天(心累)。
為了節省我寶貴的切版練習時間,就決定來學一下Gulp,看看編譯速度能不能快一點。
Gulp 安裝
我自己是照著Gulp官網的GET STARTED安裝的,所以大家也可以直接去官網看喔!
如果沒有安裝過Node.js的要先去安裝,這裡提供Node.js官網,拉到最下方有個To download Node.js, see。
因為我是很久以前安裝Node.js的,印象中會跟npm一起安裝。
如果沒有可以到npm下載。
要確定自己是不是有安裝過上面幾個環境,可以透過下面幾個指令碼確認。
以下有$
都是在Command Line裡執行的!
確認Node版本
1
$ node --version
確認npm版本
1
$ npm --version
確認npx版本
1
$ npx --version
建立Gulp環境
通常$
是不需要打的。
建立全域的Gulp環境(一台電腦安裝一次就好)
1
$ npm install --global gulp-cli
新建一個要使用Gulp管理工具的資料夾並進入它
要先cd <fileName>
到想要新建資料夾的地方,如果是桌面就先將目前位置cd
過去,再進行下面步驟。1
2$ mkdir project
$ cd project建立一個儲存Node.js套件的package.json檔案
這個package.json檔案會將所下載使用的套件資料儲存在裡面。1
$ npm init
在下完指令後,會產生一些問題,如果沒有要修改甚麼就直接一直按
Enter
就好。
之後會產生一個package.json檔案,這是一些這個資料夾的相關資料(name, version, description,devDependencies,dependencies,etc)。建立儲存Gulp套件資料的資料夾(node_modules)
1
$ npm install --save-dev gulp
--save-dev gulp(套件名)
的意思就是下載現在的套件(gulp)並將他的版本加入到package.json檔案中的devDependencies裡。為什麼要把套件相關資料加入到package.json檔案中?
這是為了在多人協作的時候,其他人可以直接下npm install
,就可以依據原本設定在package.json檔案中的套件資料,下載指定版本套件。新增gulpfile.js儲存任務
1
$ touch gulpfile.js
以後要執行的任務都要寫在這裡面。
測試
在gulpfile.js中寫下1
2
3
4
5function defaultTask(cb) {
// place code for your default task here
cb();
}
exports.default = defaultTask運行
1
$ gulp
安裝Gulp套件
可以到PLUGINS下載套件。
安裝gulp-sass套件1
2$ npm i --save-dev gulp-sass
$ npm i gulp-sass有沒有
--save-dev
差異在哪裡?
六角學院-使用 gulp 進行網頁前端自動化(可預覽)課程中有提到,當儲存套件時下--save-dev
,套件相關資料儲存package.json檔案中的devDependencies裡,代表著現在這個套件供開發時使用,而沒有下--save-dev
(如上圖右上方的安裝語法)或是下--save
時套件相關資料儲存package.json檔案中的dependencies裡,代表著現在這個套件供產品上架時使用。
我自己是覺得像是gulp-sass就是只在開發時才會使用到,當網頁上架之後就不會再用到了。
課程裡面也提到像是把產品放上HeroKu時,它預設只會安裝dependencies裡的資料(也就是沒有下--save-dev
或是下--save
的套件),所以假設將gulp套件安裝在devDependencies裡的話,產品需要運行gulp時,將無法運行。
Gulp任務運行
以下程式碼皆是寫在gulpfile.js裡面的喔!
如何撰寫任務
宣告並命名剛載入的PLUGIN
在gulpfile.js最上方,必須將剛剛下載的套件命名,以便之後在撰寫任務時,可以透過變數名執行該套件。
有下npm install(或npm i)所下載的套件都必須先宣告及命名,包含gulp自己本身。
1 | var gulp = require('gulp'); |
撰寫的SOP
基本公式
function任務內容撰寫
在六角的Gulp課程中,有提到gulp將每個不同的任務用pipe連接,pipe的中文意思就是管子,也因此可以把**gulp.src(‘來源資料’)想像成水,pipe(任務)想成水會經過的管子,每根管子都有自己要做的任務,當然可以將管子不斷的增加(一直加pipe(任務)),並且最後一根管子的任務就是將水導向目的地(水桶??),也就是pipe(gulp.dest(‘資料傳送目的地’))**,記得導向目的地是最後一根管子(pipe)的任務喔!
運行gulp
在Command Line裡執行
1 | $ gulp <taskName> |
以gulp sass套件為範例(自己的分析,如果有錯誤麻煩各位幫忙指出)
這篇文章的最後就來分析gulp sass的寫法,畢竟我就是為了練習Sass才學的Gulp。
其實在每個套件下面都會附上使用方法,現在就來看看gulp sass的使用方法吧!
現在來拆解它:
先宣告套件的變數名。
1
2var gulp = require('gulp');
var sass = require('gulp-sass');其他套件的宣告
我自己的字面解釋就是,gulp-sass的編譯器是使用’node-sass’這個套件,所以把它儲存在gulp-sass物件裡。1
sass.compiler = require('node-sass');
製作sass檔案編譯的任務
透過gulp套件製作一個名叫’sass’的任務,任務內容就是將sass檔案夾裡面所有子資料夾(**)裡面的所有副檔名為.scss的檔案,通過管子.pipe執行sass套件(sass()
),請注意這裡的sass()是指執行剛剛所宣告及命名的gulp-sass套件,不是指這個task的任務名稱,最後通過管子將編譯完成後的檔案透過gulp.dest
匯入到css檔案裡。
補充說明:在sass()
後面所接的on('error', sass.logError)
指的是監控error
事件,並在該事件發生時顯示錯誤資料(sass.logError
)。1
2
3
4
5gulp.task('sass', function () {
return gulp.src('./sass/**/*.scss')
.pipe(sass().on('error', sass.logError))
.pipe(gulp.dest('./css'));
});其實寫到這裡,到Command Line去執行
$ gulp sass
就可以將.sass檔案編譯了!最後的watch任務,就留到下一次筆記啦!