关于Gulp
gulp是什么? gulp是一个基于流的构建工具,可以自动执行指定的任务,简洁且高效。
gulp能做什么 1.开发环境下,想要能够按模块组织代码,监听实时变化 2.css/js预编译,postcss等方案,浏览器前缀自动补全等 3.条件输出不同的网页,比如app页面和mobile页面 4.线上环境下,我想要合并、压缩 html/css/javascritp/图片,减少网络请求,同时降低网络负担
安装gulp 1 2 npm install -g gulp //全局安装 npm install --save-dev gulp //安装到当前项目并在package.json中添加依赖
核心API ・gulp.task task(name[, deps], fn) task()方法用于定义任务,传入名字、依赖任务数组、函数即可,gulp会先执行任务数组,结束后调用定义的函数,可以通过此手段控制任务的执行顺利。
例子:要定义一个任务build来执行css、js、imgs这三个任务,我们可以通过指定一个任务数组而不是函数来完成。
1 gulp.task('build', ['css', 'js', 'imgs']);
・gulp.src src(globs[, options]) src()方法输入一个glob或者glob数组,然后返回一个可以传递给插件的数据流
Gulp使用node-glob来从你指定的glob里面获取文件:
app.js 精确匹配
*.js 能匹配js后缀的文件
*/ .js 能匹配多级目录下的js文件(也包含当前目录下)
!js/app.js 精确排除
例子:js目录下包含了压缩和未压缩的js文件,我们想要压缩还没有被压缩的文件
1 gulp.src(['js/**/*.js', '!js/**/*.min.js'])
・gulp.watch watch(globs[, opts], cb) or watch(globs[, opts], tasks) watch()方法可以监听文件,它接受一个glob或者glob数组以及一个任务数组来执行回调 // 当templates目录下的模板文件发生变化,自动执行编译任务
1 2 3 4 5 gulp.task('watch', function (event) { gulp.watch('templates/*.tmpl.html', ['artTemplate']); console.log('Event type: ' + event.type); // added, changed, or deleted console.log('Event path: ' + event.path); // The path of the modified file });
配置文件 1.package.json文件。它就是记录了我们使用了什么插件,以及版本号的记录的一个json文件而已。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 "author" : "" , "license" : "ISC" , "devDependencies" : { "gulp" : "^3.9.1" , "gulp-autoprefixer" : "^3.1.0" , "gulp-concat" : "^2.6.0" , "gulp-imagemin" : "^3.0.1" , "gulp-jshint" : "^2.0.1" , "gulp-less" : "^3.1.0" , "gulp-minify-css" : "^1.2.4" , "gulp-notify" : "^2.2.0" , "gulp-rename" : "^1.2.2" , "gulp-uglify" : "^1.5.4" , "gulp-watch" : "^4.3.8" ...
2.gulpfile.js文件 它就是告诉了gulp我们要将什么文件编译到什么文件下的XXX目录里面。例如在我的src目录里面存在一个css文件夹,里面装了很多css或者LESS等样式文件,我现在想通过gulp将它编译到dist目录下面的css文件夹里面并且这个css文件夹里的样式文件还是压缩过了。那么gulpfile.js就是起到了这样的一个作用。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 var gulp=require ('gulp' ); var less=require ('gulp-less' ); var concat=require ('gulp-concat' ); var uglify=require ('gulp-uglify' );var paths={ src_html:"./src/**/*.html" , src_less:"./src/css/**/*.less" , src_css:"./src/css/**/*.css" , src_json:"./src/**/*.json" , src_images:"src/images/**/*" , src_pic:"src/pic/**/*" , src_js:"./src/js/**/*.js" , src_text:"./src/**/*.text" , dist:"./dist" , dist_css:"./dist/css" , dist_mincss:"./dist/mincss" , dist_images:"dist/images" , dist_html:"./dist/**/*.html" , dist_pic:"dist/pic" , dist_js:"./dist/js" , dist_minjs:"./dist/minjs" } gulp.task('styles' ,function ( ) { gulp.src([paths.src_less]) .pipe(less()) .pipe(gulp.dest(paths.dist_css)) }); gulp.task('html' , function ( ) { return gulp.src([paths.src_html,paths.src_json,paths.src_text]) .pipe(gulp.dest(paths.dist)) .pipe(notify({ message : 'html,json,text is OK' })) }); gulp.task('scripts' ,function ( ) { return gulp.src([paths.src_js]) .pipe(gulp.dest(paths.dist_js)) .pipe(notify({ message : 'Scripts is OK' })) });
监听文件变化
1 2 3 4 5 6 7 8 9 10 11 12 13 14 gulp.task('watch' ,function ( ) { gulp.watch([paths.src_less,paths.src_css],['styles' , 'html' ]) gulp.watch([paths.src_js],['scripts' ]) gulp.watch([paths.src_images],['images' ]) gulp.watch([paths.src_html,paths.src_json,paths.src_text], function (event ) { gulp.run('html' ) }); })
然后cmd中输入gulp watch就是监听的意思,然后就OK了。 现在你在src文件目录中修改了什么文件,就会编译到dist文件中,gulp有很多的好处,比如处理CSS预编译语言,压缩,或者将EC6编译成EC5都是很好的!
参考 絶対つまずかないGulp 4入門(2019年版) インストールとSassを使うまでの手順