gulp的使用
来源:互联网 发布:单片机的http编程 编辑:程序博客网 时间:2024/05/16 14:23
前言
对于前端自动化,大家可能开始想到的是Grunt而且最开始学的是也是它。没错,刚开始学习grunt时,发现它真的很方便,很多额外的操作都可以通过一个命令自动执行。而我使用Grunt的方式也很简单,就是为了更好的保护的F5键。
Grunt自动刷新
再使用Grunt之前,需要在项目的根目录下新建一个package.json文件,我们可以通过npm init
自动创建该文件,然后按照提示输入相关信息即可。(未知的可直接回车跳过。)
接下来需要加载所需要的三个grunt插件:grunt-contrib-connect,grunt-contrib-livereload,grunt-contrib-watch。而我们选择通过npm方式加载:npm install 插件 --save-dev
这样package.json文件中的devDependencies就会自动填写刚刚下载的插件。
接下来需要在根目录新建另一个文件Gruntfile.js文件,里面需要你使用grunt的相关配置,而我一般都会将经常使用的配置代码备份,使用时直接拷贝进去即可。
module.exports = function(grunt) { grunt.initConfig({ pkg: grunt.file.readJSON('package.json'), watch: { livereload: { options: { livereload: '<%= connect.options.livereload %>' }, files: [ 'index.html', 'static/**' ] } }, connect: { options: { port: 8000, open: true, livereload: 35729, hostname: 'localhost' }, server: { options: { port: 8001, base: './' } } } }); grunt.loadNpmTasks('grunt-contrib-watch'); grunt.loadNpmTasks('grunt-contrib-connect'); grunt.registerTask('watching',['connect','watch']); grunt.registerTask('default');};
然后我们就可以直接在命令行输入grunt watching
使用。
ps:上述把一些img、js、css文件放在static目录下。
上述我们就可以在编辑器里只负责编写相应的代码即可,保存后浏览器页面就会自动更新,而无需我们再通过刷新。这确实很方便。但是:
当我想使用别的插件,例如grunt-contrib-less、grunt-autoprefix等其它插件时,必须再次编写这些新增插件的配置。这时,你必须查阅相关文档学习其它插件的配置编写方式。此时就会感觉很麻烦,特别是时间长时,你会忘记这些插件的编写格式。这就强迫你使用另外一种更简单的自动化方式,例如gulp
gulp
至于gulp的学习大家可以参考gulp中文官网gulp中文官网,API非常少,只有4个:
gulp.src() 读取一个文件,返回一个文件流。接下来可多次调用用pipe()进行链式操作
读取的文件名匹配格式如下:- ”*”匹配任意文件名,不包含目录
- “**” 匹配任意目录及相应目录下的文件
- gulp.dest() 将管道中的文件流生成文件
- gulp.task() 定义任务
- gulp.watch() 监控文件变换,执行任务
接下来主要说明鄙人实际项目中的一些gulp插件的使用。
首先,需要在根目录中新建package.json文件,然后下载gulp及需要用到的gulp插件,这个grunt中的步骤一样。用到的插件有:
- gulp-less less的编译
- gulp-autoprefixer 加载css前缀
- gulp-concat 文件合并
- gulp-minify-css css文件压缩
- gulp-jshint js代码检查
- gulp-uglify js文件压缩
- gulp-minify-html html文件压缩
- gulp-imagemin 图片压缩
- gulp-rename 文件重命名
- gulp-load-plugins 一次性加载插件
- gulp-livereload 自动刷新插件
- gulp-connect 和livereload合作,构造一个虚拟服务器
接下来,我们需要在根目录下创建gulpfile.js文件,然后在里面写一些插件的处理。
gulp-less 与gulp-autoprefixer
var gulp = require('gulp'), less = require('gulp-less'), autoprefixer = require('gulp-autoprefixer');gulp.task('compile', function() { gulp.src('static/less/*.less') .pipe(less()) .pipe(autoprefixer()) .pipe(gulp.dest('static/style'));});
gulp-concat
var gulp = require('gulp'), concat = require('gulp-concat');gulp.task('concat', function() { gulp.src('static/style/*') // 合并匹配的css文件并命名 .pipe(concat('all.css')) .pipe(gulp.dest('static/css'));});
文件压缩
var gulp = require('gulp'), minifyCss = require('gulp-minify-css');gulp.task('miniCss', function() { gulp.src('static/css/*') .pipe(minifyCss()) .pipe(gulp.dest('static/css'));});
html,js文件压缩与此相同。
另外,由于gulp是依靠文件流的方式进行操作,压缩过程中的文件名无法更改。文件名的更改则需要用到rename插件。
gulp-rename
var gulp = require('gulp'), minifyCss = require('gulp-minify-css'), rename = require('gulp-rename');gulp.task('miniCss', function() { gulp.src('static/css/*') .pipe(minifyCss()) .pipe(rename('all.min.css')) .pipe(gulp.dest('static/css'));});
gulp-imagemin
gif、jpeg、png、svg的图片压缩,其它文件直接忽略。
ps:png图片的压缩用到imagemin-pngquant插件。
var gulp = require('gulp');var imagemin = require('gulp-imagemin');var pngquant = require('imagemin-pngquant');gulp.task('imgMin', function () { return gulp.src('static/images/*') .pipe(imagemin({ use: [pngquant()] })) .pipe(gulp.dest('static/img'));});
gulp-load-plugins
该插件是根据package.json文件中的devDependencies中的配置一次性加载所有的gulp插件。试想一下,当我们同时需要加载上述所有插件时,需要一次次重复使用require()
来加载。为了避免繁琐,我们可以使用该插件。package.json中的devDependencies:
"devDependencies": { "gulp": "^3.9.0", "gulp-rename": "^1.2.2", "gulp-load-plugins": "^1.0.0-rc.1", "gulp-concat": "^2.6.0", "gulp-minify-css": "^1.2.0", "gulp-uglify": "^1.2.0", "gulp-livereload": "^3.8.0", "gulp-connect": "^2.2.0", "gulp-autoprefixer": "^2.3.1", "gulp-less": "^3.0.3", "gulp-jshint": "^1.11.2", "gulp-minify-html": "^1.0.4", "gulp-imagemin": "^2.3.0", "imagemin-pngquant": "^4.1.2" }
ps:imagemin-pngquant插件需要手动加载。
var gulp = require('gulp');var plugins = require('gulp-load-plugins')();var pngquant = require('imagemin-pngquant');gulp.task('imgMin', function () { return gulp.src('static/images/*') .pipe(plugins.imagemin({ use: [pngquant()] })) .pipe(gulp.dest('static/img'));});
加载完成之后我们可以通过plugins.name
的方式使用相应插件,即name的格式为对应插件名去掉gulp前缀的名字,如果中间有“—”,则使用驼峰格式。如:
plugins.minifyHtml = require('gulp-minify-html');
gulp-livereload与gulp-connect
var gulp = require('gulp'),var livereload = require('gulp-livereload'),var connect = require('gulp-connect');// 构建服务器gulp.task('connect', function() { connect.server({ root: './', //服务器根目录 port: 8000, //端口号 livereload: true });});gulp.task('html', function() { gulp.src('index.html') // 获取自动刷新页面 .pipe(livereload());});gulp.task('watching', ['connect'], function () { livereload.listen(); gulp.watch(['index.html','static/style/*','static/img/*'],['html']); // 监控相关文件,绑定刷新页面});
经过上面介绍,你会发现gulp的确比grunt优秀了那么一点点。。。
- hello gulp,使用gulp的第一天。
- gulp的使用
- gulp的学习使用
- gulp的使用
- gulp的使用2
- gulp的使用
- gulp的使用
- Gulp的使用
- gulp的使用
- gulp的简单使用
- gulp的使用教程
- gulp的使用
- gulp工具的使用
- gulp 的 安装使用
- gulp工具的使用
- gulp的使用
- gulp的使用
- gulp的使用
- JAVA学习的第二天感想
- What does __init__ == __main__ mean?
- 字符设备驱动
- DIY 一个 JSON解析器。
- pagerAdapter的不同使用方法
- gulp的使用
- 【ZOJ 3874】Permutation Graph
- Leetcode: Isomorphic Strings
- Linux环境编程资源总结
- Python下配置LibSVM
- python 项目 Memory game
- 整数转化为整数字符串
- java中switch的变量类型
- OC学习 ----- 字典转模型