var config = require("./build.config")   //获取build.config.js文件里的内容
var gulp = require("gulp")         //获取gulp模块
var sass = require('gulp-sass'); //gulp-sass模块是用于把sass转成css
var path = require("path")
var babel = require("gulp-babel"); //gulp-babel模块用于把es6转成es5
var postcss = require("gulp-postcss")    //项目中把scss文件转化成css文件
var autoprefixer = require('autoprefixer') //autoprefixer根据当前浏览器的普及度以及属性支持提供给你前缀:
var postasset = require("postcss-assets") //postcss-assets 插件用来处理图片和 SVG。在 CSS 声明中引用图片时,可以使用 resolve 加上图片路径的形式,如“resolve(‘logo.png’)”。https://www.ibm.com/developerworks/cn/web/1604-postcss-css/
var cssnano = require('cssnano') //css文件压缩
var imagemin = require('gulp-imagemin'); //压缩图片文件
var pngquant = require('imagemin-pngquant'); //使用pngquant深度压缩png图片的imagemin插件
var uglify = require('gulp-uglify'); //压缩javascript文件
var cache = require('gulp-cache'); //静态资源缓存
var sourcemaps = require('gulp-sourcemaps'); //简单说,Source map就是一个信息文件,里面储存着位置信息。也就是说,转换后的代码的每一个位置,所对应的转换前的位置
var browserify = require('gulp-browserify');
var changed = require('gulp-changed'); //该插件能够实现只编译或打包改变过文件,大大加快了gulp task的执行速度。
var runSequence = require('run-sequence'); //让gulp任务,可以相互独立,解除任务间的依赖,增强task复用
livereload = require('gulp-livereload'); //不用F5了,实时自动刷新页面来开发
var rev = require('gulp-rev') //对文件加md5后缀
var revCollector = require('gulp-rev-collector'); //文件路径替换
var log = console.log.bind(console);
var prefix = require('gulp-prefix'); //给引用了静态资源的的HTML文件替换引用和加CDN前缀
require('shelljs/global') gulp.task('d', function () {
livereload.listen();
gulp.watch('src/**/*.*', function (file) { //关查src下的所有文件
log("File " + file.path + " changed!");
if (file.path.endsWith(".scss")) { //如果文件后缀是.scss
gulp.run("css")
} else if (file.path.endsWith(".jsx")) { //如果文件后缀是.jsx
gulp.run("js")
} else {
livereload.changed(file.path);
}
})
log(" ***** Watching " + "[crtl+c to stop.] ****** ");
}); gulp.task('r', function (callback) {
rm('-rf', config.distRoot)
runSequence(["js:r", "css:r"], "revCss", "revJs", callback)
});
css()
css(":r")
js()
js(":r")
gulp.task("default", ["r"]); function js(type) {
gulp.task("js" + (type || ""), function () {
var stream = gulp.src(config.jsSrc)
.pipe(changed(config.jsDist))
.pipe(sourcemaps.init())
.pipe(babel({
presets: ['es2015']
}))
.pipe(browserify({
debug: false
}))
if (type == ":r") {
stream = stream.pipe(uglify({compress: {warnings: true}}))
.pipe(sourcemaps.write("./sources_maps"))
.pipe(rev())
.pipe(gulp.dest(config.jsDist))
.pipe(rev.manifest())
.pipe(gulp.dest('./rev/js'))
} else {
stream.pipe(gulp.dest("./src/static/js"))
}
return stream;
});
}
function css(type) {
var processors = [
postasset,
autoprefixer({
browsers: ['last 2 versions', 'Android >= 4.1'],
cascade: true,
remove: true
})
];
var depend = [];
if (type == ":r") { // 如果是打包线上版本
processors.push(cssnano()); 压缩css
depend[] = "img"
}
gulp.task('css' + (type || ""), depend, function () {
var stream = gulp.src(config.cssSrc)
.pipe(changed(config.cssDist))
.pipe(sass())
.pipe(postcss(processors))
//.pipe(rename(function (path) {
// path.extname = ".css"
//})) if (type == ":r") {
stream.pipe(rev())
.pipe(gulp.dest(config.cssDist))
.pipe(rev.manifest())
.pipe(gulp.dest('./rev/css'));
} else {
stream.pipe(gulp.dest("./src/static/css"))
}
});
} gulp.task('img', function () {
gulp.src(config.imgSrc)
.pipe(cache(imagemin({ //缓存压缩图片
progressive: true,
svgoPlugins: [{removeViewBox: false}],
use: [pngquant()]
})))
.pipe(gulp.dest(config.imgDist));
}); gulp.task('revCss', function () {
return gulp.src(['./rev/css/*.json', './src/*.html']) //读取rev下面的.json文件,来替换html里面对应的文件名字
.pipe(revCollector()) //替换html中对应的记录
.pipe(gulp.dest(config.distRoot));
}); gulp.task('revJs', function () {
return gulp.src(['./rev/js/*.json', config.distRoot+"*.html"])
.pipe(revCollector())
.pipe(gulp.dest(config.distRoot));
}); gulp.task('prefix', function(){
gulp.src(config.distRoot+"*.html")
.pipe(prefix(config.cdnUrl, null, '{{'))
.pipe(gulp.dest(config.distRoot));
}); gulp.task('img:clear', function (done) { //清除图片缓存
return cache.clearAll(done);
});

gulpfile.js demo的更多相关文章

  1. 通过Anuglar Material串串学客户端开发 - javascript编译和gulpfile.js

    Angular Material不仅仅有本身框架的源代码,还有在这个框架上实现的一个应用docs.更为强大的是,这个应用是真正的产品网站:就是它的官网.我有理由相信,这个网站是从源代码直接发布的,从网 ...

  2. 基于 Koa.js 平台的 Node.js web 快速开发框架KoaHub.js demo 可安装

    KoaHub.js demo KoaHub.js KoaHub.js -- 基于 Koa.js 平台的 Node.js web 快速开发框架.可以直接在项目里使用 ES6/7(Generator Fu ...

  3. gulp的使用(二)之gulpfile.js文件的配置

    Gulpfile.js是什么文件: gulp是前端开发过程中对代码进行构建的工具,是自动化项目的构建利器:她不仅能对网站资源进行优化,而且在开发过程中很多重复的任务能够使用正确的工具自动完成:使用她, ...

  4. 代码高亮插件——wangHightLighter.js——demo演示

    wangHighLighter.js demo 语言:   主题: 转换   说明: wangHightLighter.js是一个可以将代码高亮显示的javascript小插件,支持常用的20多语言. ...

  5. gulpfile.js不断更新中...

    Gulp压缩合并js/css文件,压缩图片,以及热更新教程 var gulp = require('gulp');var concat = require('gulp-concat');//- 多个文 ...

  6. gulp-load-task 解决 gulpfile.js 过大的问题

    当我们在项目中使用gulp来实现前端自动化时,常常因任务太多导致gulpfile.js越来越臃肿,增加后期维护/变更成本.在计算机科学领域中,分治可以将我们的项目变得井然有序.所以,我们利用这个理念, ...

  7. gulpfile.js文档

    gulp watch 实现监听不仅需要package.json文档,还需要gulpfile.js文档.否则无法实现. 1.gulp的安装 1.1 首先必须先安装node.js.这个可以参考之前的博客& ...

  8. gulp 图片、样式、js、实时刷新等压缩gulpfile.js文件各个模块

    1.压缩tinypng图片   gulp-tinypng-nokey,但不压缩gif格式(另外一个gulp-imagemin压缩率不高,可以压缩gif格式) // 获取 gulp var gulp = ...

  9. 编写gulpfile.js文件:压缩合并css、js

    使用gulp一共有四个步骤: 1. 全局安装 gulp: $ npm install --global gulp 2. 作为项目的开发依赖(devDependencies)安装: $ npm inst ...

随机推荐

  1. Spark RDD基本操作

  2. MySQL数据库之DDL(数据定义语言)

    1.MySQL数据库之DDL创建.删除.切换 (1)查看所有数据库 show databases: (2)切换数据库 use 数据库名: (3)创建数据库 create database 数据库名: ...

  3. LUOGU P3413 SAC#1 - 萌数(数位dp)

    传送门 解题思路 首先这道题如果有两个以上长度的回文串,那么就一定有三个或两个的回文串,所以只需要记录一下上一位和上上位填的数字就行了.数位\(dp\),用记忆化搜索来实现.设\(f[i][j][k] ...

  4. react 组件的生命周期 超简版

    组件从被创建到被销毁的过程称为组件的 生命周期: 通常,组件的生命周期可以被分为三个阶段:挂载阶段.更新阶段.卸载阶段: 一.挂载阶段 这个阶段组件被创建,执行初始化,并被挂载到DOM中,完成组件的第 ...

  5. 第一个servlet小程序

    第一个servlet小程序 com.fry.servlet.HelloServlet package com.fry.servlet; import javax.servlet.ServletExce ...

  6. LANMP相关配置

    Linux Apache Mysql Postgresql 安装 yum -y install httpd yum -y install mysql mysql-server yum -y insta ...

  7. 大数据和BI商业智能有何区别?有何相关

    大数据和BI商业智能有何区别?有何相关 大数据 ≠BI商业智能,大数据也不是传统商业智能的简单升级. 1.大数据和BI两者的区别 BI(BusinessIntelligence)即商业智能,它是企业数 ...

  8. Big Number HDU - 1212

    As we know, Big Number is always troublesome. But it's really important in our ACM. And today, your ...

  9. hive 总结二

    本文参考:黑泽君相关博客 本文是我总结日常工作中遇到的坑,结合黑泽君相关博客,选取.补充了部分内容. 查询函数(Hive高级) NVL(cloumn,replace_with) 如果cloumn为NU ...

  10. Python 实现快速排序和随机快速排序

    直接上代码: #快速排序 #coding: utf-8 def quicksort(a,left,right): if(left<right): mid = partition(a,left,r ...