摘要:在資源很多時,例如圖片的復制,這個會加快任務的執行速度,特別是需要實時預覽時,減少延遲。但是作為個入門短時間內還是不能夠被取代得了的。
gulp常用功能集合(開發和生產分離、靜態資源壓縮優化、代碼優化、實時預覽、hash)
tags: gulp 前端自動化開發
npm倉庫下載地址
https://www.npmjs.com/package/cddgulp
[TOC]
本人自用在此基礎上的一個完整自用框架——cddgulp
npm點這里
github點這里
另一個基于vuepack改寫的自用的webpack2.x+vue2.x的實時預覽前端腳手架,點這里
html文件復制、自動更改hash文件鏈接、文件內容替換
css文件復制與hash
img文件的復制與hash
js文件的復制、壓縮、合并、重命名、hash
對文件的監視與自動更新
其他配合項包括compass/sas預編譯,browser-sync實時預覽
2.需要的gulp插件與詳解"devDependencies": { "del": "^2.2.1", "gulp": "^3.9.1", "gulp-cached": "^1.1.0", "gulp-changed": "^1.3.1", "gulp-clean-css": "^2.0.12", "gulp-concat": "^2.6.0", "gulp-csscomb": "^3.0.7", "gulp-htmlmin": "^2.0.0", "gulp-imagemin": "^3.0.2", "gulp-replace": "^0.5.4", "gulp-rev": "^7.1.0", "gulp-rev-collector": "^1.0.5", "gulp-uglify": "^2.0.0" }
1.del
: 該插件不是gulp的插件而是node的插件或者一個功能,作用是刪除文件/文件夾。
2.gulp
: 這個就不用多說了,本地gulp插件
3.gulp-cached
: 這個插件用來對文件進行復制時,只是對那行更改過的文件進行復制,減少不必要的資源操作。在資源很多時,例如圖片的復制,這個會加快gulp任務的執行速度,特別是需要實時預覽時,減少延遲。
4.gulp-changed
: 這個插件跟gulp-cacahed插件類似,他主要是在對文件進行復制時,如果該文件沒有改動過,那么就不允許該文件復制到目標文件件。(自己實測時看不出來,而且如果使用cached,就不用使用這個了)
5.gulp-clean-css
: 用來對css文件進行去注釋,和壓縮
6.gulp-concat
: 對文件進行合并,而且可以添加一個string參數,用來對合并的文件進行重命名
7.gulp-csscomb
: 對css進行版本支持
8.gulp-htmlmin
: 對html文件進行壓縮,如去換行,去注釋等
9.gulp-imagemin
: 對jpg、png等格式問的圖片進行無損的壓縮(特別有用,但是在你的node-modules中的插件過多時會存在圖片壓縮過慢的問題問題)
10.gulp-replace
: 用來替換文本文件中的內容
11.gulp-rev
: 對文件進行hash命名,并且生成對應的json文件
12.gulp-rev-collector
: 結合gulp-rev對hash的文件在html文件中進行引用路徑更改
13.gulp-uglify
: 對js文件進行壓縮,有人叫這個作“丑化”,確實挺丑的
本人沒有在gulpfile.js文件使用實時預覽的插件,因為這些任務已經很多了,gulp雖然速度很快,但是執行時也會有些遲緩,所以只是外部使用了browser-sync實時預覽。
此外css預編譯我使用的是sass,在集成到gulp預編譯時如果出現了錯誤的語法,整個gulp監視任務就會完全停止,所以我是用的是外部sass監視。這個可以跟gulp一塊使用,gulp只是監視css文件,然后進行自己的操作即可,二者各自做各自的事,出錯了也不會有中斷這樣的影響。
3.gulpfile.js文件代碼詳解。我的開發目錄
源文件gulpfile.js 提取碼:aea6
1.需引入的插件var gulp = require("gulp"); var changed = require("gulp-changed"); var concat = require("gulp-concat"); var htmlmin = require("gulp-htmlmin"); var imagemin = require("gulp-imagemin"); var uglify = require("gulp-uglify"); var cleanCss = require("gulp-clean-css"); var cache = require("gulp-cached"); var rev = require("gulp-rev"); var replace = require("gulp-replace"); var del = require("del"); var revCollector = require("gulp-rev-collector");2.各個任務詳解 1.復制html task : copyHtml
: 代碼如下
//對常用的東西進行變量化 var dir = "../dist"; //對目標根目錄進行變量 gulp.task("copyHtml", function(){ gulp.src("*.html") //當前目錄的HTML文件 .pipe(cache("copyHtml")) //只對修改的文件進行復制 //.pipe(changed(dir))//只有變化的文件能夠通過 .pipe(htmlmin({collapseWhitespace: true, removeComments: true })) //對html文件進行壓縮處理,去換行,去注釋 .pipe(replace("a.js","main.js")) //對html文件中的指定的文字進行替換 .pipe(gulp.dest(dir)); //復制到目標文件 });2.復制css task:copyCss
: 代碼如下
gulp.task("copyCss",function(){ del([dir+"/css/**/*"],{force: true}); // 由于每次更改css文件,進行hash的話舊的文件就會殘留,因此每次寫入前需要進行清空。 gulp.src("css/main.css") // .pipe(changed(dir+"/css")) .pipe(cleanCss({conpatibility: "ie8"})) //進行壓縮 .pipe(rev()) //進行hash .pipe(gulp.dest(dir+"/css")) .pipe(rev.manifest()) //產生hash對應的json文件 .pipe(gulp.dest(dir+"/css")); });3.復制圖片 task:copyImg
: 代碼如下
gulp.task("copyImg", function () { gulp.src("img/*") .pipe(cache("copyImg")) // .pipe(changed(dir+"/img")) .pipe(imagemin()) //對圖片進行壓縮 .pipe(rev()) .pipe(gulp.dest(dir+"/img")) .pipe(rev.manifest()) .pipe(gulp.dest(dir+"/img")); });4.復制js文件 task:copyJs
: 代碼如下
gulp.task("copyJs", function(){ del([dir+"/js/**/*"],{force: true}); //與css同理刪除 gulp.src("js/*.js") .pipe(cache("copyJs")) .pipe(concat("main.js")) //對js文件進行合并和重命名 .pipe(uglify()) //對合并后的文件進行壓縮 .pipe(rev()) .pipe(gulp.dest(dir+"/js")) .pipe(rev.manifest()) .pipe(gulp.dest(dir+"/js")); });5.對html中的靜態資源(css,js,image)進行hash后的文件引用替換
: 代碼如下
gulp.task("rev",function(){ gulp.src([dir+"/**/*.json", dir+"/*.html"]) //找到json,和目標html文件路徑 .pipe(revCollector({ replaceReved: true, // dirReplacements: { // "a.js":"main.js" // }這里主要是對文件路徑中的文字進行修改 })) //進行替換 .pipe(gulp.dest(dir)); });6.監視文件,并進行自動操作 task : watch
: 代碼如下
gulp.task("watch",function(){ gulp.watch("*.html", ["copyHtml"]); //監視html文件,如果發生變化就進行復制 gulp.watch("css/main.css", ["copyCss"]); //監視css文件,如果發生變化就進行復制 gulp.watch("img/*.{jpg,png}",["copyImg"]); //監視圖片,如果發生變化就進行復制 gulp.watch("js/*.js", ["copyJs"]); //監視js文件,如果發生變化就進行復制 gulp.watch(dir+"/{**/*.json,/*.html}", ["rev"]) //監視json文件和html文件,如果發生變化就進行hash命名,和引用更改 });7.設置默認任務 task : default
: 代碼如下
gulp.task("default",["copyHtml","copyCss","copyImg","copyJs","watch"] );8.lastWorks 最后的任務
: 代碼如下
gulp.task("cleanCache", function(){ delete cache.caches["copyHtml","copyImg","copyJs"]; }) //由于cache不會自動清除緩存的東西,所以需要手動消除 gulp.task("lastWorks",["cleanCache"] );9.其他任務——清除開發文件夾(dist)
: 代碼如下慎用
gulp.task("clean", function(){ del(["../dist/**/*"],{force: true}); }); //清除dist中所有的文件和文件夾,適合新的項目開始時使用10.新任務開始前的舊任務打包 task:packageProject
: 代碼如下
gulp.task("packageProject",function(){ var zip = require("gulp-zip"); var fileName = "projectNew_0.zip"; gulp.src(["../dist/**/*","!../dist/{css,js,img}/*.json"]) //找到目標文件夾并且進行去除json文件處理 .pipe(zip(fileName)) //對文件進行壓縮和重命名 .pipe(gulp.dest("../../projectNew")); //壓縮到指定文件夾 });4.總結
現在流行的webpack包管理軟件又要讀前端進行革命了。但是gulp作為個入門短時間內還是不能夠被取代得了的。
5.github項目地址:點擊這里
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/81806.html
摘要:生成的文件如下由于給文件添加了哈希值,所以每次編譯出來的和都是不一樣的,這會導致有很多冗余文件,所以我們可以每次在生成文件之前,先將原來的文件全部清空。中也有做這個工作的插件,因此我們可以在編譯壓縮添加哈希值之前先將原文將清空。 原文鏈接:http://mrzhang123.github.io/2016/09/07/gulpUse/項目鏈接:https://github.com/MrZ...
摘要:以為例,編寫來幫助我們完成重復的工作編譯壓縮我只要執行一下就可以檢測到文件的變化,然后為你執行一系列的自動化操作,同樣的操作也發生在這些的預處理器上。的使用是針對第三方類庫使用各種模塊化寫法以及語法。 showImg(https://segmentfault.com/img/bVbtZYK); 一:前端工程化的發展 很久以前,互聯網行業有個職位叫做 軟件開發工程師 在那個時代,大家可能...
摘要:的生產環境優化完整配置的可以參考本文主要介紹了生產環境我都做了哪些優化文章的結構如下靜態資源路徑。分配不同的關于穩定性的坑注意區分整個項目有變動時,變化。而生產環境可以這一項,因為我們不需要在生產環境調試代碼。 webpack4 的生產環境優化 webpack4完整配置的可以參考: https://github.com/ziwei3749/... 本文主要介紹了 webpack4 生產...
摘要:面試你一般問你的原理,的原理,你有用那些優化措施前端開發已經模塊化,它改進了代碼庫的封裝和結構。這么說負責的是處理源文件的如,一次處理一個文件。小心的運用他們。因為隨著項目的增長,它們會變得很難馴服。 還是以前一樣,有些概念面試可能會考,我都用*標記了出來,兩句話就總結清楚其余的地方如果你想了解webpack,就仔細看看,雖然本教程不能讓你webpack玩的很6,但是懂操作流程夠了。面...
閱讀 3729·2021-09-22 15:49
閱讀 3300·2021-09-08 09:35
閱讀 1422·2019-08-30 15:55
閱讀 2321·2019-08-30 15:44
閱讀 714·2019-08-29 16:59
閱讀 1597·2019-08-29 16:16
閱讀 479·2019-08-28 18:06
閱讀 890·2019-08-27 10:55