這篇筆記下如何依照開發環境來調整佈署的內容,同時在佈署前,自動先清理掉先前產出的靜態檔案內容,並依照現有的檔案來生成全新的檔案,已確保前後檔案的一致性。
交付正式檔案前準備
每次產生正式的發佈檔案前,可以運用 gulp.clean 的套件,來確保你新產出的檔案,和你實際編輯是一致的。因為在編修過程中,你多少會去增減你的來源檔案。別忘記增加 allowEmpty:true,以免因為資料夾不存在而報錯。
依據環境來調整檔案
正式交付檔案時,程式碼往往是會被壓縮的。不過這樣一來,你的程式碼在編輯時就會不好閱讀。可藉由 minimist 來傳入設定參數,並使用 gulp-if 來做簡單的 if-else 控制,來達成效果。
新增一個 build 的流程
其實跟開發的自動化流程是很像的,移除最後的 watch 和 browser-sync 即可。由於 Gulp 4.0 之後,已經有 gulp.series 和 gulp.parallel 兩個內建指令可以做到同步和非同步的進行,就不需要再安裝 gulp-sequence 。
程式碼
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
const gulp = require('gulp'); const $ = require('gulp-load-plugins')() /*after installing gulp-load-plugins, all package name with prefix, gulp, can be trigger by using '$'*/ const autoprefixer = require('autoprefixer'); const mainBowerFiles = require('main-bower-files'); const browserSync = require('browser-sync').create(); const minimist = require('minimist'); /*setting default environment option*/ const envOptions = { string:'env', default:{env:'dev'} } const options = minimist(process.argv.slice(2),envOptions) /*don't forget return*/ gulp.task('clean', ()=>{ return gulp.src(['./temp','./public'],{allowEmpty:true,read:false}) .pipe($.clean()) }) gulp.task('jade', ()=>{ return gulp.src('./source/*.jade') .pipe($.plumber()) .pipe($.jade({ pretty:true //with full tags })) .pipe(gulp.dest('./public/')) .pipe(browserSync.stream()) //automatically refresh }); gulp.task('sass', ()=>{ return gulp.src('./source/scss/**/*.scss') .pipe($.plumber()) .pipe($.sourcemaps.init()) .pipe($.sass().on('error', $.sass.logError)) .pipe($.postcss([autoprefixer()])) .pipe($.if(options.env === "production",$.cleanCss())) .pipe($.sourcemaps.write('.')) .pipe(gulp.dest('./public/css')) .pipe(browserSync.stream()) }); gulp.task('babel', () =>{ return gulp.src('./source/js/**/*.js') .pipe($.sourcemaps.init()) .pipe($.babel({ presets: ['@babel/env'] })) .pipe($.concat('customized.js')) .pipe($.if(options.env ==="production",$.uglify())) .pipe($.sourcemaps.write('.')) .pipe(gulp.dest('./public/js')) .pipe(browserSync.stream()) }); gulp.task('bower',()=>{ return gulp.src(mainBowerFiles()) .pipe(gulp.dest('./temp/vendors')) }) gulp.task('vendors',()=>{ return gulp.src([ './temp/vendors/**/*.js', './node_modules/bootstrap/dist/js/bootstrap.min.js', './node_modules/popper.js/dist/umd/popper.min.js', ]) .pipe($.concat('vendors.js')) .pipe($.if(options.env === "production", $.uglify())) .pipe(gulp.dest('./public/js')) .pipe(browserSync.stream()) }) // Static server gulp.task('browser-sync', function () { browserSync.init({ server: { baseDir: "./public" } }); }); /*watch your files*/ gulp.task('watch', ()=>{ gulp.watch('./source/*.jade', gulp.series('jade')); gulp.watch('./source/scss/**/*.scss', gulp.series('sass')); gulp.watch('./source/js/**/*.js',gulp.series('babel')) }); /*task lists by follows*/ /*watch and browser-sync should run parallel*/ gulp.task('default', gulp.series('clean', gulp.parallel('jade', 'sass', 'babel'), gulp.series('bower', 'vendors'), gulp.parallel('watch', 'browser-sync'))); gulp.task('build', gulp.series('clean', gulp.parallel('jade', 'sass', 'babel'), gulp.series('bower', 'vendors'))); |
參考課程
Course 28 ~ Course 29 (全部一共有 48 Courses)
請注意:本系列文章為個人對應課程的消化吸收後,所整理出來的內容。換言之,並不一定會包含全部的課程內容,也有可能會添加其他資源來說明。課程連結網址:http://tinyurl.com/y9fp69lb
相關文章
★全文分享★ [指南] 前端自動化開發 Gulp + PHP + Browserify
雖說使用 Gulp 搭配 Browserify 可以成功在前
★全文分享★ [指南] 前端自動化開發工具 Gulp 4 + Babel 7 + Browserify 整合紀錄
最近因為工作上需要,重拾 Gulp 來作套件
★全文分享★ [筆記] HTML 與 PUG 線上格式轉換
這篇筆記下網路上好用的 HTML 和 PUG 格式
★全文分享★ [筆記] 使用 Gulp 進行網頁前端自動化 – 用一般 HTML 來製作樣板並排版
雖說用 pug 來進行排版算是很方便,不過
★全文分享★ [筆記] 使用 Gulp 進行網頁前端自動化 – 架設簡易伺服器和壓縮程式碼
這篇要筆記下的是讓前端開發時可以擺脫
★全文分享★ [筆記] 使用 Gulp 進行網頁前端自動化 – Gulp 和 Bower 串接
Gulp 搭配上 Bower 和 Bootstrap 4 前端套件,可
★全文分享★ [筆記] 使用 Gulp 進行網頁前端自動化 – PostCSS 自動加上前綴 & Load Plugins
這篇筆記下用 gulp-postcss、autoprefixer……等
★全文分享★ [筆記] 使用 Gulp 進行網頁前端自動化 – 初始化你的第一個 Gulp 編譯專案
這篇筆記下用 Gulp 來編譯你的檔案,需要
★全文分享★ [筆記] 使用 Gulp 進行網頁前端自動化 – 簡介
Gulp 是一個前端自動化工具。由於瀏覽器