這里為總的方法,實際項目中拷貝出來的,底下有詳細的總結以及只針對添加時間戳的方法
1 // 引入 gulp及組件 2 var gulp = require('gulp'), 3 autoprefixer = require('gulp-autoprefixer'), 4 minifycss = require('gulp-minify-css'), //壓縮css 5 jshint = require('gulp-jshint'), //js代碼校驗 6 uglify = require('gulp-uglify'), //壓縮JS 7 imagemin = require('gulp-imagemin'), //壓縮圖片 8 rename = require('gulp-rename'), //重命名文件 9 concat = require('gulp-concat'),//文件合並 10 notify = require('gulp-notify'),//提示信息 11 cache = require('gulp-cache'), 12 livereload = require('gulp-livereload'), 13 del = require('del'), 14 htmlmin = require('gulp-htmlmin'),//壓縮html代碼 15 rev = require('gulp-rev'),//添加時間戳 16 revCollector = require('gulp-rev-collector');//時間戳添加后再html 里面替換原有的文件 17 //建立任務: Styles 18 gulp.task('styles', function() { 19 return gulp.src('src/styles/*.css') 20 .pipe(rename({ 21 suffix: '.min' 22 })) 23 .pipe(minifycss()) 24 .pipe(rev()) 25 .pipe(gulp.dest('dist/styles')) 26 .pipe(rev.manifest()) 27 .pipe(gulp.dest('./rev')) 28 .pipe(notify({ 29 message: 'Styles task complete' 30 })); 31 });
//給css文件后添加時間戳 32 gulp.task('rev', function() { 33 gulp.src(['./rev/*.json', './src/*.html']) 34 //- 讀取 rev-manifest.json 文件以及需要進行css名替換的文件 35 .pipe(revCollector()) 36 //- 執行文件內css名的替換 37 .pipe(gulp.dest('./')); 38 //- 替換后的文件輸出的目錄 39 }); 40 gulp.task('default', ['styles', 'rev']); 41 //建立任務: htmlmin 42 gulp.task('htmlmin', function() { 43 // src/**/*.html 這個代表的是src下邊的html文件以及他的子文件下的所有的html文件 44 return gulp.src('src/*.html') 45 .pipe(rename({ 46 suffix: 'min' 47 })) 48 .pipe(htmlmin({collapseWhitespace: true})) 49 .pipe(gulp.dest('dist')) 50 .pipe(notify({ 51 message: ' task complete' 52 })); 53 }); 54 // Scripts 55 gulp.task('scripts', function() { 56 return gulp.src('src/scripts/**/*.js') 57 .pipe(jshint()) 58 .pipe(jshint.reporter('default')) 59 .pipe(concat('main.js')) 60 .pipe(rename({ 61 suffix: '.min' 62 })) 63 .pipe(uglify()) 64 .pipe(gulp.dest('dist/scripts')) 65 .pipe(notify({ 66 message: 'Scripts task complete' 67 })); 68 }); 69 // Images 70 gulp.task('images', function() { 71 return gulp.src('src/images/**/*') 72 .pipe(cache(imagemin({ 73 optimizationLevel: 3, 74 progressive: true, 75 interlaced: true 76 }))) 77 .pipe(gulp.dest('dist/images')) 78 .pipe(notify({ 79 message: 'Images task complete' 80 })); 81 }); 82 83 // Clean 任務執行前,先清除之前生成的文件 84 gulp.task('clean', function(cb) { 85 del(['dist/assets/css', 'dist/assets/js', 'dist/assets/img'], cb) 86 }); 87 // Default task 設置默認任務 88 gulp.task('default', ['clean'], function() { 89 gulp.start('styles', 'scripts', 'images'); 90 }); 91 // 監聽文件: Watch 92 gulp.task('watch', function() { 93 // 監聽html文件變化 94 gulp.watch('src/*.html', function(){ 95 gulp.run('html'); 96 }); 97 // Watch .scss files 98 gulp.watch('src/styles/**/*.css', ['styles']); 99 // Watch .js files 100 gulp.watch('src/scripts/**/*.js', ['scripts']); 101 // Watch image files 102 gulp.watch('src/images/**/*', ['images']); 103 // Create LiveReload server 104 livereload.listen(); 105 // Watch any files in dist/, reload on change 106 gulp.watch(['dist/**']).on('change', livereload.changed); 107 });
執行添加時間戳
gulp styles
這局執行后會將所有的css壓縮並加上時間戳。
gulp rev
這句執行后會將html里面的路徑替換成加了時間戳的。
對比之前的結構 已經在根目錄下生成rev這個文件,該文件下 有一個rev-manifest.json文件,我們可以看看該文件的代碼如下:
{ "gulp.css": "gulp-34f3902a35.css" }
2、對於沒有使用css3前綴的可以使用gilp 自動加上前綴,插件是
3、總結
需要用到的兩個插件
var rev = require('gulp-rev');//添加時間戳 var revCollector = require('gulp-rev-collector');//時間戳添加后再html 里面替換原有的文件
配置文件中這樣便攜,在平常使用中不執行添加時間戳這個方法,只有在每次項目發布的時候執行這個方法就行
/***css js 動態添加版本號****/ gulp.task("cleanTime",function(){ gulp.src(app.prdPath + 'css/*.css') //清除發布項目中的原有的css .pipe($.clean()) }) gulp.task('styles', function() { gulp.src(app.devPath + 'css/index.css') //找到要進行添加時間戳的css .pipe($.cssmin()) //css壓縮 .pipe(rev()) //css添加時間戳 .pipe(gulp.dest(app.prdPath + 'css')) //這行這兩行,變會出現配置替換以前css文件的 json 文件 .pipe(rev.manifest()) .pipe(gulp.dest('./rev/css')) //配置文件生成目錄 .pipe($.connect.reload()); }); gulp.task("cleanJsTime",function(){ gulp.src(app.prdPath + 'js/*.js') .pipe($.clean()) }) gulp.task('jsTimeAdd', function() { gulp.src(app.devPath + 'js/index.js') .pipe($.uglify()) //壓縮js .pipe(rev()) .pipe(gulp.dest(app.prdPath + 'js')) .pipe(rev.manifest()) .pipe(gulp.dest('./rev/js')) .pipe($.connect.reload()); }); gulp.task('rev', function() { gulp.src(['./rev/*.json', './dist/main.html']) .pipe(revCollector()) .pipe(gulp.dest('./dist')); }); //總的版本號添加 gulp.task('addTime',['cleanTime', 'styles','cleanJsTime','jsTimeAdd', 'rev']);
