1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > gulp实现打包js/css/img/html文件 并对js/css/img文件加上版本号

gulp实现打包js/css/img/html文件 并对js/css/img文件加上版本号

时间:2023-09-26 22:41:23

相关推荐

gulp实现打包js/css/img/html文件 并对js/css/img文件加上版本号

参考打包教程:

/tugenhua0707/p/4069769.html

/tugenhua0707/p/4982646.html

/articles/viequay

/Platform-CUF/use-gulp

实现要点:

1、如何运行gulp的任务,加入新建好一个如下任务:

// 语法检查gulp.task('jshint', function () {gulp.src('js/**/*.js').pipe(jshint()).pipe(jshint.reporter('default'));});

那么在命令行上运行:gulp jshint

2、为什么安装了全局还要安装本地,参考这个:/EasonJim/p/6207201.html

3、对于npm的命令详解,参考这个:/EasonJim/p/6206179.html

4、我使用的node.js版本为:v7.4.0,如下所示:

以下为我项目上的一个打包配置文件,如下:

(注意:这个没有解决同步执行问题)

var gulp = require('gulp');//gulp主组件var htmlmin = require('gulp-htmlmin');//html压缩组件var jshint = require('gulp-jshint');//js语法检查var concat = require('gulp-concat');//多个文件合并为一个var minifyCss = require('gulp-minify-css');//压缩CSS为一行;var uglify = require('gulp-uglify');//js文件压缩var del = require('del');//文件删除var rev = require('gulp-rev');//对文件名加MD5后缀var revCollector = require('gulp-rev-collector');//路径替换var gulpRemoveHtml = require('gulp-remove-html');//标签清除,参考:/package/gulp-remove-htmlvar removeEmptyLines = require('gulp-remove-empty-lines');//清除空白行,参考:/package/gulp-remove-empty-linesvar replace = require('gulp-replace');//文件名替换,参考:/package/gulp-replacevar buildBasePath = 'build/';//构建输出的目录// 语法检查gulp.task('jshint', function () {gulp.src('js/**/*.js').pipe(jshint()).pipe(jshint.reporter('default'));});//删除Build文件gulp.task('clean:Build', function () {del([buildBasePath+'**/*',]);});//复制文件夹gulp.task('copy', function() {gulp.src('plugins/**/*').pipe(gulp.dest(buildBasePath+'plugins'));});gulp.task('copyimg', function() {//如果下面执行了md5资源文件img,那么这步可以省略gulp.src('img/**/*').pipe(gulp.dest(buildBasePath+'img'));});//合并js,css文件之后压缩代码//jsgulp.task('minifyjs', function(){gulp.src('js/**/*.js').pipe(concat('build.js'))//合成到一个js.pipe(gulp.dest(buildBasePath+'js'))//输出到js目录.pipe(uglify())//压缩js到一行.pipe(concat('build.min.js'))//压缩后的js.pipe(gulp.dest(buildBasePath+'js'));//输出到js目录});//jsmd5,压缩后并用md5进行命名,下面使用revCollector进行路径替换gulp.task('minifyjsmd5', function() {gulp.src('js/**/*.js').pipe(concat('build.min.js'))//压缩后的js.pipe(uglify())//压缩js到一行.pipe(rev())//文件名加MD5后缀.pipe(gulp.dest(buildBasePath+'js'))//输出到js目录.pipe(rev.manifest('rev-js-manifest.json'))////生成一个rev-manifest.json.pipe(gulp.dest('rev'));//将 rev-manifest.json 保存到 rev 目录内});//cssgulp.task('minifycss', function (){gulp.src('css/**/*.css').pipe(concat('build.css'))//合成到一个css.pipe(gulp.dest(buildBasePath+'css'))//输出到css目录.pipe(minifyCss())//压缩css到一样.pipe(concat('build.min.css'))//压缩后的css.pipe(gulp.dest(buildBasePath+'css'));//输出到css目录});//cssmd5,压缩后并用md5进行命名,下面使用revCollector进行路径替换gulp.task('minifycssmd5', function (){gulp.src('css/**/*.css').pipe(concat('build.min.css'))//压缩后的css.pipe(minifyCss())//压缩css到一样.pipe(rev())//文件名加MD5后缀.pipe(gulp.dest(buildBasePath+'css'))//输出到css目录.pipe(rev.manifest('rev-css-manifest.json'))//生成一个rev-manifest.json.pipe(gulp.dest('rev'));//将 rev-manifest.json 保存到 rev 目录内});//imgmd5,压缩后并用md5进行命名,下面使用revCollector进行路径替换gulp.task('minifyimgmd5', function (){gulp.src(['img/**/*.jpg','img/**/*.png']).pipe(rev())//文件名加MD5后缀.pipe(gulp.dest(buildBasePath+'img'))//输出到css目录.pipe(rev.manifest('rev-img-manifest.json'))//生成一个rev-manifest.json.pipe(gulp.dest('rev'));//将 rev-manifest.json 保存到 rev 目录内});//html压缩gulp.task('html',function(){var options = {removeComments: true,//清除HTML注释collapseWhitespace: false,//压缩HTMLcollapseBooleanAttributes: true,//省略布尔属性的值 <input checked="true"/> ==> <input />removeEmptyAttributes: true,//删除所有空格作属性值 <input id="" /> ==> <input />removeScriptTypeAttributes: true,//删除<script>的type="text/javascript"removeStyleLinkTypeAttributes: true,//删除<style>和<link>的type="text/css"minifyJS: true,//压缩页面JSminifyCSS: true//压缩页面CSS };gulp.src('*.html').pipe(gulpRemoveHtml())//清除特定标签.pipe(removeEmptyLines({removeComments: true}))//清除空白行 .pipe(htmlmin(options)).pipe(gulp.dest(buildBasePath));});//生产使用,替换文件名,common.js替换为build.min.jsgulp.task('replacejs', function(){gulp.src([buildBasePath+'*.html']).pipe(replace('common.js', 'build.min.js')).pipe(gulp.dest(buildBasePath));});//生产使用,替换文件名,common.css替换为build.min.cssgulp.task('replacecss', function(){gulp.src([buildBasePath+'*.html']).pipe(replace('common.css', 'build.min.css')).pipe(gulp.dest(buildBasePath));});//开发使用,替换文件名,common.js替换为build.jsgulp.task('replacejsdev', function(){gulp.src([buildBasePath+'*.html']).pipe(replace('common.js', 'build.js')).pipe(gulp.dest(buildBasePath));});//开发使用,替换文件名,common.css替换为build.cssgulp.task('replacecssdev', function(){gulp.src([buildBasePath+'*.html']).pipe(replace('common.css', 'build.css')).pipe(gulp.dest(buildBasePath));});//使用rev替换成md5文件名,这里包括html和css的资源文件也一起gulp.task('rev', function() {//html,针对js,css,imggulp.src(['rev/**/*.json', buildBasePath+'**/*.html']).pipe(revCollector({replaceReved:true })).pipe(gulp.dest(buildBasePath));});gulp.task('revimg', function() {//css,主要是针对img替换gulp.src(['rev/**/rev-img-manifest.json', buildBasePath+'css/*.css']).pipe(revCollector({replaceReved:true })).pipe(gulp.dest(buildBasePath+'css'));});//监视文件的变化,有修改时,自动调用default缺省默认任务gulp.task('watch', function () {gulp.watch('**/*.html', ['default']);});//缺省默认任务,输出的js和css文件都带参数/*执行顺序:* 1、清除编译输出目录build的全部文件* 2、复制第三方组件依赖到build文件夹* 3、使用带md5对js文件进行压缩打包一个文件,命名根据gulp-rev插件md5之后的命名进行命名,如build-asdf123.min.js,并输出到build/js文件夹* 4、使用带md5对cs文件进行压缩打包一个文件,命名根据gulp-rev插件md5之后的命名进行命名,如build-asd323.min.css,并输出到build/cs文件夹* 5、(可选)使用带md5对img文件夹的全部文件进行重命名,命名根据gulp-rev插件md5之后的命名进行命名,如common-asdf123.jpg,并输出到build/img文件夹;如果这部不操作,下面第10步将不执行。* 6、将build目录下的全部html页面进行压缩处理,采用gulp-minhtml插进* 7、由于项目上使用了模块开发,然后每个页面上都会引入common.js文件,而合并后的js文件为build.min.js,所以使用gulp-replace插进对html页面进行替换,并将html文件输出到build目录上* 8、再次在build目录上,将html进行common.css文件替换成build.min.css* 9、使用gulp-rev-collectorc插件对刚才生成带参数的js和css文件在html页面上进行替换,如build.min.js替换成build-asdf123.min.js。还是输出到build目录。* 10、(可选)使用gulp-rev-collectorc插件对刚才生成带参数的img文件在css文件上进行替换,如common.jpg替换成common-asdf12.jpg。输出到目录* */gulp.task('default',['clean:Build','copy','minifyjsmd5','minifycssmd5','minifyimgmd5','html','replacejs','replacecss','rev','revimg']);//默认任务2,输出的js和css文件不带参数/*执行顺序:* 1、清除编译输出目录build的全部文件* 2、复制第三方组件依赖到build文件夹* 3、对js文件进行压缩打包一个文件,命名如build.min.js,并输出到build/js文件夹* 4、对cs文件进行压缩打包一个文件,命名如build.min.css,并输出到build/cs文件夹* 5、将build目录下的全部html页面进行压缩处理,采用gulp-minhtml插进* 6、由于项目上使用了模块开发,然后每个页面上都会引入common.js文件,而合并后的js文件为build.min.js,所以使用gulp-replace插进对html页面进行替换,并将html文件输出到build目录上* 7、再次在build目录上,将html进行common.css文件替换成build.min.css* */gulp.task('default2', ['clean:Build','copy','copyimg','minifyjs','minifycss','html','replacejs','replacecss']);//开发使用默认任务,js和css不带参数,且不合并/*执行顺序:* 1、清除编译输出目录build的全部文件* 2、复制第三方组件依赖到build文件夹* 3、对js文件进行压缩打包一个文件,命名如build.js,并输出到build/js文件夹* 4、对cs文件进行压缩打包一个文件,命名如build.css,并输出到build/cs文件夹* 5、将build目录下的全部html页面进行压缩处理,采用gulp-minhtml插进* 6、由于项目上使用了模块开发,然后每个页面上都会引入common.js文件,而合并后的js文件为build.js,所以使用gulp-replace插进对html页面进行替换,并将html文件输出到build目录上* 7、再次在build目录上,将html进行common.css文件替换成build.css* */gulp.task('defaultdev', ['clean:Build','copy','copyimg','minifyjs','minifycss','html','replacejsdev','replacecssdev']);

但是很纠结的一个问题,我这样去执行默认任务:gulp,发现没有按顺序执行。

下载将改写上面的配置,加入同步顺序执行。我收集了一些同步执行的资料,参考这个:/EasonJim/p/6209725.html

以下为我增加同步执行的方法:

var gulp = require('gulp');//gulp主组件var htmlmin = require('gulp-htmlmin');//html压缩组件var jshint = require('gulp-jshint');//js语法检查var concat = require('gulp-concat');//多个文件合并为一个var minifyCss = require('gulp-minify-css');//压缩CSS为一行;var uglify = require('gulp-uglify');//js文件压缩var rev = require('gulp-rev');//对文件名加MD5后缀var revCollector = require('gulp-rev-collector');//路径替换var gulpRemoveHtml = require('gulp-remove-html');//标签清除,参考:/package/gulp-remove-htmlvar removeEmptyLines = require('gulp-remove-empty-lines');//清除空白行,参考:/package/gulp-remove-empty-linesvar replace = require('gulp-replace');//文件名替换,参考:/package/gulp-replacevar gulpSequence = require('gulp-sequence');//同步执行,参考:/teambition/gulp-sequencevar clean = require('gulp-clean');//清除文件插件,参考:/teambition/gulp-cleanvar buildBasePath = 'build/';//构建输出的目录//删除Build文件gulp.task('clean:Build', function (cb) {return gulp.src(buildBasePath, {read: false}).pipe(clean());});//复制文件夹gulp.task('copy', function() {return gulp.src('plugins/**/*').pipe(gulp.dest(buildBasePath+'plugins'));});gulp.task('copyimg', function() {//如果下面执行了md5资源文件img,那么这步可以省略return gulp.src('img/**/*').pipe(gulp.dest(buildBasePath+'img'));});//合并js,css文件之后压缩代码//jsgulp.task('minifyjs', function(){return gulp.src('js/**/*.js').pipe(concat('build.js'))//合成到一个js.pipe(gulp.dest(buildBasePath+'js'))//输出到js目录.pipe(uglify())//压缩js到一行.pipe(concat('build.min.js'))//压缩后的js.pipe(gulp.dest(buildBasePath+'js'));//输出到js目录});//jsmd5,压缩后并用md5进行命名,下面使用revCollector进行路径替换gulp.task('minifyjsmd5', function() {return gulp.src('js/**/*.js').pipe(concat('build.min.js'))//压缩后的js.pipe(uglify())//压缩js到一行.pipe(rev())//文件名加MD5后缀.pipe(gulp.dest(buildBasePath+'js'))//输出到js目录.pipe(rev.manifest('rev-js-manifest.json'))////生成一个rev-manifest.json.pipe(gulp.dest('rev'));//将 rev-manifest.json 保存到 rev 目录内});//cssgulp.task('minifycss', function (){return gulp.src('css/**/*.css').pipe(concat('build.css'))//合成到一个css.pipe(gulp.dest(buildBasePath+'css'))//输出到css目录.pipe(minifyCss())//压缩css到一样.pipe(concat('build.min.css'))//压缩后的css.pipe(gulp.dest(buildBasePath+'css'));//输出到css目录});//cssmd5,压缩后并用md5进行命名,下面使用revCollector进行路径替换gulp.task('minifycssmd5', function (){return gulp.src('css/**/*.css').pipe(concat('build.min.css'))//压缩后的css.pipe(minifyCss())//压缩css到一样.pipe(rev())//文件名加MD5后缀.pipe(gulp.dest(buildBasePath+'css'))//输出到css目录.pipe(rev.manifest('rev-css-manifest.json'))//生成一个rev-manifest.json.pipe(gulp.dest('rev'));//将 rev-manifest.json 保存到 rev 目录内});//imgmd5,压缩后并用md5进行命名,下面使用revCollector进行路径替换gulp.task('minifyimgmd5', function (){return gulp.src(['img/**/*.jpg','img/**/*.png','img/**/*.gif']).pipe(rev())//文件名加MD5后缀.pipe(gulp.dest(buildBasePath+'img'))//输出到css目录.pipe(rev.manifest('rev-img-manifest.json'))//生成一个rev-manifest.json.pipe(gulp.dest('rev'));//将 rev-manifest.json 保存到 rev 目录内});//html压缩gulp.task('html',function(){var options = {removeComments: true,//清除HTML注释collapseWhitespace: false,//压缩HTMLcollapseBooleanAttributes: true,//省略布尔属性的值 <input checked="true"/> ==> <input />removeEmptyAttributes: true,//删除所有空格作属性值 <input id="" /> ==> <input />removeScriptTypeAttributes: true,//删除<script>的type="text/javascript"removeStyleLinkTypeAttributes: true,//删除<style>和<link>的type="text/css"minifyJS: true,//压缩页面JSminifyCSS: true//压缩页面CSS };return gulp.src('*.html').pipe(gulpRemoveHtml())//清除特定标签.pipe(removeEmptyLines({removeComments: true}))//清除空白行 .pipe(htmlmin(options)).pipe(gulp.dest(buildBasePath));});//生产使用,替换文件名,common.js替换为build.min.jsgulp.task('replacejs', function(){return gulp.src([buildBasePath+'*.html']).pipe(replace('common.js', 'build.min.js')).pipe(gulp.dest(buildBasePath));});//生产使用,替换文件名,common.css替换为build.min.cssgulp.task('replacecss', function(){return gulp.src([buildBasePath+'*.html']).pipe(replace('common.css', 'build.min.css')).pipe(gulp.dest(buildBasePath));});//开发使用,替换文件名,common.js替换为build.jsgulp.task('replacejsdev', function(){return gulp.src([buildBasePath+'*.html']).pipe(replace('common.js', 'build.js')).pipe(gulp.dest(buildBasePath));});//开发使用,替换文件名,common.css替换为build.cssgulp.task('replacecssdev', function(){return gulp.src([buildBasePath+'*.html']).pipe(replace('common.css', 'build.css')).pipe(gulp.dest(buildBasePath));});//使用rev替换成md5文件名,这里包括html和css的资源文件也一起gulp.task('rev', function() {//html,针对js,css,imgreturn gulp.src(['rev/**/*.json', buildBasePath+'**/*.html']).pipe(revCollector({replaceReved:true })).pipe(gulp.dest(buildBasePath));});gulp.task('revimg', function() {//css,主要是针对img替换return gulp.src(['rev/**/rev-img-manifest.json', buildBasePath+'css/*.css']).pipe(revCollector({replaceReved:true })).pipe(gulp.dest(buildBasePath+'css'));});//监视文件的变化,有修改时,自动调用default缺省默认任务gulp.task('watch', function () {gulp.watch('**/*.html', ['default']);});//缺省默认任务,输出的js和css文件都带参数/*执行顺序:* 1、清除编译输出目录build的全部文件* 2、复制第三方组件依赖到build文件夹* 3、使用带md5对js文件进行压缩打包一个文件,命名根据gulp-rev插件md5之后的命名进行命名,如build-asdf123.min.js,并输出到build/js文件夹* 4、使用带md5对cs文件进行压缩打包一个文件,命名根据gulp-rev插件md5之后的命名进行命名,如build-asd323.min.css,并输出到build/cs文件夹* 5、(可选)使用带md5对img文件夹的全部文件进行重命名,命名根据gulp-rev插件md5之后的命名进行命名,如common-asdf123.jpg,并输出到build/img文件夹;如果这部不操作,下面第10步将不执行。* 6、将build目录下的全部html页面进行压缩处理,采用gulp-minhtml插进* 7、由于项目上使用了模块开发,然后每个页面上都会引入common.js文件,而合并后的js文件为build.min.js,所以使用gulp-replace插进对html页面进行替换,并将html文件输出到build目录上* 8、再次在build目录上,将html进行common.css文件替换成build.min.css* 9、使用gulp-rev-collectorc插件对刚才生成带参数的js和css文件在html页面上进行替换,如build.min.js替换成build-asdf123.min.js。还是输出到build目录。* 10、(可选)使用gulp-rev-collectorc插件对刚才生成带参数的img文件在css文件上进行替换,如common.jpg替换成common-asdf12.jpg。输出到目录* */gulp.task('default',gulpSequence('clean:Build','copy','minifyjsmd5','minifycssmd5','minifyimgmd5','html','replacejs','replacecss','rev','revimg'));//默认任务2,输出的js和css文件不带参数/*执行顺序:* 1、清除编译输出目录build的全部文件* 2、复制第三方组件依赖到build文件夹* 3、对js文件进行压缩打包一个文件,命名如build.min.js,并输出到build/js文件夹* 4、对cs文件进行压缩打包一个文件,命名如build.min.css,并输出到build/cs文件夹* 5、将build目录下的全部html页面进行压缩处理,采用gulp-minhtml插进* 6、由于项目上使用了模块开发,然后每个页面上都会引入common.js文件,而合并后的js文件为build.min.js,所以使用gulp-replace插进对html页面进行替换,并将html文件输出到build目录上* 7、再次在build目录上,将html进行common.css文件替换成build.min.css* */gulp.task('default2', gulpSequence('clean:Build','copy','copyimg','minifyjs','minifycss','html','replacejs','replacecss'));//开发使用默认任务,js和css不带参数,且不合并/*执行顺序:* 1、清除编译输出目录build的全部文件* 2、复制第三方组件依赖到build文件夹* 3、对js文件进行压缩打包一个文件,命名如build.js,并输出到build/js文件夹* 4、对cs文件进行压缩打包一个文件,命名如build.css,并输出到build/cs文件夹* 5、将build目录下的全部html页面进行压缩处理,采用gulp-minhtml插进* 6、由于项目上使用了模块开发,然后每个页面上都会引入common.js文件,而合并后的js文件为build.js,所以使用gulp-replace插进对html页面进行替换,并将html文件输出到build目录上* 7、再次在build目录上,将html进行common.css文件替换成build.css* */gulp.task('defaultdev', gulpSequence('clean:Build','copy','copyimg','minifyjs','minifycss','html','replacejsdev','replacecssdev'));

同步任务使用了gulp-sequence插件,其中del插件去除,这个无论如何都是异步的stream,所以替换成了gulp-clean插件。

最后,我发现插件html标签这个插件也是需要用到的,比如像上面我不替换common.js,直接add一个编译后的标签时,使用这个插件:/package/gulp-inject

然后好像一些近乎完美,可是一个隐含的问题没有测试出,就是watch,当你运行watch时,会出现顺序执行的错误:Error: The thunkFunction already filled,其实这个错误是用了gulp-sequence插件导致的,解决办法参考:/teambition/gulp-sequence/issues/2,原理就是加入callback回调。更新后的js文件如下:

var gulp = require('gulp');//gulp主组件var htmlmin = require('gulp-htmlmin');//html压缩组件var jshint = require('gulp-jshint');//js语法检查var concat = require('gulp-concat');//多个文件合并为一个var minifyCss = require('gulp-minify-css');//压缩CSS为一行;var uglify = require('gulp-uglify');//js文件压缩var rev = require('gulp-rev');//对文件名加MD5后缀var revCollector = require('gulp-rev-collector');//路径替换var gulpRemoveHtml = require('gulp-remove-html');//标签清除,参考:/package/gulp-remove-htmlvar removeEmptyLines = require('gulp-remove-empty-lines');//清除空白行,参考:/package/gulp-remove-empty-linesvar replace = require('gulp-replace');//文件名替换,参考:/package/gulp-replacevar gulpSequence = require('gulp-sequence');//同步执行,参考:/teambition/gulp-sequencevar clean = require('gulp-clean');//清除文件插件,参考:/teambition/gulp-cleanvar buildBasePath = 'build/';//构建输出的目录//删除Build文件gulp.task('clean:Build', function (cb) {return gulp.src(buildBasePath, {read: false}).pipe(clean());});//复制文件夹gulp.task('copy', function() {return gulp.src('plugins/**/*').pipe(gulp.dest(buildBasePath+'plugins'));});gulp.task('copyimg', function() {//如果下面执行了md5资源文件img,那么这步可以省略return gulp.src('img/**/*').pipe(gulp.dest(buildBasePath+'img'));});//合并js,css文件之后压缩代码//jsgulp.task('minifyjs', function(){return gulp.src('js/**/*.js').pipe(concat('build.js'))//合成到一个js.pipe(gulp.dest(buildBasePath+'js'))//输出到js目录.pipe(uglify())//压缩js到一行.pipe(concat('build.min.js'))//压缩后的js.pipe(gulp.dest(buildBasePath+'js'));//输出到js目录});//jsmd5,压缩后并用md5进行命名,下面使用revCollector进行路径替换gulp.task('minifyjsmd5', function() {return gulp.src('js/**/*.js').pipe(concat('build.min.js'))//压缩后的js.pipe(uglify())//压缩js到一行.pipe(rev())//文件名加MD5后缀.pipe(gulp.dest(buildBasePath+'js'))//输出到js目录.pipe(rev.manifest('rev-js-manifest.json'))////生成一个rev-manifest.json.pipe(gulp.dest('rev'));//将 rev-manifest.json 保存到 rev 目录内});//cssgulp.task('minifycss', function (){return gulp.src('css/**/*.css').pipe(concat('build.css'))//合成到一个css.pipe(gulp.dest(buildBasePath+'css'))//输出到css目录.pipe(minifyCss())//压缩css到一样.pipe(concat('build.min.css'))//压缩后的css.pipe(gulp.dest(buildBasePath+'css'));//输出到css目录});//cssmd5,压缩后并用md5进行命名,下面使用revCollector进行路径替换gulp.task('minifycssmd5', function (){return gulp.src('css/**/*.css').pipe(concat('build.min.css'))//压缩后的css.pipe(minifyCss())//压缩css到一样.pipe(rev())//文件名加MD5后缀.pipe(gulp.dest(buildBasePath+'css'))//输出到css目录.pipe(rev.manifest('rev-css-manifest.json'))//生成一个rev-manifest.json.pipe(gulp.dest('rev'));//将 rev-manifest.json 保存到 rev 目录内});//imgmd5,压缩后并用md5进行命名,下面使用revCollector进行路径替换gulp.task('minifyimgmd5', function (){return gulp.src(['img/**/*.jpg','img/**/*.png','img/**/*.gif']).pipe(rev())//文件名加MD5后缀.pipe(gulp.dest(buildBasePath+'img'))//输出到css目录.pipe(rev.manifest('rev-img-manifest.json'))//生成一个rev-manifest.json.pipe(gulp.dest('rev'));//将 rev-manifest.json 保存到 rev 目录内});//html压缩gulp.task('html',function(){var options = {removeComments: true,//清除HTML注释collapseWhitespace: false,//压缩HTMLcollapseBooleanAttributes: true,//省略布尔属性的值 <input checked="true"/> ==> <input />removeEmptyAttributes: true,//删除所有空格作属性值 <input id="" /> ==> <input />removeScriptTypeAttributes: true,//删除<script>的type="text/javascript"removeStyleLinkTypeAttributes: true,//删除<style>和<link>的type="text/css"minifyJS: true,//压缩页面JSminifyCSS: true//压缩页面CSS };return gulp.src('*.html').pipe(gulpRemoveHtml())//清除特定标签.pipe(removeEmptyLines({removeComments: true}))//清除空白行 .pipe(htmlmin(options)).pipe(gulp.dest(buildBasePath));});//生产使用,替换文件名,common.js替换为build.min.jsgulp.task('replacejs', function(){return gulp.src([buildBasePath+'*.html']).pipe(replace('common.js', 'build.min.js')).pipe(gulp.dest(buildBasePath));});//生产使用,替换文件名,common.css替换为build.min.cssgulp.task('replacecss', function(){return gulp.src([buildBasePath+'*.html']).pipe(replace('common.css', 'build.min.css')).pipe(gulp.dest(buildBasePath));});//开发使用,替换文件名,common.js替换为build.jsgulp.task('replacejsdev', function(){return gulp.src([buildBasePath+'*.html']).pipe(replace('common.js', 'build.js')).pipe(gulp.dest(buildBasePath));});//开发使用,替换文件名,common.css替换为build.cssgulp.task('replacecssdev', function(){return gulp.src([buildBasePath+'*.html']).pipe(replace('common.css', 'build.css')).pipe(gulp.dest(buildBasePath));});//使用rev替换成md5文件名,这里包括html和css的资源文件也一起gulp.task('rev', function() {//html,针对js,css,imgreturn gulp.src(['rev/**/*.json', buildBasePath+'**/*.html']).pipe(revCollector({replaceReved:true })).pipe(gulp.dest(buildBasePath));});gulp.task('revimg', function() {//css,主要是针对img替换return gulp.src(['rev/**/rev-img-manifest.json', buildBasePath+'css/*.css']).pipe(revCollector({replaceReved:true })).pipe(gulp.dest(buildBasePath+'css'));});//监视文件的变化,有修改时,自动调用default缺省默认任务gulp.task('watch', function () {gulp.watch('**/*.html', ['default']);});//监视文件的变化,有修改时,自动调用default2缺省默认任务gulp.task('watch2', function () {gulp.watch('**/*.html', ['default2']);});//监视文件的变化,有修改时,自动调用defaultdev缺省默认任务gulp.task('watchdev', function () {gulp.watch('**/*.html', ['defaultdev']);});//缺省默认任务,输出的js和css文件都带参数/*执行顺序:* 1、清除编译输出目录build的全部文件* 2、复制第三方组件依赖到build文件夹* 3、使用带md5对js文件进行压缩打包一个文件,命名根据gulp-rev插件md5之后的命名进行命名,如build-asdf123.min.js,并输出到build/js文件夹* 4、使用带md5对cs文件进行压缩打包一个文件,命名根据gulp-rev插件md5之后的命名进行命名,如build-asd323.min.css,并输出到build/cs文件夹* 5、(可选)使用带md5对img文件夹的全部文件进行重命名,命名根据gulp-rev插件md5之后的命名进行命名,如common-asdf123.jpg,并输出到build/img文件夹;如果这部不操作,下面第10步将不执行。* 6、将build目录下的全部html页面进行压缩处理,采用gulp-minhtml插进* 7、由于项目上使用了模块开发,然后每个页面上都会引入common.js文件,而合并后的js文件为build.min.js,所以使用gulp-replace插进对html页面进行替换,并将html文件输出到build目录上* 8、再次在build目录上,将html进行common.css文件替换成build.min.css* 9、使用gulp-rev-collectorc插件对刚才生成带参数的js和css文件在html页面上进行替换,如build.min.js替换成build-asdf123.min.js。还是输出到build目录。* 10、(可选)使用gulp-rev-collectorc插件对刚才生成带参数的img文件在css文件上进行替换,如common.jpg替换成common-asdf12.jpg。输出到目录* */gulp.task('default',function(cb){gulpSequence('clean:Build','copy','minifyjsmd5','minifycssmd5','minifyimgmd5','html','replacejs','replacecss','rev','revimg')(cb);});//默认任务2,输出的js和css文件不带参数/*执行顺序:* 1、清除编译输出目录build的全部文件* 2、复制第三方组件依赖到build文件夹* 3、对js文件进行压缩打包一个文件,命名如build.min.js,并输出到build/js文件夹* 4、对cs文件进行压缩打包一个文件,命名如build.min.css,并输出到build/cs文件夹* 5、将build目录下的全部html页面进行压缩处理,采用gulp-minhtml插进* 6、由于项目上使用了模块开发,然后每个页面上都会引入common.js文件,而合并后的js文件为build.min.js,所以使用gulp-replace插进对html页面进行替换,并将html文件输出到build目录上* 7、再次在build目录上,将html进行common.css文件替换成build.min.css* */gulp.task('default2',function(cb){gulpSequence('clean:Build','copy','copyimg','minifyjs','minifycss','html','replacejs','replacecss')(cb);});//开发使用默认任务,js和css不带参数,且不合并/*执行顺序:* 1、清除编译输出目录build的全部文件* 2、复制第三方组件依赖到build文件夹* 3、对js文件进行压缩打包一个文件,命名如build.js,并输出到build/js文件夹* 4、对cs文件进行压缩打包一个文件,命名如build.css,并输出到build/cs文件夹* 5、将build目录下的全部html页面进行压缩处理,采用gulp-minhtml插进* 6、由于项目上使用了模块开发,然后每个页面上都会引入common.js文件,而合并后的js文件为build.js,所以使用gulp-replace插进对html页面进行替换,并将html文件输出到build目录上* 7、再次在build目录上,将html进行common.css文件替换成build.css* */gulp.task('defaultdev',function(cb){gulpSequence('clean:Build','copy','copyimg','minifyjs','minifycss','html','replacejsdev','replacecssdev')(cb);});

最后附上package.json文件:

{"name": "test","version": "1.0.0","description": "test","main": "index.js","scripts": {"test": "echo \"Error: no test specified\" && exit 1"},"author": "jim","license": "MIT","devDependencies": {"del": "^2.2.2","gulp": "^3.9.1","gulp-awaitable-tasks": "^1.0.0","gulp-clean": "^0.3.2","gulp-concat": "^2.6.1","gulp-htmlmin": "^3.0.0","gulp-jshint": "^2.0.4","gulp-minify-css": "^1.2.4","gulp-order": "^1.1.1","gulp-remove-empty-lines": "0.0.8","gulp-remove-html": "^1.3.0","gulp-rename": "^1.2.2","gulp-replace": "^0.5.4","gulp-rev": "^7.1.2","gulp-rev-collector": "^1.0.5","gulp-sequence": "^0.4.6","gulp-sync": "^0.1.4","gulp-sync-task": "^1.0.3","gulp-uglify": "^2.0.0","jshint": "^2.9.4","run-sequence": "^1.2.2"}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。