NodeJS+Express搭建個人部落格-gulp自動化構建工具使用(二)

Web尋夢獅發表於2018-09-01

gulp自動化構建工具使用

簡言

現在不管是做前端還是後端的,不可避免的是要跟html打交道的;而且Node這麼容易開發web;難道我們不想自己隨手寫點什麼?Express這類比較前衛的框架;早就深度整合了很多前端的東西;現在,就讓我們手動為thinkphp也插上gulp的翅膀吧。

構建

第一步

在自己的thinkphp專案根目錄中建立 package.json;加上以下依賴

{
  "name": "baijunyao/thinkphp-bjyadmin",
  "version": "1.0.0",
  "description": "WebLSS部落格",
  "main": "index.js",
  "scripts": {
    "test": "echo "Error: no test specified" && exit 1"
  },
  "keywords": [
    "WebLSS",
    "部落格"
  ],
  "author": "baijunyao",
  "license": "Apache2",
  "devDependencies": {
    "babel-preset-es2015": "^6.18.0",
    "babel-preset-stage-2": "^6.18.0",
    "browser-sync": "^2.14.0",
    "gulp": "^3.9.1",
    "gulp-babel": "^6.1.2",
    "gulp-cleanhtml": "^1.0.1",
    "gulp-concat": "^2.6.0",
    "gulp-contrib-copy": "^0.1.2",
    "gulp-decomment": "^0.1.3",
    "gulp-imagemin": "^3.0.2",
    "gulp-less": "^3.1.0",
    "gulp-load-plugins": "^1.2.4",
    "gulp-minify-css": "^1.2.4",
    "gulp-plumber": "^1.1.0",
    "gulp-rename": "^1.2.2",
    "gulp-sass": "^2.3.2",
    "gulp-uglify": "^2.0.0"
  }
}

第二步

建立gulpfile.js檔案

/**
 *  Created by WebLss on 2018/8/3
 */
var gulp = require(`gulp`)
var sass = require(`gulp-sass`)
var minifyCss = require(`gulp-minify-css`)
var plumber = require(`gulp-plumber`)
var babel = require(`gulp-babel`)
var uglify = require(`gulp-uglify`)
var clearnHtml = require(`gulp-cleanhtml`)
var imagemin = require(`gulp-imagemin`)
var copy = require(`gulp-contrib-copy`)
var browserSync = require(`browser-sync`).create()
var reload = browserSync.reload
// 定義原始碼的目錄和編譯壓縮後的目錄
var src = `public/src`
var dist = `public/dist`
var viewSrc = `views/src`
var viewDist = `views/dist`
// 編譯全部scss 並壓縮
gulp.task(`css`, function () {
  gulp.src(src + `/**/*.scss`)
    .pipe(sass())
    .pipe(minifyCss())
    .pipe(gulp.dest(dist))
})
// 編譯全部js 並壓縮
gulp.task(`js`, function () {
  gulp.src(src + `/**/*.js`)
    .pipe(plumber())
    .pipe(babel({
      presets: [`es2015`]
    }))
    .pipe(uglify())
    .pipe(gulp.dest(dist))
})
// 壓縮全部html
gulp.task(`html`, function () {
  gulp.src(src + `/**/*.+(html|ejs)`)
    .pipe(clearnHtml())
    .pipe(gulp.dest(dist))
  // 編譯檢視檔案
  gulp.src(viewSrc + `/**/*.+(html|ejs)`)
    .pipe(clearnHtml())
    .pipe(gulp.dest(viewDist))
})
// 壓縮全部image
gulp.task(`image`, function () {
  gulp.src([src + `/**/*.+(jpg|jpeg|png|gif|bmp)`])
    .pipe(imagemin())
    .pipe(gulp.dest(dist))
})
// 其他不編譯的檔案直接copy
gulp.task(`copy`, function () {
  gulp.src(src + `/**/*.!(jpg|jpeg|png|gif|bmp|scss|js|html|ejs)`)
    .pipe(copy())
    .pipe(gulp.dest(dist))
})
// 自動重新整理
gulp.task(`server`, function () {
  browserSync.init({
    proxy: `veekergdn.com`, // 指定代理url
    notify: false // 重新整理不彈出提示
  })
  // 監聽scss檔案編譯
  gulp.watch(src + `/**/*.scss`, [`css`])
  // 監聽其他不編譯的檔案 有變化直接copy
  gulp.watch(src + `/**/*.!(jpg|jpeg|png|gif|bmp|scss|js|html)`, [`copy`])
  // 監聽html檔案變化後重新整理頁面
  gulp.watch(src + `/**/*.js`, [`js`]).on(`change`, reload)
  // 監聽html檔案變化後重新整理頁面
  gulp.watch(src + `/**/*.+(html|ejs)`, [`html`]).on(`change`, reload)
  // 監聽css檔案變化後重新整理頁面
  gulp.watch(dist + `/**/*.css`).on(`change`, reload)
})
// 監聽事件
gulp.task(`default`, [`css`, `js`, `image`, `html`, `copy`, `server`])

把 gulpfile.js 中的src 和 dist 變數替換為自己專案的實際目錄;
把proxy 替換為自己的本地自定義域名;
第三步: 命令列執行如下命令:

安裝各種包

cnpm install 或npm install

執行gulp

gulp
如果不出意外;會自動編譯並開啟瀏覽器了;
很簡單吧;就3步;
以專案為例講解下吧: https://github.com/WebLss/Nod…
執行gulp後;會有如下操作;

1.src目錄下的圖片、檔案、html、scss都會編譯到view_dist目錄
2.可以手動設定開發階段使用src/dist目錄的html頁面,`product`和`development`
兩個狀態切換
3.觸發監聽任務,有檔案變動自動執行上述幾條任務,並且自動重新整理瀏覽器,
這又是一個一次整合終身受益,不止是終身;換個專案同樣可以很方便複用;

意義

估計大家也都看出來了,為什麼要用gulp編譯壓縮,無非就是有效利用空間資源,優化載入速度,優化網站效能,提升使用者體驗感

相關文章