推荐文章:

gulp.js中文网   :     http://www.gulpjs.com.cn/

DBPOO           :   http://www.dbpoo.com/getting-started-with-gulp/

Ooo_My_God  :   http://www.ydcss.com/archives/424

w3cplus          :    http://www.w3cplus.com/blog/tags/511.html

demo截图:

讲一下目录结构:

c\ 文件夹为发布css文件夹(css简写);

i\ 文件夹为发布img文件夹(img简写);

j\ 文件夹为发布js文件夹(js简写);

src\ 生产环境下的文件

config.js 为gulp里路径配置的文件(可不写)

gulpfile.js 为gulp配置文件

package.json node安装配置文件

总文件夹:

生产文件夹:

package.json:

 {
"name": "test-gulp2",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "uuu",
"license": "ISC",
"devDependencies": {
"gulp": "^3.9.1",
"gulp-autoprefixer": "^3.1.0",
"gulp-concat": "^2.6.0",
"gulp-connect": "^3.2.1",
"gulp-htmlmin": "^1.3.0",
"gulp-imagemin": "^2.4.0",
"gulp-jshint": "^2.0.0",
"gulp-livereload": "^3.8.1",
"gulp-minify-css": "^1.2.4",
"gulp-notify": "^2.2.0",
"gulp-rename": "^1.2.2",
"gulp-rev-append": "^0.1.6",
"gulp-sass": "^2.2.0",
"gulp-uglify": "^1.5.3",
"imagemin-pngquant": "^4.2.2"
}
}

gulpfile.js:

 'use strict';
var gulp = require('gulp');
var connect = require('gulp-connect'); //启动服务器:http://localhost:8000/;
var rename = require('gulp-rename'); //改名;
var concat = require('gulp-concat'); //文件合并;
var notify = require('gulp-notify'); //提示;
var config = require('./config.js'); //引入配置文件; var port = config.port;//端口号;
var livereload = require('gulp-livereload'); //刷新浏览器; /* 启动服务器 */
gulp.task('webserver',function(){
connect.server({
port : port,
livereload:true
});
}); //编译Sass compact(编译一行)/compressed(压缩一行);
var sass = require('gulp-sass'); //编译sass;
var minifycss = require('gulp-minify-css');
var autoprefixer = require('gulp-autoprefixer'); //自动补全css3前缀;
gulp.task('sass', function() { var cssSrc = config.css.src,
cssDst = config.css.dist; gulp.src( cssSrc )
.pipe( sass({outputStyle: 'compact'}).on('error', sass.logError) ) //sass输出格式;
.pipe( autoprefixer({browsers: ['last 2 versions', 'Android >= 4.0'],remove:false}) ) //自动添加css3前缀;
.pipe( gulp.dest( cssDst ) )
.pipe(rename({suffix: '.min'})) //改名;
.pipe(minifycss({"compatibility": "ie7"})) // compatibility 保留iehack 如:'*,_';
.pipe( gulp.dest( cssDst ) )
.pipe(notify({ message: 'css task ok' }))
.pipe( livereload({start:true}) );
}); //合并css;
gulp.task('cssmin', function() {
var cssSrc = config.css.src,
cssDst = config.css.dist,
allCss = config.css.dist; /**
* 合并还是自己写这个数组,因为合并有时要有顺序;
*/
gulp.src([cssDst+'index.css',cssDst+'a.css',cssDst+'b.css'])
.pipe(concat('main.all.css'))
.pipe(gulp.dest(cssDst))
.pipe(concat('main.all.min.css'))
.pipe(minifycss({"compatibility": "ie7"}))
.pipe(gulp.dest(cssDst))
}); //合并压缩JS;
var uglify = require('gulp-uglify');
var jshint = require('gulp-jshint'); //提示;
gulp.task('jsmin', function () {
var jsSrc = config.js.src,
jsDst = config.js.dist; gulp.src(jsSrc+'*.js')
.pipe(jshint())
.pipe(jshint.reporter('default')) // 对代码进行报错提示
.pipe(uglify())
.pipe(rename({suffix: '.min'})) //改名;
.pipe(gulp.dest(jsDst));
}); //合并压缩JS;
gulp.task('alljsmin', function () {
var jsSrc = config.js.src,
jsDst = config.js.dist; gulp.src([jsSrc+'index.js',jsSrc+'index2.js'])
.pipe(jshint()) // 进行检查
.pipe(jshint.reporter('default')) // 对代码进行报错提示
.pipe(concat('main.all.js'))
.pipe(gulp.dest(jsDst))
.pipe(uglify())
.pipe(rename({suffix: '.min'})) //改名;
.pipe(gulp.dest(jsDst));
}); //实时监听;
gulp.task('watch',function(){ var cssSrc = config.css.src;
gulp.watch(cssSrc,['sass']);
livereload.listen({start:true}); }); //压缩图片
var imagemin = require('gulp-imagemin'); // 压缩图片 $ npm i -D gulp-imagemin;
var pngquant = require('imagemin-pngquant'); // 压缩图片 $ npm i -D imagemin-pngquant;
gulp.task('img', function(){ var imgSrc = config.img.src,
imgDst = config.img.dist; return gulp.src( imgSrc + '*' )
.pipe(imagemin({
optimizationLevel: 5, //类型:Number 默认:3 取值范围:0-7(优化等级)
progressive: true, //类型:Boolean 默认:false 无损压缩jpg图片
interlaced: true, //类型:Boolean 默认:false 隔行扫描gif进行渲染
multipass: true, //类型:Boolean 默认:false 多次优化svg直到完全优化
svgoPlugins: [
{removeViewBox: false} //不要移除svg的viewbox属性
],
use: [pngquant({quality: '65-80'})] //使用pngquant深度压缩png图片的imagemin插件/quality 压缩的比例最好60-80之间;
}))
.pipe(gulp.dest(imgDst));
}); //添加引入文件版本号,引入文件后边补?rev=@@hash;
//例子:<link rel="stylesheet" href="c/index.css?rev=@@hash">;
var rev = require('gulp-rev-append');
gulp.task('rev', function () {
gulp.src('*.html')
.pipe(rev())
.pipe(gulp.dest(''));
}); //执行的默认事件;
gulp.task('default',function(){
gulp.run('webserver', 'watch', 'sass');
});

config.js(其实这个文件是可以没有的只不过是为了输入输入的路径)

 module.exports = {
port : 8000,
css : {
all : '',
src : './src/scss/*.scss', //需要编译的scss;
dist : './c/', //输出的scss;
},
img : {
src : './src/img/',
dist : './i/'
},
js : {
src : './src/js/',
dist : './j/'
},
html : {
src : '',
dist : ''
} }

启动服务:

CMD输入:gulp(默认启动服务器,监听watch)同时编译一遍sass文件

启动服务:

同步刷新需要chrome上的LiveReload插件在配置gulp-connect;

同时c文件夹下的css生成了:

这是开发完成在做合并文件工作:

CMD输入:gulp cssmin

压缩合并js

CMD输入:gulp jsmin gulp alljsmin

生产环境:src\js:

发布环境:j:

图片压缩:

CMD输入:gulp img

生产环境:src\img:

发布环境:i:

后记:

首先你要安装node.js

然后在装 gulp 和一些列 gulp-XXX的插件

截图上的编译时间对不上是因为有的之前截图好的有的是写的文章的时候后补的截图;

写个技术书名梗:

翻译API的都叫《XXX权威指南》

写Demo的都叫《XXX实战》

有点自己理解的都叫《XXX深入浅出》

API+Demo的都叫《XXX高级编程》

地摊卖的都叫《21天学会XXX》

Gulp实战的更多相关文章

  1. 前端构建大法 Gulp 系列 (四):gulp实战

    前端构建大法 Gulp 系列 (一):为什么需要前端构建 前端构建大法 Gulp 系列 (二):为什么选择gulp 前端构建大法 Gulp 系列 (三):gulp的4个API 让你成为gulp专家 前 ...

  2. Gulp实战和原理解析

    Gulp实战和原理解析(以weui作为项目实例)http://i5ting.github.io/stuq-gulp/

  3. 1-1 gulp 实战

    npm install gulp-htmlmin gulp-imagemin imagemin-pngcrush gulp-minify-css gulp-jshint gulp-uglify gul ...

  4. Gulp实战(二)

    一.配置环境 1.基于NodeJs安装Git,npm,gulp 2.安装各类插件 3.参考文档 http://www.tuicool.com/articles/UbaqyyJ http://www.t ...

  5. 前端构建大法 Gulp 系列 (三):gulp的4个API 让你成为gulp专家

    系列目录 前端构建大法 Gulp 系列 (一):为什么需要前端构建 前端构建大法 Gulp 系列 (二):为什么选择gulp 前端构建大法 Gulp 系列 (三):gulp的4个API 让你成为gul ...

  6. 前端构建大法 Gulp 系列 (二):为什么选择gulp

    系列目录 前端构建大法 Gulp 系列 (一):为什么需要前端构建 前端构建大法 Gulp 系列 (二):为什么选择gulp 前端构建大法 Gulp 系列 (三):gulp的4个API 让你成为gul ...

  7. 前端构建大法 Gulp 系列 (一):为什么需要前端构建

    系列目录 前端构建大法 Gulp 系列 (一):为什么需要前端构建 前端构建大法 Gulp 系列 (二):为什么选择gulp 前端构建大法 Gulp 系列 (三):gulp的4个API 让你成为gul ...

  8. 教你写gulp plugin

    前端开发近两年工程化大幅飙升.随着Nodejs大放异彩,静态文件处理不再需要其他语言辅助.主要的两大工具即为基于文件的grunt,基于流的gulp.简单来说,如果需要的只是文件处理,gulp绝对首选. ...

  9. 前端构建大法 Gulp 系列

    参考: 前端构建大法 Gulp 系列 (一):为什么需要前端构建 前端构建大法 Gulp 系列 (二):为什么选择gulp 前端构建大法 Gulp 系列 (三):gulp的4个API 让你成为gulp ...

随机推荐

  1. SkylineGlobe7.0.1版本 支持SQLite(*.sqlite;*.db)数据库

    SQLite,是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了 ...

  2. 基于 HTML5 的工业互联网云平台监控机房 U 位

    前言 机柜 U 位管理是一项突破性创新技术--继承了 RFID 标签(电子标签)的优点的同时,完全解决了 RFID 技术(非接触式的自动识别技术)在机房 U 位资产监控场应用景中的四大缺陷,采用工业互 ...

  3. React16.x特性剪辑

    本文整理了 React 16.x 出现的耳目一新的概念与 api 以及应用场景. 更多 React 系列文章可以订阅blog 16.0 Fiber 在 16 之前的版本的渲染过程可以想象成一次性潜水 ...

  4. linux nohup命令实现退出终端后程序继续后台运行

    Unix/Linux下一般想让某个程序在后台运行,很多都是使用&在程序结尾来让程序自动运行:但如果要想在退出终端后,程序依然还在后台运行,则要用nohup与&组合来实现. nohup ...

  5. Vue中Vuex的详解与使用(简洁易懂的入门小实例)

    怎么安装 Vuex 我就不介绍了,官网上有 就是 npm install xxx 之类的.(其实就是懒~~~哈哈) 那么现在就开始正文部分了 众所周知 Vuex 是什么呢?是用来干嘛的呢? Vuex ...

  6. mysql 导入出csv

    load data infile '/var/lib/mysql-files/ip_address.csv' into table ip_address fields terminated by ', ...

  7. FastDFS 分布式文件系统搭建

    安装依赖环境yum install make cmake gcc gcc-c++ pcre-devel zlib-devel perl-devel 安装libfastcommon-master.zip ...

  8. nginx编译安装指定参数

    --prefix=/app/nginx # 安装目录 --conf-path=/app/nginx/conf/nginx.conf # 配置文件 --sbin-path=/app/nginx/sbin ...

  9. Meterpreter提权详解

      0x01 Meterpreter自动提权 1.生成后门程序 我们在kali的命令行下直接执行以下命令获得一个针对windows的反弹型木马: msfvenom -p windows/meterpr ...

  10. jforum(1)--环境搭建

    JForum 是采用Java开发的功能强大且稳定的论坛系统.它提供了抽象的接口.高效的论坛引擎以及易于使用的管理界面,同时具有完全的权限控制.多语言支持(包括中文).高性能.可自定义的用户接口.安全. ...