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 ...
随机推荐
- java 对excel操作 读取、写入、修改数据;导出数据库数据到excel
============前提加入jar包jxl.jar========================= // 从数据库导出数据到excel public List<Xskh> outPu ...
- 建表的sql
1. 创建用户表 create table user( id int unsigned not null primary key auto_increment comment '自增id', user ...
- 开发中,如何配合后端,保存你的静态html页
添加备注2015.4.8 最终决定采用相对路径方法, /img/img.jpg这种“绝对”路径写法必须在网站环境中才能识别,不利于静态页面的查看,故不予采用! 所以采用img/img.jpg或../i ...
- Android Studio @Bind的用法,自动生成findViewById无需再实例化控件
第一步:app 的build.gradle文件中添加 如下代码: compile 'com.jakewharton:butterknife:7.0.0' 点击Sync Now 同步下载第二步:安装插件 ...
- 【C#】工具类-FTP操作封装类FTPHelper
转载:http://blog.csdn.net/gdjlc/article/details/11968477 using System; using System.Collections.Generi ...
- BP神经网络算法学习
BP(Back Propagation)网络是1986年由Rumelhart和McCelland为首的科学家小组提出,是一种按误差逆传播算法训练的多层前馈网络,是眼下应用最广泛的神经网络模型之中的一个 ...
- 【转】工科男IT职场求生法则
转自:http://www.36dsj.com/archives/3459 我在IT职场打滚超过10年了,从小小的程序员做到常务副总.相对于其它行业,IT职场应该算比较光明的了,但也陷阱重重,本文说说 ...
- matlab reshape函数
语法 (1)B = reshape(A,m,n) 使用方法: B=reshape(A,m,n) 返回m*n矩阵B,它的元素是获得A的行宽度.假设A没有m*n元素,得到一个错误结果. 样例: <s ...
- C# 二进制字节流查找函数IndexOf
C# 二进制字节流查找函数IndexOf /// <summary> /// 报告指定的 System.Byte[] 在此实例中的第一个匹配项的索引. /// </summary&g ...
- iOS开发——UI篇Swift篇&UIScrollView
UIScrollView //返回按钮事件 @IBAction func backButtonClick() { self.navigationController?.popViewControlle ...