Gulp 自动化的项目构建工具
在很多场合都会听到前端工和 node 程师推荐 Grunt 来实现项目的自动化,自动化可以自动完成 javascript/coffee/sass/less 等文件的的测试、检查、合并、压缩、格式化、部署文件生成,并监听文件在改动后重复指定的这些步骤。
得益于 Grunt 基于任务的设计模式,这些步骤可以很好的归类执行,让开发效率得到了一次提升,但杀敌 1000,得自损 800 啊,学习曲线有点高,Gruntfile配置任务很难理解,经常容易忘记。
Grunt.js 太复杂了,复杂到比使用和配置 Vim 都困难,之前写过得《前端自动化如何利用grunt优化项目?》,glup比较简单,配置逻辑便于理解,效率更高、健壮性更好。
Gulp构建系统
Gulp是一个构建系统,开发者可以使用它在网站开发过程中自动执行常见任务。
比如编译预处理CSS,压缩JavaScript和刷新浏览器,来改进网站开发的过程。
官网:http://gulpjs.com/
插件:http://gulpjs.com/plugins/ 或 http://npm.taobao.org/
一、Gulp安装
1.Gulp是基于Node.js构建的,所以要先安装node.js。
2.安装Gulp的过程十分简单。首先,需要在全局安装Gulp包:
npm install -g gulp //全局安装
3.然后,在项目目录安装Gulp:
npm install --save-dev gulp
4.查看gulp是否安装成功
gulp -v
二、安装常用gulp插件
* sass的编译(gulp-ruby-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)
* 清除文件(del)
三、创建配置文件 gulpfile.js
在项目的根目录创建配置文件 gulpfile.js,Gulp 仅有 5 个方法就能组合出你需要的任务流程:task, run, watch, src, dest
// js/app.js:指定确切的文件名。
// js/*.js:某个目录所有后缀名为js的文件。
// js/**/*.js:某个目录及其所有子目录中的所有后缀名为js的文件。
// !js/app.js:除了js/app.js以外的所有文件。
// *.+(js|css):匹配项目根目录下,所有后缀名为js或css的文件。 //引入gulp插件node模块
var gulp = require('gulp'),
sass = require('gulp-ruby-sass'),
autoprefixer = require('gulp-autoprefixer'),
//gminifycss = require('gulp-minify-css'),
compass = require("gulp-compass"),
jshint = require('gulp-jshint'),
sourcemaps = require('gulp-sourcemaps'),
minicss = require('gulp-mini-css'),
connect = require('gulp-connect'),
rename = require('gulp-rename'),
uglify = require('gulp-uglify'),
imagemin = require('gulp-imagemin'),
concat = require('gulp-concat'),
livereload = require('gulp-livereload'),
notify = require('gulp-notify'); //Gulp 仅有 5 个方法就能组合出你需要的任务流程:task, run, watch, src, dest // 定义web模块,类似于全局的http-server
gulp.task('http-server', function() {
connect.server({
livereload: true
});
}); //gulp.task(name, fn)gulp模块的task方法,用于定义具体的任务。它的第一个参数是任务名,第二个参数是任务函数。
gulp.task('uglify',function(){ //gulp.src(glob)返回了一个可读的stream,如此行返回了./js/*.js下的全部
gulp.src('./js/*.js')
.pipe(uglify())
//gulp.dest(glob)返回一个可写的stream,如此行是将文件流写入到 ./dist/js 里的对应路径下
.pipe(gulp.dest('./dist/js'))
.pipe(notify({message:'可以了 ok !'}))
}) //压缩样式
gulp.task('mincss',function(){
gulp.src('./css/*.css')
.pipe(mincss())
.pipe(gulp.dest('./dist/js'))
}) // 创建Compass任务
gulp.task('compass', function() {
gulp.src('./scss/**')
.pipe(compass({
comments: false,
css: 'css',
sass: 'scss',
image: 'img'
}));
}); //编译sass
gulp.task("sass",function(){
gulp.src('./scss/.scss')
.pipe(sourcemaps.init())
.pipe(sass())
.pipe(mincss())
.pipe(sourcemaps.write('/'))
.pipe(gulp.dest('./css/*.css'))
}) //检查js
gulp.task("jshint",function(){
gulp.src("./js/.js")
.pipe(jshint())
.pipe(jshint.reporter('default')); //导入到模块任务里面
}) // 合并、压缩文件
gulp.task('scripts', function() {
gulp.src('./js/*.js')
.pipe(concat('all.js'))
.pipe(gulp.dest('./dist/js'))
.pipe(rename('all.min.js'))
.pipe(uglify())
.pipe(gulp.dest('./dist/js'))
.pipe(livereload())
}); //压缩图片
gulp.task('imagemin',function(){
gulp.src('./image/*.*')
.pipe(imagemin())
.pipe(gulp.dest('./dist/image'))
.pipe(notify({message:'compress ok !'}))
}) // 检测HTML变化并刷新
gulp.task("html",function(){
gulp.src('*.*')
.pipe(livereload());
}) //定义名为"watch"的任务
gulp.task('watch',function(){
gulp.watch('./image/*.*');
gulp.watch('./js/*.js');
gulp.watch('./css/*.css');
gulp.watch('./scss/*.scss');
})
//每个gulpfile.js里都应当有一个dafault任务,它是缺省任务入口(类似C语言的main()入口),运行gulp的时候实际只是调用该任务(从而来调用其它的任务)
gulp.task('default',function(){
//gulp.run(tasks)表示运行对应的任务,这里表示执行名
gulp.run('uglify','imagemin','compass');
//执行'watch'监听任务
gulp.run('watch');
// 监听文件变化
gulp.watch([
'*.*',
'./scss/**',
'./img/**',
'./js/*.js'], function() {
livereload.listen();
gulp.run('compass', 'lint', 'html', 'sass','imagemin','scripts');
});
})
四、运行gulp
通过gulp+任务名称,就可以运行gulp例
gulp watch
参考资料:Gulp.js 参考手册,自动化构建利器
Gulp 自动化的项目构建工具的更多相关文章
- Gulp.js - 简单、直观的自动化项目构建工具
Gulp.js 是一个简单.直观的构建系统.崇尚代码优于配置,使复杂的任务更好管理.通过结合 NodeJS 的数据流的能力,你能够快速构建.通过简单的 API 接口,只需几步就能搭建起自己的自动化项目 ...
- Gulp vs Grunt 前端构建工具对比
Gulp vs Grunt 前端工程的构建工具对比 1. Grunt -> Gulp 早些年提到构建工具,难免会让人联想到历史比较悠久的Make,Ant,以及后来为了更方便的构建结构类似的Jav ...
- 【项目构建工具】 Gradle笔记1
一.Gradle简介 Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化构建开源工具.它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,抛弃了基于XM ...
- 取代 Maven?这款项目构建工具性能提升 300%
在 GitHub 上闲逛的时候,发现了一个新的项目:maven-mvnd,持续霸占 GitHub trending 榜单好几天了. maven-mvnd,可以读作 Maven Daemon,译作 Ma ...
- 前端项目构建工具---Grunt
什么是Grunt? grunt是javascript项目构建工具,在grunt流行之前,前端项目的构建打包大多数使用ant.(ant具体使用 可以google),但ant对于前端而言,存在不友好,执行 ...
- grunt项目构建工具
JS项目构建工具Grunt实践 一:下面来介绍下如何用grunt合并,压缩js文件. 大概步骤有如下: 1. 新建文件夹相对应的项目 比如文件名叫:gruntJs 2. 新建文 ...
- Java项目工程化之项目构建工具Maven
欢迎查看Java开发之上帝之眼系列教程,如果您正在为Java后端庞大的体系所困扰,如果您正在为各种繁出不穷的技术和各种框架所迷茫,那么本系列文章将带您窥探Java庞大的体系.本系列教程希望您能站在上帝 ...
- 项目构建工具maven的使用方法
最近在开发javaweb项目中有用到maven,以前并不是很了解,于是学习了一些相关内容,记之共享. 本篇内容在Windows环境下实施,JDK版本使用的1.7.0_79. 一.maven是什么? 简 ...
- 项目构建工具ant的使用
ant是项目构建工具,以xml文件作为构建文件,在这个xml文件(默认是build.xml,当然也可以取其它名字)里我们可以定义多个目标,用我们期待的方式去构建项目,比如说编译,测试,发邮件等等. a ...
随机推荐
- 关于WebPlayer Sandbox的小节
不可以像其他build target一样读写I/O 不可以call一些private或者internal methord 只要在一个top level的domain下可以不需要xml dmain po ...
- mvc web api 保存多个实体类的方法
先说一下我的业务需求,挺简单的. 就是在设计角色和权限的页面中,需要一个角色对应多条权限记录,那么在保存的时候,我的处理方式是,先删除该角色的所有权限,然后再保存所有的权限. 这样的话问题就来了,用默 ...
- Java面试葵花宝典
面向对象的特征有哪些方面 1. 抽象:抽象就是忽略一个主题中与当前目标2. 无关的那些方面,3. 以便更充分地注意与当前目标4. 有关的方面.抽象并不5. 打算了解全部问题,而6. 只是选择其中的一 ...
- Java学习笔记之方法重载,动态方法调度和抽象类
一.方法重载 如果子类中的方法与它的超类中的方法有相同的方法名,则称子类中的方法重载超类中的方法,特别是当超类和子类中的方法名和参数类型都相同时,在子类中调用该方法时,超类中的方法会被隐藏.考虑下面程 ...
- hdu 5272 Dylans loves numbers 水题
Dylans loves numbers Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem. ...
- iOS开发——多线程OC篇&多线程中的单例
多线程中的单例 #import "DemoObj.h" @implementation DemoObj static DemoObj *instance; // 在iOS中,所有对 ...
- mysql常用知识点
--存储过程及常用流程控制语法 /*该代码是创建了一个名叫"p4"的存储过程并设置了s1,s2,s3两个int型一个varchar型参数,还可以是其他数据类型,内部创建了x1,x2 ...
- Javascript实现鼠标框选元素后拖拽被框选的元素
之前需要做一个框选元素后拖拽被框选中的元素功能,在网上找资料做了一些修改,基本达到了需要的效果,希望对也需要实现框选后拖拽元素功能的人有用. 页面加载后效果 框选后的内容可以拖拽,如下图: 代码下载
- PMP学习感想
经过一个多月的漫长等待,伴随着焦虑与激动,终于迎来了2016新年的第一个惊喜,PMP考试通过了! 三个多月的努力,利用休息时间,终于把这块硬骨头给啃了下来. 感谢慧翔天地的老师和学友们,是在你们的努力 ...
- 字典树(Trie)的java实现
一.定义 字典树又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种.典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计.它的优点是:利用 ...