Gulp學習紀錄_Part 3-一起來使用Livereload做前端吧!!

前端的技巧越來越多,要做的事情也越來越繁雜,就交給Gulp吧!

Hi 大家豪,今天要講到的是connect套件以及Watch套件(非內建)的使用方式

首先來介紹這兩個套件的特色,connect這個套件可以幫助我們在檔案儲存時可以重新整理我們的頁面,且不需要安裝額外的擴充軟體或再開一個node.js的命令視窗來開一個網站。而Watch套件可以讓我們在gulpfile.js少新增一個watch的task方法將會在稍後為大家介紹~

這次就讓大家一次安裝兩個套件吧! 要一次安裝多個套件就以這次要安裝兩個套件為範例,輸入以下的指令就可以一次安裝兩個套件喔

npm install --save-dev gulp-connect gulp-watch

安裝完成後在gulpfile.js內一樣引入這兩個套件,這一次的程式碼直接承襲Part 2的程式碼,所以引入套件後的程式碼如下

var gulp = require('gulp'),
    concat = require('gulp-concat') //引入Concat套件
    uglify = require('gulp-uglify') //引入uglify套件
    sass = require('gulp-sass')     //引入sass套件
    connect = require('gulp-connect') //引入connect套件
    watch = require('gulp-watch')     //引入watch套件

此時我們需要用一個task來使用connect套件來開啟port以及開啟port的專案相對位置,其程式碼如下

gulp.task('serverGO', function () {
    connect.server({
        root: 'build', //設定開啟位置
        livereload: true, //開啟livereload
        port: 8787 //設定預設port為8787
    });
});

接下來我們來介紹該如何使用非內建的Watch方式以及connect重新整理頁面的方法,非內建的Watch方式很簡單,只要在每一個需要watch的task內加入watch的function即可,這次我們針對sassGO這個task來做改變,其程式碼如下

gulp.task('sassGO', function () {
    return watch('src/**/*.scss',function(){     //監看src目錄底下的所有scss檔
        gulp.src('src/**/*.scss')                //設定來源檔案為src目錄底下的所有scss檔
        .pipe(sass().on('error', sass.logError)) 
        .pipe(gulp.dest('./build/'))             //輸出至build目錄底下
        .pipe(connect.reload());                 //利用connect套件刷新頁面
    });
});

現在我們的gulpfile.js都寫好了,程式碼如下(所有範例檔我放在Git上,歡迎大家參考)

var gulp = require('gulp'),
    concat = require('gulp-concat') //引入Concat套件
uglify = require('gulp-uglify') //引入uglify套件
sass = require('gulp-sass')     //引入sass套件
connect = require('gulp-connect') //引入connect套件
watch = require('gulp-watch')     //引入watch套件

gulp.task('serverGO', function () {
    connect.server({
        root: 'build', //設定開啟位置
        livereload: true, //開啟livereload
        port: 8787 //設定預設port為8787
    });
});

//將src內的所有js打包成all.js並將all.js輸出至build/js的目錄下
gulp.task('ConcatAndUglify', function () {
    return watch('src/**/*.js', function () {   //監看src目錄底下的所有js檔
        gulp.src('src/**/*.js')                 //設定來源檔案為src目錄底下的所有js檔
            .pipe(concat('all.js'))
            .pipe(uglify())
            .pipe(gulp.dest('./build/js'))      //輸出至build目錄底下
            .pipe(connect.reload());            //利用connect套件刷新頁面
    });
});

//將src內的所有scss輸出至build目錄下
gulp.task('sassGO', function () {
    return watch('src/**/*.scss', function () {     //監看src目錄底下的所有scss檔
        gulp.src('src/**/*.scss')                //設定來源檔案為src目錄底下的所有scss檔
            .pipe(sass().on('error', sass.logError))
            .pipe(gulp.dest('./build/'))             //輸出至build目錄底下
            .pipe(connect.reload());                 //利用connect套件刷新頁面
    });
});

gulp.task('htmlGO', function () {
    return watch('build/**/*.html', function () {
        gulp.src('build/**/*.html') 
            .pipe(connect.reload());                 //利用connect套件刷新頁面
    });
});

//內建的watch方式
// gulp.task('watch', function () {
//     gulp.watch('src/**/*.scss', ['sassGO']);
//     gulp.watch('src/**/*.js', ['ConcatAndUglify']);
//     gulp.watch('build/**/*.html', ['htmlGO']);
// });
gulp.task('default', ['ConcatAndUglify', 'sassGO', 'serverGO', 'htmlGO']);
// gulp.task('default', ['ConcatAndUglify', 'sassGO', 'serverGO', 'watch']);

gulpfile.js的檔案都準備好了,接下來就執行gulp吧! 執行完成後可以看到Server成功啟動了,8787這個port成功開啟,並且Livereload在35729 port上成功啟動。

如下gif圖就可以看見我們每一次更動檔案,他都會幫我們去做刷新的動作。

非內建Watch的方式各有所好,每個人的喜好不同,所以有的人喜歡,有的人不喜歡,這是一種______
這次的介紹到這裡,感謝大家的觀看
這裡再附上一次Git的網址:
https://github.com/SQZ777/DemoGulp