gulp-自動(dòng)化工具

創(chuàng)建gulp

基于npm的基礎(chǔ)使用gulp良瞧,需先更新npm

npm install -g npm

全局安裝gulp

npm install -g gulp

檢查版本

gulp -v

一.建立站點(diǎn)
站點(diǎn)目錄

項(xiàng)目開發(fā)中分兩個(gè)環(huán)境:
build為生產(chǎn)環(huán)境
src為開發(fā)環(huán)境
兩個(gè)環(huán)境要隔離開來

二.初始化建立pageage.json

npm init -y

一路yes

三.要在本地安裝gulp 作為項(xiàng)目的開發(fā)依賴(devDependencies)安裝

npm install --save-dev gulp

node_modules.png
四.在根目錄建立一個(gè)gulpfile.js 用來做你想做的事情
var gulp = require('gulp');
gulp.task('default', function() {
  // 將你的默認(rèn)的任務(wù)代碼放在這
});
方法羅列.png
開發(fā)版本分離模式.png
刪除文件 禁用 一旦刪除無法恢復(fù)
var del=require('del');
gulp.task('del',function(){
    del([
        './src/css',
        './src/'
    ])
})

gulp自動(dòng)化最佳實(shí)戰(zhàn)

1.md5命名文件的方式

var gulp = require('gulp');
var less = require('gulp-less');
var concat = require('gulp-concat');
var cleanCss =require('gulp-clean-css');
var del=require('del');
var babel=require('gulp-babel');
var uglify = require('gulp-uglify');
var rename =require('gulp-rename');
var imagemin =require('gulp-imagemin');
var spriter = require('gulp-css-spriter');
var base64 = require('gulp-base64');
var browserSync = require('browser-sync').create();
var reload=browserSync.reload;
var rev=require('gulp-rev');//給文件名添加md5后綴
var revCollector=require('gulp-rev-collector'); //路徑替換
var runSequence=require('run-sequence');
//var notify=require('gulp-notify');
var build={
    basePath:'./build/',
    css:'./build/css',
    images:'./build/images/',
    js:'./build/js/'
};
var src={
    basePath:'./src/',
    css:'./src/css/',
    images:'./src/images/',
    js:'./src/js/',
    less:'./src/less/'
};
/************************開發(fā)模式*****************************/
//服務(wù)器實(shí)時(shí)預(yù)覽刷新
gulp.task('server:dev',function(){
    browserSync.init({
        server:{
            baseDir:src.basePath,
            index:'index.html'
        },
        port:80
    });
    gulp.watch('src/*.html',['html:dev']);
    gulp.watch('src/less/*.less',['less']);
    gulp.watch('src/css/*.css',['css:dev']);
    gulp.watch('src/js/*.js',['js:dev']);
    runSequence(['less'],['css:dev','js:dev']);

});
gulp.task('html:dev',function(){
    gulp.src(['./src/*.html'])
        .pipe(gulp.dest(src.basePath))
        .pipe(reload({stream:true}))
});

gulp.task('less',function(){
    gulp.src(src.less+'*.less')
        .pipe(less())
        .pipe(gulp.dest(src.css))
        .pipe(reload({stream:true}))
});
gulp.task('css:dev',function(){
    gulp.src([src.css+'*.css','!'+src.css+'all.min.css','!'+src.css+'all.css'])
        .pipe(concat('all.css'))
        .pipe(spriter({
            'spriteSheet': src.images+'spritesheet.png',
            'pathToSpriteSheetFromCSS': '../images/spritesheet.png'
        }))
        .pipe(base64())
        .pipe(gulp.dest(src.css))
        .pipe(cleanCss())
        .pipe(rename('all.min.css'))
        .pipe(gulp.dest(src.css))
        .pipe(reload({stream:true}))
});

gulp.task('js:dev',function(){
    gulp.src([src.js+'*.js','!'+src.js+'all.js','!'+'src.js'+'all.min.js'])
        .pipe(babel({
            presets:['es2015']
        }))
        .pipe(concat('all.js'))
        .pipe(gulp.dest(src.js))
        .pipe(uglify())
        .pipe(rename('all.min.js'))
        .pipe(gulp.dest(src.js))
        .pipe(reload({stream:true}))
});

/************************生成模式***************************/
gulp.task('server:product',function(){
    runSequence(['imagesmin','publish:html','publish:css','publish:js'],'rev');
    browserSync.init({
        server:{
            baseDir:build.basePath,
            index:'index.html'
        },
        port:81
    });
});
gulp.task('imagesmin',function(){
    gulp.src(src.images+'*.*')
        .pipe(imagemin())
        .pipe(gulp.dest(build.images))
});
gulp.task('publish:html',function(){
   gulp.src(src.basePath+'*.html')
       .pipe(gulp.dest(build.basePath))
});
gulp.task('publish:css',function(){
    gulp.src(src.css+'all.min.css')
        .pipe(rev())//發(fā)布新版本
        .pipe(gulp.dest(build.css))
        .pipe(rev.manifest())
        .pipe(gulp.dest('./rev/css/'))
});
gulp.task('publish:js',function(){
    gulp.src(src.js+'all.min.js')
        .pipe(rev())
        .pipe(gulp.dest(build.js))
        .pipe(rev.manifest())
        .pipe(gulp.dest('./rev/js/'))
});
gulp.task('del:build',function(){
    del([
        build.basePath
    ])
});
gulp.task('rev',function(){
    return gulp.src(['./rev/**/*.json',build.basePath+'*.html'])
        .pipe(revCollector({}))
        .pipe(gulp.dest(build.basePath));
});


2.使用版本號(hào)參數(shù)的方式 要在HTML路徑后加 ?rev=@@hash

var gulp = require('gulp');
var less = require('gulp-less');
var concat = require('gulp-concat');
var cleanCss =require('gulp-clean-css');
var del=require('del');
var babel=require('gulp-babel');
var uglify = require('gulp-uglify');
var rename =require('gulp-rename');
var imagemin =require('gulp-imagemin');
var spriter = require('gulp-css-spriter');
var base64 = require('gulp-base64');
var browserSync = require('browser-sync').create();
var reload=browserSync.reload;
var rev  = require('gulp-rev-append');//給URL自動(dòng)加上版本號(hào)
var runSequence=require('run-sequence');
var build={
    basePath:'./build/',
    css:'./build/css',
    images:'./build/images/',
    js:'./build/js/'
};
var src={
    basePath:'./src/',
    css:'./src/css/',
    images:'./src/images/',
    js:'./src/js/',
    less:'./src/less/'
};
/************************開發(fā)模式*****************************/
//服務(wù)器實(shí)時(shí)預(yù)覽刷新
gulp.task('server:dev',function(){
    browserSync.init({
        server:{
            baseDir:src.basePath,
            index:'index.html'
        },
        port:80
    });
    gulp.watch('src/*.html',['html:dev']);
    gulp.watch('src/less/*.less',['less']);
    gulp.watch('src/css/*.css',['css:dev']);
    gulp.watch('src/js/*.js',['js:dev']);
    runSequence(['less'],['css:dev','js:dev']);

});
gulp.task('html:dev',function(){
    gulp.src(['./src/*.html'])
        .pipe(gulp.dest(src.basePath))
        .pipe(reload({stream:true}))
});

gulp.task('less',function(){
    gulp.src(src.less+'*.less')
        .pipe(less())
        .pipe(gulp.dest(src.css))
        .pipe(reload({stream:true}))
});
gulp.task('css:dev',function(){
    gulp.src([src.css+'*.css','!'+src.css+'all.min.css','!'+src.css+'all.css'])
        .pipe(concat('all.css'))
        .pipe(spriter({
            'spriteSheet': src.images+'spritesheet.png',
            'pathToSpriteSheetFromCSS': '../images/spritesheet.png'
        }))
        .pipe(base64())
        .pipe(gulp.dest(src.css))
        .pipe(cleanCss())
        .pipe(rename('all.min.css'))
        .pipe(gulp.dest(src.css))
        .pipe(reload({stream:true}))
});

gulp.task('js:dev',function(){
    gulp.src([src.js+'*.js','!'+src.js+'all.js','!'+'src.js'+'all.min.js'])
        .pipe(babel({
            presets:['es2015']
        }))
        .pipe(concat('all.js'))
        .pipe(gulp.dest(src.js))
        .pipe(uglify())
        .pipe(rename('all.min.js'))
        .pipe(gulp.dest(src.js))
        .pipe(reload({stream:true}))
});

/************************生成模式***************************/
gulp.task('server:product',function(){
    runSequence(['imagesmin','publish:html','publish:css','publish:js'],'rev');
    browserSync.init({
        server:{
            baseDir:build.basePath,
            index:'index.html'
        },
        port:81
    });
});
gulp.task('imagesmin',function(){
    gulp.src(src.images+'*.*')
        .pipe(imagemin())
        .pipe(gulp.dest(build.images))
});
gulp.task('publish:html',function(){
   gulp.src(src.basePath+'*.html')
       .pipe(gulp.dest(build.basePath))
});
gulp.task('publish:css',function(){
    gulp.src(src.css+'all.min.css')
        .pipe(rev())//發(fā)布新版本
        .pipe(gulp.dest(build.css))
       
});
gulp.task('publish:js',function(){
    gulp.src(src.js+'all.min.js')
        .pipe(rev())
        .pipe(gulp.dest(build.js))
      
});
gulp.task('del:build',function(){
    del([
        build.basePath
    ])
});
gulp.task('rev',function(){
    return gulp.src(['./rev/**/*.json',build.basePath+'*.html'])
        .pipe(rev())
        .pipe(gulp.dest(build.basePath));
});



最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末荐操,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌凰慈,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,427評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異趣斤,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)黎休,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門浓领,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人势腮,你說我怎么就攤上這事联贩。” “怎么了捎拯?”我有些...
    開封第一講書人閱讀 165,747評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵撑蒜,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我玄渗,道長(zhǎng)座菠,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,939評(píng)論 1 295
  • 正文 為了忘掉前任藤树,我火速辦了婚禮浴滴,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘岁钓。我一直安慰自己升略,他們只是感情好微王,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,955評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著品嚣,像睡著了一般炕倘。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上翰撑,一...
    開封第一講書人閱讀 51,737評(píng)論 1 305
  • 那天罩旋,我揣著相機(jī)與錄音,去河邊找鬼眶诈。 笑死涨醋,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的逝撬。 我是一名探鬼主播浴骂,決...
    沈念sama閱讀 40,448評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼宪潮!你這毒婦竟也來了溯警?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,352評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤狡相,失蹤者是張志新(化名)和其女友劉穎愧膀,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體谣光,經(jīng)...
    沈念sama閱讀 45,834評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡檩淋,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,992評(píng)論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了萄金。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蟀悦。...
    茶點(diǎn)故事閱讀 40,133評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖氧敢,靈堂內(nèi)的尸體忽然破棺而出日戈,到底是詐尸還是另有隱情,我是刑警寧澤孙乖,帶...
    沈念sama閱讀 35,815評(píng)論 5 346
  • 正文 年R本政府宣布浙炼,位于F島的核電站,受9級(jí)特大地震影響唯袄,放射性物質(zhì)發(fā)生泄漏弯屈。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,477評(píng)論 3 331
  • 文/蒙蒙 一恋拷、第九天 我趴在偏房一處隱蔽的房頂上張望资厉。 院中可真熱鬧,春花似錦蔬顾、人聲如沸宴偿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽窄刘。三九已至窥妇,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間娩践,已是汗流浹背活翩。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評(píng)論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留欺矫,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,398評(píng)論 3 373
  • 正文 我出身青樓展氓,卻偏偏與公主長(zhǎng)得像穆趴,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子遇汞,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,077評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 以下說明是根據(jù) windows 系統(tǒng)安裝配置未妹。 1 Node官網(wǎng):https://nodejs.org/en/do...
    Separes閱讀 528評(píng)論 0 0
  • gulpjs是一個(gè)前端構(gòu)建工具,與gruntjs相比空入,gulpjs無需寫一大堆繁雜的配置參數(shù)络它,API也非常簡(jiǎn)單,學(xué)...
    依依玖玥閱讀 3,155評(píng)論 7 55
  • gulpjs是一個(gè)前端構(gòu)建工具歪赢,與gruntjs相比化戳,gulpjs無需寫一大堆繁雜的配置參數(shù),API也非常簡(jiǎn)單埋凯,學(xué)...
    井皮皮閱讀 1,301評(píng)論 0 10
  • 在現(xiàn)在的前端開發(fā)中点楼,前后端分離、模塊化開發(fā)白对、版本控制掠廓、文件合并與壓縮、mock數(shù)據(jù)等等一些原本后端的思想開始...
    Charlot閱讀 5,443評(píng)論 1 32
  • 在這樣的情況下甩恼,想要改變自己的人生蟀瞧,就要付出更多的努力才行。當(dāng)別人利用業(yè)余時(shí)間休閑娛樂的時(shí)候条摸,你就必須利用這些時(shí)間...
    心靈的港灣xia閱讀 193評(píng)論 0 1