@FarmerZ
2016-08-15T00:33:59.000000Z
字数 4680
阅读 1784
gulp 前端自动化开发
1.package.json 提取码:9687
"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"}
本人没有在gulpfile.js文件使用实时预览的插件,因为这些任务已经很多了,gulp虽然速度很快,但是执行时也会有些迟缓,所以只是外部使用了browser-sync实时预览。
此外css预编译我使用的是sass,在集成到gulp预编译时如果出现了错误的语法,整个gulp监视任务就会完全停止,所以我是用的是外部sass监视。这个可以跟gulp一块使用,gulp只是监视css文件,然后进行自己的操作即可,二者各自做各自的事,出错了也不会有中断这样的影响。
我的开发目录

源文件gulpfile.js 提取码:aea6
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');
代码如下
//对常用的东西进行变量化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)); //复制到目标文件});
代码如下
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'));});
代码如下
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'));});
代码如下
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'));});
代码如下
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));});
代码如下
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命名,和引用更改});
代码如下
gulp.task('default',['copyHtml','copyCss','copyImg','copyJs','watch']);
代码如下
gulp.task('cleanCache', function(){delete cache.caches['copyHtml','copyImg','copyJs'];}) //由于cache不会自动清除缓存的东西,所以需要手动消除gulp.task('lastWorks',['cleanCache'] );
代码如下慎用
gulp.task('clean', function(){del(['../dist/**/*'],{force: true});}); //清除dist中所有的文件和文件夹,适合新的项目开始时使用
代码如下
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')); //压缩到指定文件夹});
现在流行的webpack包管理软件又要读前端进行革命了。但是gulp作为个入门短时间内还是不能够被取代得了的。
如果需要能够实时预览的gulp.file,请点击这里 提取码:aea6