前端构建工具gulp入门教程

文章目录
  1. 1. 第1步:安装Node
  2. 2. 第2步:安装gulp
  3. 3. 第3步:新建gulpfile.js文件
  4. 4. 第4步:编辑gulpfile.js文件

第1步:安装Node

首先,最基本也最重要的是,我们需要搭建node环境。访问 nodejs.org,然后点击大大的绿色的 install 按钮,下载完成后直接运行程序,就一切准备就绪。npm会随着安装包一起安装,稍后会用到它。

为了确保Node已经正确安装,我们执行几个简单的命令。

1
2
node -v
npm -v

因为国内访问外网都很慢,甚至不能访问!

淘宝针对国内下载npm库缓慢的问题,使用建立自己的cnpm库,可以很方便使用在公司内部使用,命令如下:

1
2
npm install -g cnpm --registry=https://registry.npm.taobao.org
cnpm -v

如果这命令没有得到返回,可能node就没有安装正确,进行重装。安装淘宝镜像后,以后下载npm库,都用cnpm代替,下载会快很多。

第2步:安装gulp

首先我们要全局安装一遍:

1
cnpm install -g gulp

运行时注意查看命令行有没有错误信息,安装完成后,你可以使用下面的命令查看gulp的版本号以确保gulp已经被正确安装。

1
gulp -v

接着我们要进去到项目的根目录再安装一遍

1
cnpm install gulp --save-dev

第3步:新建gulpfile.js文件

  • sass的编译(gulp-sass)
  • 自动添加css前缀(gulp-autoprefixer)
  • 压缩css(gulp-minify-css)
  • js代码校验(gulp-jshint)
  • 合并js文件(gulp-concat)
  • 压缩js代码(gulp-uglify)
  • 压缩图片(gulp-imagemin)
  • 自动刷新页面(gulp-livereload)
  • 图片缓存,只有图片替换了才压缩(gulp-cache)
  • 更改提醒(gulp-notify)

安装这些插件需要运行如下命令(也可以拆开单独安装):

1
cnpm install gulp-sass gulp-autoprefixer gulp-minify-css gulp-jshint gulp-concat gulp-uglify gulp-imagemin gulp-notify gulp-rename gulp-livereload gulp-cache --save-dev

接着我们要创建一个gulpfile.js在根目录下,gulp只有四个API:
task,watch,src,和 dest

  • task这个API用来创建任务,在命令行下可以输入 gulp test 来执行test的任务。
  • watch这个API用来监听任务。
  • src这个API设置需要处理的文件的路径,可以是多个文件以数组的形式[main.scss, vender.scss],也可以是正则表达式/*/.scss。
  • dest这个API设置生成文件的路径,一个任务可以有多个生成路径,一个可以输出未压缩的版本,另一个可以输出压缩后的版本。

第4步:编辑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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
//加载插件
var gulp = require('gulp'),
sass = require('gulp-sass'),//sass的编译
autoprefixer = require('gulp-autoprefixer'),//使用Autoprefixer来补全浏览器兼容的css
minifycss = require('gulp-minify-css'),//压缩css
jshint = require('gulp-jshint'),//js代码校验
uglify = require('gulp-uglify'),//压缩js代码
imagemin = require('gulp-imagemin'),//压缩图片
rename = require('gulp-rename'),
concat = require('gulp-concat'),//合并js文件
notify = require('gulp-notify'),
cache = require('gulp-cache'),//图片缓存,只有图片替换了才压缩
livereload = require('gulp-livereload'),//自动刷新页面
watch = require('gulp-watch');

// 编译sass、自动添加css前缀和压缩。Styles任务
gulp.task('styles', function () {
return gulp.src('stylesheets/*.scss')
.pipe(sass())
.pipe(autoprefixer('last 2 version', 'safari 5', 'ie 8', 'ie 9', 'opera 12.1', 'ios 6', 'android 4'))//添加前缀
.pipe(gulp.dest('assets/css/'))//保存未压缩文件到我们指定的目录下面
.pipe(rename({
suffix: '.min'//给文件添加.min后缀
}))
.pipe(minifycss())//压缩样式文件
.pipe(gulp.dest('assets/css/'))//输出压缩文件到指定目录
.pipe(notify({
message: 'Styles task complete'//提醒任务完成
}));
});

// js代码校验、合并和压缩 Scripts。 Scripts任务
gulp.task('scripts', function () {
return gulp.src('javescript/*.js') //js代码校验
.pipe(jshint())
.pipe(jshint.reporter('default'))
.pipe(concat('all.js'))//js代码合并
.pipe(rename({
suffix: '.min'//给文件添加.min后缀
}))
.pipe(uglify())//压缩脚本文件
.pipe(gulp.dest('assets/js/'))//输出压缩文件到指定目录
.pipe(notify({
message: 'Scripts task complete'//提醒任务完成
}));
});

// 图片压缩。Images
gulp.task('images', function () {
return gulp.src('assets/images/*')//检测图片路径
.pipe(cache(imagemin({
optimizationLevel: 3,
progressive: true,
interlaced: true
})))
.pipe(gulp.dest('assets/images'))
.pipe(notify({
message: 'Images task complete'
}));
});
// Default task
gulp.task('default', function () {
gulp.start('styles', 'scripts', 'images');
});
// 事件监听。Watch
gulp.task('watch', function () {
gulp.watch('stylesheets/*.scss', ['styles']);
gulp.watch('javascript/*.js', ['scripts']);
gulp.watch('assets/images/*', ['images']);
livereload.listen();
gulp.watch(['assets/*']).on('change', livereload.changed);
});