gulp是基于nodejs的项目自动化构建工具,开发者可以使用它在项目开发过程中自动执行常见任务。
- 文件配置化的项目管理
- 丰富的功能插件
- API简单易于学习,快速构建
安装地址: https://nodejs.org/en/
检测是否安装成功,打开cmd命令提示符窗口
$node -v
能够正常返回版本号则安装成功
npm的包安装分为本地安装(local)、全局安装(global)两种,从敲的命令行来看,差别只是有没有-g而已
$ npm install gulp -g
该模块包将默认被安装在%userprofile%\AppData\Roaming\npm 下,并且自动加到系统PATH下,这样cmd命令将能直接调用到gulp命令。
全局安装成功之后,我们还需要本地安装gulp作为项目依赖模块使用。这里首先创建一个简单的测试项目gulpStydy。
$npm init
$ npm install gulp --save-dev成功之后该模块包将在当前目录下被安装,并且作为项目的依赖模块使用。同时,项目更目录中将自动生成一个package.json文件,这个文件将记录该项目的重要信息,尤其是项目的依赖模块
在项目根目录下创建一个名为 gulpfile.js 的文件:
var gulp = require('gulp');
gulp.task('default', function() {
// 将你的默认的任务代码放在这
});
$ gulp
默认的名为 default 的任务(task)将会被运行,在这里,这个任务并未做任何事情。 想要单独执行特定的任务(task),请输入 gulp 。
gulp的API非常简单:http://www.gulpjs.com.cn/docs/api/
实际上,完整的构建一个项目依靠的往往不是gulp本身,而是依靠全球范围内的gulp插件开发者上传的众多优秀模块,而gulp更像一个平台。想了解最新的gulp可以参照:http://gulpjs.com/plugins/
这里,将为大家介绍一些常见的插件极其使用方法:
简单安装一个插件,比如:
$ npm install gulp-uglify --save-dev
这里推荐将--save-dev加上,它将自动将依赖添加到项目的package.json文件中。
你也可以一次性安装多个插件,比如
$ npm install gulp-uglify gulp-minify-css gulp-imagemin --save-dev
安装完插件之后,就可以在配置文件中使用插件,比如使用js压缩插件:
//js压缩
gulp.task('jsmin', function() {
return gulp.src('js/*.js')
.pipe(rename({suffix: '.min'}))
.pipe(uglify())
.pipe(gulp.dest('assets/js/'))
});
一个压缩任务就已经写完了,这样,所有js目录下的js文件都将被压缩,最后我们可以直接通过命令去执行它
$gulp jsmin
var gulp = require('gulp');
var htmlmin = require('gulp-htmlmin');//html压缩
var autoprefixer = require('gulp-autoprefixer');//css后缀
var minifycss = require('gulp-minify-css');//css压缩
var uglify = require('gulp-uglify');//js压缩
var concat = require('gulp-concat');//文件合并
var watch = require('gulp-watch');//文件修改监听
var swig = require('gulp-swig');//模板引擎
gulp.task('default', function() {
gulp.run('watch','swig','concat');
});
gulp.task('build', function() {
gulp.run('htmlmin','cssmin','jsmin');
});
//html压缩
gulp.task('htmlmin', function() {
gulp.src('app/index.html')
.pipe(htmlmin({collapseWhitespace: true}))
.pipe(gulp.dest('output/'));
gulp.src('app/views/*.html')
.pipe(htmlmin({collapseWhitespace: true}))
.pipe(gulp.dest('output/views/'))
});
//swig
gulp.task('swig', function() {
gulp.src('app/page/*.html')
.pipe(swig({defaults: { cache: false }})) //注意这里如果不加cache false,watch将失效
.pipe(gulp.dest('app/views'));
});
//css压缩
gulp.task('cssmin', function() {
gulp.src('app/css/*.css')
.pipe(autoprefixer({
browsers: ['last 2 versions', 'Android >= 4.0'],//主流浏览器的最新两个版本
cascade: false, //是否美化属性值 默认:true
remove:true //是否去掉不必要的前缀 默认:true
}))
.pipe(minifycss())
.pipe(gulp.dest('output/css/'))
});
//js压缩
gulp.task('jsmin', function() {
gulp.src('app/js/*.js')
.pipe(uglify())
.pipe(gulp.dest('output/js/'))
});
//文件合并
gulp.task('concat', function() {
gulp.src(['app/js/a.js','app/js/b.js'])
.pipe(concat({ path: 'all.js', stat: { mode: 0666 }}))
.pipe(gulp.dest('app/js/'));
});
//watch
gulp.task('watch',function(){
gulp.watch('app/page/*.html',['swig']);
gulp.watch('app/js/*.js',['concat']);
});