var gulp = require('gulp');
//工具
var autoprefixer = require('gulp-autoprefixer');
var include = require('gulp-file-include');
var gulpSequence = require('gulp-sequence');
var clean = require('gulp-clean');
//转码
var sass = require('gulp-sass');
var babel = require('gulp-babel');
var css_base64 = require('gulp-css-base64');
//压缩优化
var minifyHtml = require('gulp-htmlmin');
var minifyImage = require('gulp-imagemin');
var minifyJs = require('gulp-jsmin');
var minifyCss = require('gulp-clean-css');
//版本控制
var rev = require('gulp-rev');
var revCollector = require('gulp-rev-collector');
var delOriginal = require('gulp-rev-delete-original');
//localhost
var browserSync = require('browser-sync').create();
var reload = browserSync.reload;
//路径定义
var srcPath = {
root: 'src',
html: ['src/**/*.html', '!src/include/**/*.html'],
images: 'src/images/*',
css: 'src/css/*.scss',
js: 'src/js/*.js',
library: 'src/library/*.js'
},
distPath = {
root: 'dist',
html: 'dist',
images: 'dist/images',
css: 'dist/css',
js: 'dist/js',
library: 'dist/library',
manifest: 'dist/**/*.json',
};
//插件库处理
gulp.task('library', ()=> {
return gulp.src(srcPath.library)
.pipe(minifyJs())
.pipe(gulp.dest(distPath.library));
})
//生产环境
//css处理
gulp.task('css-dist', () => {
return gulp.src([distPath.manifest, distPath.css + '/*.css'])
.pipe(revCollector())
.pipe(rev())
.pipe(delOriginal())
.pipe(gulp.dest( distPath.css))
.pipe(rev.manifest())
.pipe(gulp.dest( distPath.css))
})
gulp.task('css-compile', () => {
return gulp.src(srcPath.css)
.pipe(css_base64({
maxWeightResource: 8 * 1024,
}))
.pipe(sass())
.pipe(autoprefixer({
browsers: ['last 2 versions'],
cascade: false,
}))
.pipe(minifyCss())
.pipe(gulp.dest(distPath.css))
})
//js处理
gulp.task('js-dist', ()=>{
return gulp.src(srcPath.js)
.pipe(babel({
presets: ['env'],
}))
.pipe(minifyJs())
.pipe(rev())
.pipe(gulp.dest(distPath.js))
.pipe(rev.manifest())
.pipe(gulp.dest(distPath.js))
})
//image 处理
gulp.task('images-dist', ()=>{
return gulp.src(srcPath.images)
.pipe(minifyImage())
.pipe(rev())
.pipe(gulp.dest(distPath.images))
.pipe(rev.manifest())
.pipe(gulp.dest(distPath.images))
})
//html 处理
gulp.task('html-dist', ()=>{
return gulp.src([distPath.manifest, ...srcPath.html])
.pipe(include({
}))
.pipe(revCollector())
.pipe(minifyHtml({
collapseWhitespace: true,
}))
.pipe(gulp.dest(distPath.html))
})
//开发环境
//css处理
gulp.task('css-dev', () => {
return gulp.src(srcPath.css)
.pipe(sass())
.pipe(autoprefixer({
browsers: ['last 2 versions'],
cascade: false,
}))
.pipe(gulp.dest(distPath.css))
.pipe(reload({stream: true}))
})
//js处理
gulp.task('js-dev', ()=>{
return gulp.src(srcPath.js)
// .pipe(babel({
// presets: ['env'],
// }))
.pipe(gulp.dest(distPath.js))
.pipe(reload({stream: true}))
})
//library 处理
gulp.task('library-dev', ()=>{
return gulp.src(srcPath.library)
.pipe(gulp.dest(distPath.library))
.pipe(reload({stream: true}))
})
//image 处理
gulp.task('images-dev', ()=>{
return gulp.src(srcPath.images)
.pipe(gulp.dest(distPath.images))
.pipe(reload({stream: true}))
})
//html 处理
gulp.task('html-dev', ()=>{
return gulp.src(srcPath.html)
.pipe(include({
}))
.pipe(gulp.dest(distPath.html))
.pipe(reload({stream: true}))
})
//清除dist目录
gulp.task('clean', ()=>{
return gulp.src('dist/*')
.pipe(clean({read: false}))
})
//清除manifest
gulp.task('clean-manifest', ()=>{
return gulp.src('dist/**/*.json')
.pipe(clean({read:false}))
})
//静态服务器
gulp.task('browserSync', ()=>{
browserSync.init({
server: {
baseDir: './dist',
//proxy: 'ip地址',
}
})
})
gulp.task('check-dist', ()=>{
browserSync.init({
server: {
baseDir: './dist',
//proxy: 'ip地址',
}
})
})
// build
gulp.task('build', gulpSequence('clean', ['images-dist', 'js-dist', 'library'], 'css-compile', 'css-dist', 'html-dist', 'clean-manifest'));
// dev
gulp.task('dev', (cb)=>{
gulpSequence('clean', ['library', 'css-dev','images-dev', 'js-dev', 'html-dev'], 'browserSync')(cb);
gulp.watch('src/**/*.scss', ['css-dev']);
gulp.watch('src/**/*.html', ['html-dev']);
gulp.watch(srcPath.js, ['js-dev']);
gulp.watch(srcPath.library, ['library-dev']);
gulp.watch(srcPath.images, ['images-dev']);
})

一份比较完整的gulpfile.js的更多相关文章

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

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

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

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

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

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

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

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

  5. gulpfile.js文档

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

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

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

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

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

  8. node入门(二)——gulpfile.js初探

    本文关于gulpfile.js怎么写,利于完成个性化需求.本文开发环境默认已安装node,详情参考<node入门(一)——安装>. 一.安装gulp npm install -g gulp ...

  9. Gulpfile.js——编译、压缩、合并js和css文件

    gulp 一个入门教程:http://www.ydcss.com/gulp API文档地址:http://www.gulpjs.com.cn/docs/api/ 我的一个Low版的gulpfile v ...

随机推荐

  1. 简易html5贪吃蛇

    1. [图片] E6~0%QPA46ER843UQJ$0Z`H.jpg ​2. [文件] snake.html <!DOCTYPE html><html><head> ...

  2. Linux网络编程之select、poll、epoll的比较,以及epoll的水平触发(LT)和边缘触发(ET)

    Linux的网络通信先后推出了select.poll.epoll三种模式. select有以下三个问题: (1)每次调用select,都需要把fd集合从用户态拷贝到内核态,这个开销在fd很多时会很大. ...

  3. 前端多媒体(2)—— xhr异步接收处理二进制数据

    有时我们需要把远程的视频.图片数据异步下载下来,然后在js里进行特殊处理.比如把VR的图片特殊处理,把不同封装格式的视频做一次 转封装 处理等等,这类操作都要先获取二进制数据,然后特殊处理. 这个时候 ...

  4. 0x01

    随便记录点想法什么的, 这个博客的编辑界面挺简陋的...

  5. [Selenium] 处理表格(python + java)

    python : https://www.cnblogs.com/yan-xiang/p/6819168.html 操作内容:获取table总行数.总列数.获取某单元格的text值,删除一行[如果每行 ...

  6. python 动态添加属性及方法及“__slots__的作用”

    1.动态添加属性 class Person(object): def __init__(self, newName, newAge): self.name = newName self.age = n ...

  7. 3170: [Tjoi 2013]松鼠聚会

    题目大意 给定n个点,找到一个点使这个点到其他所有点的切比雪夫距离之和最小. 题解 我们知道切比雪夫距离和曼哈顿距离的转化公式 \(1\)表示切比雪夫距离,\(2\)表示曼哈顿距离 我们有: \(x_ ...

  8. vue实现图片的上传和删除

    目录 1 UI库使用ElementUI 2 后端使用Express + formidable模块 1 UI库使用ElementUI 安装ElementUI $ npm install --save-d ...

  9. Mesos和Marathon

    libz is required for mesos to build 需要安装zlib-devel-1.2.7-17.el7.x86_64.rpm   其实跨Shell的Profile文件同步只要执 ...

  10. Hbase之三:Hbase Shell使用入门

    HBase 为用户提供了一个非常方便的使用方式, 我们称之为“HBase Shell”.HBase Shell 提供了大多数的 HBase 命令, 通过 HBase Shell 用户可以方便地创建.删 ...