写在前面的话:css
常见的自动构建工具备 grunt、gulp、webpack,把源码进行合并压缩,节省带宽等~html
一块儿来学习 gulp 的使用吧~node
3、gulp的使用( gulp 中文网):webpack
gulp 的优势:基于流、任务化web
经常使用API: src 、dest 、watch 、task 、pipenpm
(1)安装 gulp:json
npm install -g gulpgulp
(2)再在 webapp文件夹下安装一些 nodejs 模块:浏览器
npm initapp
以后webapp中就会出现一个package.json文件,以及一个 node_modules 文件夹
(3)继续安装一些依赖插件:
npm install --save-dev gulp
一个一个装太麻烦了,可用批量安装的方式(之间用空格分开):
npm install --save-dev gulp-clean gulp-concat gulp-connect gulp-cssmin gulp-imagemin gulp-less gulp-load-plugins gulp-uglify open
安装完了以后 package.json文件的内容以下图,能够看到已安装的依赖(10个)的版本信息:
(4)配置文件夹,首先要对须要的文件目录预先作一下设计,参考以下:
目录结构设计:
build 用于调试
dist 用于发布使用
src:
data (用于mock数据)
image
script:config,controller,directive,filter,service
app.js
style:
view: 各类html文件
index.html
404.html
编写任务
lib
html
json
css
js
image
clean
reload
watch
开始编写任务吧,因此按照任务名称,下面有九步~
作法:
1)在webapp文件下新建一个文件gulpfile.js,内容以下:
1 var gulp = require('gulp'); 2 var $ = require('gulp-load-plugins')(); 3 var open = require('open'); 4 5 var app = { 6 srcPath: 'src/', 7 devPath: 'build/', 8 prdPath: 'dist/' 9 }; 10 11 gulp.task('lib', function(){ 12 gulp.src('bower_components/**/*') 13 .pipe(gulp.dest(app.devPath + 'vendor')) 14 .pipe(gulp.dest(app.prdPath + 'vendor')) 15 });
保存后,运行以下命令:
gulp lib
执行成功后,webapp 文件夹下出现了 build 、dist 两个文件夹,且都包含了 vendor 文件夹。
2)在webapp文件下新建一个文件夹 src, 并在gulpfile.js文件新增以下代码:
gulp.task('html', function(){
gulp.src(app.srcPath + '**/*.html')
.pipe(gulp.dest(app.devPath))
.pipe(gulp.dest(app.prdPath))
});
写完了以后能够测试一下:在src中新建一个名为view的文件夹,在view中新建一个1.html文档(内容为空都没有关系),而后运行
gulp html
执行成功后,webapp 文件夹下的 build 、dist 两个文件夹中,且都包含了 view 文件夹,证实配置成功啦~
3)在gulpfile.js文件新增以下代码:
gulp.task('json', function(){
gulp.src(app.srcPath + 'data/**/*.json')
.pipe(gulp.dest(app.devPath + 'data'))
.pipe(gulp.dest(app.prdPath + 'data'))
});
写完了以后能够测试一下:在src中新建一个名为data的文件夹,在data中新建一个1.json文档(内容为空都没有关系),而后运行
gulp json
执行成功后,webapp 文件夹下的 build 、dist 两个文件夹中,且都包含了 data 文件夹,证实配置成功啦~
4)在gulpfile.js文件新增以下代码:
gulp.task('less', function(){
gulp.src(app.srcPath + 'style/index.less')
.pipe($.less())
.pipe(gulp.dest(app.devPath + 'css'))
.pipe($.cssmin())
.pipe(gulp.dest(app.prdPath + 'css'))
});
写完了以后能够测试一下:在src中新建一个名为 style 的文件夹,在 style 中新建一个1.less文档 以及一个 index.less文档 (内容为空都没有关系),而后运行
gulp less
执行成功后,webapp 文件夹下的 build 、dist 两个文件夹中,且都包含了 css 文件夹及index.css,证实配置成功啦~
注:此处使用index.less做为一个总的引用,在其中使用@import将其余全部的.less文件都引入过来。
5)在gulpfile.js文件新增以下代码:
gulp.task('js', function(){
gulp.src(app.srcPath + 'script/**/*.js')
.pipe($.concat('index.js'))
.pipe(gulp.dest(app.devPath + 'js'))
.pipe($.uglify())
.pipe(gulp.dest(app.prdPath + 'js'))
});
写完了以后能够测试一下:在src中新建一个名为 script 的文件夹,在 script 中新建一个1.js文档 以及一个 2.js文档 (内容为空都没有关系),而后运行
gulp js
执行成功后,webapp 文件夹下的 build 、dist 两个文件夹中,且都包含了 js 文件夹及index.js,证实配置成功啦~
注:此处使用index.js做为一个总的引用。
6)在gulpfile.js文件新增以下代码:
gulp.task('image', function(){
gulp.src(app.srcPath + 'image/**/*')
.pipe(gulp.dest(app.devPath + 'image'))
.pipe($.imagemin())
.pipe(gulp.dest(app.prdPath + 'image'))
});
写完了以后能够测试一下:在src中新建一个名为 image 的文件夹,在 image 中加入一个1.png,而后运行
gulp image
执行成功后,webapp 文件夹下的 build 、dist 两个文件夹中,且都包含了 image 文件夹及1.png,且图片被压缩得更小了,原来是72.6k, build中是72.6k, dist中是63.4k。 证实配置成功啦~
7)在gulpfile.js文件新增以下代码:
gulp.task('clean', function(){
gulp.src([app.devPath, app.prdPath])
.pipe($.clean())
});
写完了以后运行
gulp clean
执行成功后,webapp 文件夹下的 build 、dist 两个文件夹都消失了。 证实配置成功啦~
至此,9个里面已经有7个配置完啦!能够透露一下小技巧了,执行一个命令,将全部须要编译拷贝的文件一下全搞定~只要在gulpfile.js文件新增以下代码:
gulp.task('build',['image', 'js', 'less', 'lib', 'html', 'json']);
运行:
gulp build
而后以前被删掉的都回来啦~开发时这样用就比较方便啦,不用运行那么屡次了。同时,还可设置构建时自动打开浏览器,并指定监控端口为1234,只要在gulpfile.js文件新增以下代码:
gulp.task('serve',['build'], function(){
$.connect.server({
root: [app.devPath],
livereload: true,
port: 1234
});
open('http://localhost:1234');
gulp.watch('bower_components/**/*',['lib']);
gulp.watch(app.srcPath + '**/*.html', ['html']);
gulp.watch(app.srcPath + 'data/**/*.json', ['json']);
gulp.watch(app.srcPath + 'style/**/*.less', ['less']);
gulp.watch(app.srcPath + 'image/**/*', ['image']);
gulp.watch(app.srcPath + 'script/**/*.js', ['js']);
});
运行:gulp serve
固然这样是不可以实现刷新的,还须要进行下一步reload才可。
8)在gulpfile.js文件新增以下代码:
在1~6步 的后面都要加上 reload(),也就是下面的一句话:
.pipe($.connect.reload());
实例:只列举一个~
这样的话,每次运行 gulp serve时都能自动更新了,
还有一个方法,能够实现 只输入 gulp 便可运行,方法以下,在gulpfile.js文件新增以下代码:
gulp.task('default', ['serve']); //加了这一句以后,直接运行gulp后面不加什么,就能够直接serve
来试一下:
gulp
额,浏览器自动打开! 并呈现出 index.html中的内容。
注意:index.html是写在src路径下的。
ok 啦~
至此,本文结束~