gulp是基于Node.js的前端自动化构建工具,能自动化地完成 JavaScript/sass/html/image/css 等文件的的测试、检查、合并、压缩混淆、格式化、浏览器自动刷新、部署文件生成等操作,同时可以对文件进行监听,如果文件有改动,可以自动处理生成新的文件。
所以gulp解决了开发效率(修改代码后自动更新页面)、资源整合(代码的压缩合并)、代码质量(代码的检查 自动化测试)、代码转换(es6—>es5)等问题
官网中文网
1.2.1 gulp的核心方法
- gulp.task(‘任务名’,function(){}) // 创建任务。
- gulp.src(‘./*.css’) // 指定想要处理的文件
- gulp.dest() // 指定最终处理后的文件的存放路径
- gulp.watch() // 自动的监视文件的变化,然后执行相应任务。
-
1.2.2 安装gulp使用
1.通过npm安装:
npm install gulp-cli -g安装全局的命令行,可以在终端中使用gulp相关命令- 2.在当前项目中也要安装gulp:
npm install gulp --save - 3.还需要在当前项目中新建一个文件: gulpfile.js
var gulp = require(‘gulp’);
// 创建任务
// 第一个参数: 任务名
// 第二个参数: 回调函数,当我们执行任务时就会执行这个函数gulp``.``task``(``'test'``, ``function``(){console.log(123)return gulp.src('src/js2/*.js');})
//执行任务: gulp 任务名
gulp test
1.2.3 对js进行压缩混淆和合并
npm install gulp-uglify --save压缩混淆npm install gulp-concat --save合并
var gulp = require(‘gulp’);
var uglify = require(‘gulp-uglify’);
var concat = require(‘gulp-concat’);
gulp.task(‘script’, function(){
// 1.要匹配到要处理的文件
// 指定指定的文件:参数是匹配的规则
// 参数也可以是数组,数组中的元素就是匹配的规则
return gulp.src(‘src/js2/*.js’)
// concat 的参数是合并之后的文件名字
.pipe(concat(‘index.js’))
// 压缩混淆
.pipe(uglify())
// dest方法参数,指定输出文件的路径
.pipe(gulp.dest(‘dist/js2’))
})
gulp.run(‘script’)
1.2.4 对css进行压缩操作
npm install gulp-cssnano --save
var concat = require(‘gulp-concat’);
var cssnano = require(‘gulp-cssnano’);
// 新建一个任务,对css进行处理
gulp.task(‘style’, function(){
// 对项目中的2个css文件进行合并,压缩操作
// 1.匹配到要处理的文件
return gulp.src(‘src/css/*.css’)
// 2.合并文件
.pipe(concat(‘index.css’))
// 3.压缩操作
.pipe(cssnano())
// 4.输出到指定目录
.pipe(gulp.dest(‘dist/css’))
})
gulp.run(‘style’)
1.2.5 对html进行压缩
npm install gulp-htmlmin --save
var htmlmin = require(‘gulp-htmlmin’);
// 新建一个任务,对html进行压缩
gulp.task(‘html’, function(){
// 1.匹配到要处理的文件
return gulp.src(‘src/index.html’)
// 2.压缩操作
.pipe(htmlmin({collapseWhitespace:true}))
// 3.指定输出目录
.pipe(gulp.dest(‘dist’))
})
gulp.run(‘html’)
1.2.6 gulp对图片压缩
npm install gulp-imagemin@3.0.0
gulp.task(‘image’,function(){
return gulp.src(‘./images/.‘)
.pipe(imageMin({progressive: true}))
.pipe(gulp.dest(‘./dist/images’))
})
1.2.7 gulp.watch
- 监视文件的变化,然后执行相应的任务
// gulp.watch 监视文件变化,执行相应任务
gulp.task(‘mywatch’, function(){
// 1.监视js文件的变化,然后执行script任务
// 第一个参数:要监视的文件的规则
// 第二个参数:是要执行的任务
gulp.watch(“src/js2/*.js”,gulp.series(“script”))
})
//然后使用gulp mywatch启动监听,然后一旦源文件修改了,会立刻同步编译新的目标文件
1.2.8 gulp解决浏览器缓存问题
npm install gulp-rev gulp-rev-rewrite
var rev = require(‘gulp-rev’);
var revRewrite = require(‘gulp-rev-rewrite’);
//给js文件重命名 并且输出到dist目录下
gulp.task(‘js’, () =>
return gulp.src([‘./js/c.js’])
.pipe(gulp.dest(‘dist’)) // 将源文件拷贝到打包目录
.pipe(rev())
.pipe(gulp.dest(‘dist’)) // 将生成的hash文件添加到打包目录
.pipe(rev.manifest(‘js-rev.json’))
.pipe(gulp.dest(‘dist’)) // 将map映射文件添加到打包目录
);
//将html中的js文件用重名后的名字替换
gulp.task(‘html2’, () => {
const jsManifest = gulp.src(‘dist/js-rev.json’); //获取js映射文件
return gulp.src(‘./html/a.html’)
.pipe(revRewrite({manifest: jsManifest})) // 把引用的js替换成有版本号的名字
.pipe(gulp.dest(‘dist’))
});
//当c.js文件发生变化之后,会重新执行js和html2的任务
gulp.task(‘mywatch’, function(){
// 1.监视js文件的变化,然后执行script任务
// 第一个参数:要监视的文件的规则
// 第二个参数:是要执行的任务
return gulp.watch(“./js/c.js”,gulp.series([‘js’,’html2’]))
})
