我們已經知道如何使用 Gulp 來編譯跟輸出檔案,也知道如何壓縮檔案,但一般我們在開發的過程其實輸出是不需要壓縮的,並且我們會希望保留console.log() 等等,等到生產環境才需要做全面的壓縮,因為壓縮等處理需要時間,會拖長編譯的時間。
因此我們需要根據不同的開發環境來決定輸出結果,我們需要 minimist 套件 以及 gulp-if 套件,前者可以取得 Cli 的變數 ,後者可以不同的變數來輸出不同的結果,這樣講很模糊,往下看吧 !
安裝
gulp install minimist gulp-if --save
Minimist

引入 minimist 後,命名一個 options 用來儲存 minimist() 回傳的結果,process.argv.slice(2),可以用來傳遞 CLI 寫入的參數 ,而minimist() 回傳會是一個物件,這邊我們隨意呼叫一個任務 clean

可以看到 minimist() 回傳的結果是一個物件,第一個參數是任務的名稱,第二個以後是回傳我們在終端機寫入的參數名跟值(aaa 跟 123) , 也就是說我們可以呼叫 option.aaa 就可以取得 123。
而 envOptions 又是什麼呢 ? 我們可以在 minimist()的參數再帶入一個預設的選項 envOptions,envOptions 內的 string 參數表示我們要把甚麼參數的值自動都轉為字串,default 則是我們預設就要先帶入哪些參數跟值,因為我們預設就是設定為開發環境 develop, 我們不想要每次執行任務都要另外再打 — env develop ,所以我們在 default 就先設定。

也就是說我們 只打 gulp clean 就會回傳 預設好的 env: develop,相反的,我們可以透過 CLI 指令將環境改為產品環境 也就是打
gulp clean --env production

就會把環境的值更改為 production ,接著我們就可以這樣去判斷目前的環境。
gulp-if
gulp-if 就是在做判斷這件事情

我們在 uglify() 加上 if ()的判斷 ,判斷是否為產品環境,是的話才進行壓縮,同理也可以放在其他更多的地方,例如 gulp-sass 的壓縮

如此一來 我們一般執行任務時就不會進行壓縮等非必要的行為,等到需要產出產品,我們執行任務加上
gulp 任務名 --env prodiction
就可以產出產品環境的程式碼了!