gulp實現前端靜態資源的壓縮,加MD5戳,替換引用,加CDN字首
阿新 • • 發佈:2019-01-05
之前一直在使用grunt,總感覺grunt的引數配置方法很繁瑣,沒有一個比較清晰的流程,加上自己對gulp的流操作比較感興趣,就決定轉戰gulp了。
相信前端er在釋出自己的程式碼時如果不使用前端一些構建工具的話,對頻繁上線的專案來說,自己手動壓縮打包替換CDN字首那是一件多麼恐怖的事情!所以採用gulp前端構建工具是一個非常明智的選擇。
首先來說說釋出專案時前端需要進行哪些操作:1.對靜態資源的壓縮合並雖然看起來就這4步,不過寫起任務來還是挺麻煩的。
2.對js,css,img等資源加MD5戳
3.對引用了以上加MD5戳的HTML檔案進行替換檔案內的引用。
4.為HTML檔案內的引用加CDN字首
上程式碼:
- var gulp = require('gulp');
- var minimist = require('minimist');
- var uglify = require('gulp-uglify');
- var minifyHtml = require('gulp-minify-html');
- var minifyCss = require('gulp-minify-css');
- var rev = require('gulp-rev');
-
var
- var prefix = require('gulp-prefix');
- var zip = require('gulp-zip');
- var gulpSequence = require('gulp-sequence');
- var cmd = {
- string: 'v',
- default: { v: '1.0' }
- };
- var option = {
- src:'poster',
-
dest:'poster/build'
- cdn:'http://sns_wf.cdn.sohusce.com'///poster/
- }
- var options = minimist(process.argv.slice(2), cmd);
- var version = options.v;
- //統一加MD5之後替換引用
- gulp.task('cdn',function(){
- var revAll = new RevAll({dontRenameFile:[/^\/.*.html/]});// ,/^\/.*.jpg|png/
- gulp.src([option.src+'/templates-dev/*.html',option.src+'/static/**'])
- .pipe(revAll.revision())
- .pipe(gulp.dest(option.dest+'/'+version))
- .pipe(revAll.versionFile())
- .pipe(gulp.dest(option.dest+'/'+version))
- .pipe(revAll.manifestFile())
- .pipe(gulp.dest(option.dest+'/'+version));
- });
- gulp.task("rep" ,function(){
- var manifest = gulp.src(option.dest + '/'+ version + "/rev-manifest.json");
- console.log(option.dest +'/'+ version);
- return gulp.src(option.dest +'/'+ version + '/templates-dev/*.html')
- .pipe(revReplace({manifest: manifest}))
- .pipe(gulp.dest(option.src +'/templates' ));
- });
- gulp.task('prefix',function(){
- console.log('加CDN字首...');
- return gulp.src(option.src+'/templates/*.html')
- .pipe(prefix(option.cdn, null))
- .pipe(gulp.dest(option.src+'/templates/'));
- })
- gulp.task('htmlmin',function(){
- return gulp.src([option.src + '/templates/*.html'],{base:option.src })
- .pipe(minifyHtml())
- .pipe(gulp.dest(option.src));
- })
- gulp.task('jsmin',function(){
- return gulp.src([option.dest +'/'+ version + '/static/js/*.js',option.dest +'/'+ version + '/static/imgcut/js/*.js'],{base:option.dest +'/'+ version})
- .pipe(uglify())
- .pipe(gulp.dest(option.dest +'/'+ version));
- })
- gulp.task('cssmin',function(){
- return gulp.src([option.dest +'/'+ version + '/static/css/*.css',option.dest +'/'+ version + '/static/imgcut/css/*.css'],{base:option.dest +'/'+ version})
- .pipe(minifyCss())
- .pipe(gulp.dest(option.dest +'/'+ version));
- })
- gulp.task('zip',function(){
- console.log('壓縮中...')
- return gulp.src([option.dest+'/'+version+'/static/**',])
- .pipe(zip('static.zip'))
- .pipe(gulp.dest(option.dest+'/'+version));
- })
- gulp.task('r',function(cb){
- gulpSequence('rep','prefix',['htmlmin','jsmin','cssmin'],'zip',cb)
- })
- gulp-rev-all 給靜態資源加MD5戳,,生成原始檔名和打了戳的MD5檔名的一個rev-manifest.json檔案(這很關鍵)。
- gulp-prefix 給引用了靜態資源的的HTML檔案替換引用和加CDN字首
- minimist 給任務的執行新增引數 eg: gulp r --v 1.0
- cdn 詳見外掛介紹的gulp-rev-all 。
- rep 詳見gulp-prefix
- htmlmin,cssmin,jsmin,zip 給靜態資源壓縮後打成一個zip包,方便部署CDN。
- r 組織任務的執行,防止子任務執行中的非同步操作擾亂整個任務的執行。
- gulp cdn --v 1.0 //生成1.0版本
- gulp r