参考自:http://www.sheyilin.com/2016/02/gulp_introduce/

在原先基础上增加了less编译 es6转码资源地图等,修改了一部分的热刷新。

gulpfile.js文件

 /*!
* gulp
* $ npm install gulp gulp-ruby-sass gulp-cached gulp-uglify gulp-rename gulp-concat gulp-notify gulp-filter gulp-jshint gulp-rev-append gulp-cssnano gulp-imagemin browser-sync gulp-file-include gulp-autoprefixer del --save-dev
*/ // Load plugins
var gulp = require('gulp'), // 必须先引入gulp插件
del = require('del'), // 文件删除
sass = require('gulp-sass'), // sass 编译
less = require('gulp-less'), // less 编译
sourcemaps = require('gulp-sourcemaps'),//确保本地已安装gulp-sourcemaps [cnpm install gulp-sourcemaps --save-dev]
cached = require('gulp-cached'), // 缓存当前任务中的文件,只让已修改的文件通过管道
uglify = require('gulp-uglify'), // js 压缩
rename = require('gulp-rename'), // 重命名
concat = require('gulp-concat'), // 合并文件
notify = require('gulp-notify'), // 相当于 console.log()
filter = require('gulp-filter'), // 过滤筛选指定文件
jshint = require('gulp-jshint'), // js 语法校验
rev = require('gulp-rev-append'), // 插入文件指纹(MD5)
cssnano = require('gulp-cssnano'), // CSS 压缩
imagemin = require('gulp-imagemin'), // 图片优化
browserSync = require('browser-sync'), // 保存自动刷新
connect = require('gulp-connect'),//热刷新
fileinclude = require('gulp-file-include'), // 可以 include html 文件
autoprefixer = require('gulp-autoprefixer'), // 添加 CSS 浏览器前缀
babel = require('gulp-babel'); //es6编译 // sass
gulp.task('sass', function() {
return gulp.src('src/sass/**/*.scss', {style: 'expanded'}) // 传入 sass 目录及子目录下的所有 .scss 文件生成文件流通过管道并设置输出格式
.pipe(cached('sass')) // 缓存传入文件,只让已修改的文件通过管道(第一次执行是全部通过,因为还没有记录缓存)
.pipe(autoprefixer('last 6 version')) // 添加 CSS 浏览器前缀,兼容最新的5个版本
.pipe(sass())
.pipe(sourcemaps.init())//资源地图创建
.pipe(sourcemaps.write())//资源地图写入
.pipe(gulp.dest('dist/css')) // 输出到 dist/css 目录下(不影响此时管道里的文件流)
.pipe(rename({suffix: '.min'})) // 对管道里的文件流添加 .min 的重命名
.pipe(cssnano()) // 压缩 CSS
.pipe(gulp.dest('dist/css')) // 输出到 dist/css 目录下,此时每个文件都有压缩(*.min.css)和未压缩(*.css)两个版本
});
// less
gulp.task('less', function() {
return gulp.src('src/less/**/*.less', {style: 'expanded'}) // 传入 sass 目录及子目录下的所有 .scss 文件生成文件流通过管道并设置输出格式
.pipe(cached('less')) // 缓存传入文件,只让已修改的文件通过管道(第一次执行是全部通过,因为还没有记录缓存)
.pipe(autoprefixer('last 6 version')) // 添加 CSS 浏览器前缀,兼容最新的5个版本
.pipe(less())
.pipe(sourcemaps.init())//资源地图创建
.pipe(sourcemaps.write())//资源地图写入
.pipe(gulp.dest('dist/css'))//输出未压缩的css文件
.pipe(rename({suffix: '.min'})) // 对管道里的文件流添加 .min 的重命名
.pipe(cssnano()) // 压缩 CSS目录下,此时每个文件都有压缩(*.min.css)和未压缩(*.css)两个版本
.pipe(gulp.dest('dist/css')) // 输出到 dist/css 目录下(不影响此时管道里的文件流)
});
// css (拷贝 *.min.css,常规 CSS 则输出压缩与未压缩两个版本)
gulp.task('css', function() {
return gulp.src('src/css/**/*.css')
.pipe(cached('css'))
.pipe(gulp.dest('dist/css')) // 把管道里的所有文件输出到 dist/css 目录
.pipe(filter(['**/*', '!**/*.min.css'])) // 筛选出管道中的非 *.min.css 文件
.pipe(autoprefixer({
grid:true,
browsers:['last 6 versions']
})
)
.pipe(connect.reload())//页面热刷新
.pipe(gulp.dest('dist/css')) // 把处理过的 css 输出到 dist/css 目录
.pipe(rename({suffix: '.min'}))
.pipe(cssnano())
.pipe(gulp.dest('dist/css'))
}); // styleReload (结合 watch 任务,无刷新CSS注入)
gulp.task('styleReload', ['less', 'css'], function() {
return gulp.src(['dist/css/**/*.css'])
.pipe(cached('style'))
.pipe(browserSync.reload({stream: true})); // 使用无刷新 browserSync 注入 CSS
}); // script (拷贝 *.min.js,常规 js 则输出压缩与未压缩两个版本)
gulp.task('script', function() {
return gulp.src(['src/js/**/*.js'])
.pipe(cached('script'))
.pipe(gulp.dest('dist/js'))
.pipe(filter(['**/*', '!**/*.min.js'])) // 筛选出管道中的非 *.min.js 文件
// .pipe(jshint('.jshintrc')) // js的校验与合并,根据需要开启
// .pipe(jshint.reporter('default'))
// .pipe(concat('main.js'))
.pipe(connect.reload())//页面热刷新
.pipe(babel({
presets: ['es2015']
}))//es6转码
.pipe(gulp.dest('dist/js'))//输出js文件
.pipe(rename({suffix: '.min'}))
.pipe(uglify())// 压缩js
.pipe(gulp.dest('dist/js'))//输出压缩后的js文件
}); // image
gulp.task('image', function() {
return gulp.src('src/img/**/*.{jpg,jpeg,png,gif}')
.pipe(cached('image'))
.pipe(imagemin({optimizationLevel: 3, progressive: true, interlaced: true, multipass: true}))
// 取值范围:0-7(优化等级),是否无损压缩jpg图片,是否隔行扫描gif进行渲染,是否多次优化svg直到完全优化
.pipe(connect.reload())//页面热刷新
.pipe(gulp.dest('dist/img'))
}); // html 编译 html 文件并复制字体
gulp.task('html', function () {
return gulp.src('src/*.html')
.pipe(fileinclude()) // include html
.pipe(rev()) // 生成并插入 MD5
.pipe(connect.reload())//页面热刷新
.pipe(gulp.dest('dist/'))
}); // clean 清空 dist 目录
gulp.task('clean', function() {
return del('dist/**/*');
}); // build,关连执行全部编译任务
gulp.task('build', ['sass','less', 'css', 'script', 'image'], function () {
gulp.start('html');
}); // default 默认任务,依赖清空任务
gulp.task('default', ['clean'], function() {
gulp.start('build');
}); // watch 开启本地服务器并监听
gulp.task('watch', function() {
browserSync.init({
server: {
baseDir: 'src' // 在 dist 目录下启动本地服务器环境,自动启动默认浏览器
}
}); // 监控 SASS 文件,有变动则执行CSS注入
gulp.watch('src/sass/**/*.scss', ['styleReload']);
// 监控 LESS 文件,有变动则执行CSS注入
gulp.watch('src/less/**/*.less', ['styleReload']);
// 监控 CSS 文件,有变动则执行CSS注入
gulp.watch('src/css/**/*.css', ['styleReload']);
// 监控 js 文件,有变动则执行 script 任务
gulp.watch('src/js/**/*.js', ['script']);
// 监控图片文件,有变动则执行 image 任务
gulp.watch('src/img/**/*', ['image']);
// 监控 html 文件,有变动则执行 html 任务
gulp.watch('src/**/*.html', ['html']);
// 监控 dist 目录下除 css 目录以外的变动(如js,图片等),则自动刷新页面
gulp.watch(['dist/**/*', 'dist/css/**/*']).on('change', browserSync.reload);
});

package.json文件

{
"devDependencies": {
"babel-core": "^6.26.0",
"babel-preset-es2015": "^6.24.1",
"browser-sync": "^2.18.13",
"del": "^3.0.0",
"gulp": "^3.9.1",
"gulp-autoprefixer": "^4.0.0",
"gulp-babel": "^7.0.0",
"gulp-cached": "^1.1.1",
"gulp-concat": "^2.6.1",
"gulp-connect": "^5.0.0",
"gulp-cssnano": "^2.1.2",
"gulp-file-include": "^1.2.0",
"gulp-filter": "^5.0.1",
"gulp-font-spider": "^0.3.6",
"gulp-imagemin": "^4.0.0",
"gulp-jshint": "^2.0.4",
"gulp-less": "^3.3.2",
"gulp-notify": "^3.0.0",
"gulp-rename": "^1.2.2",
"gulp-replace": "^0.6.1",
"gulp-rev-append": "^0.1.8",
"gulp-ruby-sass": "^2.1.1",
"gulp-sass": "^3.1.0",
"gulp-sourcemaps": "^2.6.1",
"gulp-uglify": "^3.0.0",
"jshint": "^2.9.5",
"yargs": "^10.0.3"
}
}

gulp配置(编译压缩转码自动刷新注释全)的更多相关文章

  1. gulpfile.js(编译sass,压缩图片,自动刷新浏览器)

    var gulp = require('gulp'),     sass = require('gulp-sass'),     watch = require('gulp-watch'),      ...

  2. gulp+browserSync+nodemon 实现express 全端自动刷新的实践

    学习过程宝宝心里苦,不能怨政府.. 兴趣所致,一直放不下nodejs的学习,时隔多日,又把express捡起来打算重新再学学,一直没什么太大的长进,和实际的项目经验.真的醉了,太懒了. 今天在重新研究 ...

  3. (九)uboot配置编译、源码分析

    一.X210官方uboot配置编译实践1.找到官方移植好的uboot(BSP概念)(1)源头的源代码是uboot官网下载的.这个下载的源代码可能没有你当前使用的开发板的移植,甚至找不到当前开发板使用的 ...

  4. gulp最佳实践(包含js,css,html预编译,合并,压缩,浏览器自动刷新)

    gulp是基于流的自动化构建工具官方网址:http://www.gulpjs.com.cn/ 一.安装需要的模块 1.新建package.json,输入下面的内容 { "name" ...

  5. gulp下livereload和webserver实现本地服务器下文件自动刷新

    一.前言 node从v0.10.26升级(为了匹配autoprefixer)到v5.3.0后出现了gulp插件兼容问题,在nodejs下各种新的插件出现问题,需要重新配置.livereload实现ch ...

  6. 前端自动化之sass实时编译及自动刷新浏览器

    gulp livereload实现sass实时编译及浏览器自动刷新 首先gulp是基于Node的,所以确保你已经安装 node.js,在Nodejs官方网站下载跟自己操作系统相对应的安装包. 先说一下 ...

  7. 前端神器!!gulp livereload实现浏览器自动刷新

    首先gulp是基于Node的,所以确保你已经安装 node.js,在Nodejs官方网站下载跟自己操作系统相对应的安装包. 先说一下gulp安装流程: 1:全局安装gulp,操作为: npm inst ...

  8. 浏览器自动刷新——基于Nodejs的Gulp LiveReload与VisualStudio完美结合。

    本文版权桂博客园和作者吴双共同所有,转载和爬虫请注明原文地址 http://www.cnblogs.com/tdws/p/6016055.html 写在前面 大家好我是博客园的蜗牛,博客园的蜗牛就是我 ...

  9. 使用Gulp实现网页自动刷新:gulp-connect

    入门指南 1. 全局安装 gulp: npm install --global gulp 2. 作为项目的开发依赖(devDependencies)安装: npm install --save-dev ...

随机推荐

  1. Mac版AppStore无法下载、升级错误处理

    在mac版本AppStore下载软件的时候,有时会出现"This item is temporarily unavailable, Try again later"错误提示,当然等 ...

  2. Java基础7:关于Java类和包的那些事

    更多内容请关注微信公众号[Java技术江湖] 这是一位阿里 Java 工程师的技术小站,作者黄小斜,专注 Java 相关技术:SSM.SpringBoot.MySQL.分布式.中间件.集群.Linux ...

  3. Linux~常用的命令

    大叔学Linux就一个目的,部署在它上面的服务,如redis,mongodb,fastDFS,cat,docker,mysql,nginx等 下面找一下的命令,来学学这个神秘的操作系统 常用指令 ls ...

  4. transient和synchronized的使用

    transient和synchronized这两个关键字没什么联系,这两天用到了它们,所以总结一下,两个关键字做个伴! transient 持久化时不被存储,当你的对象实现了Serializable接 ...

  5. Chapter 5 Blood Type——18

    "The Red Cross is having a blood drive in Port Angeles next weekend, so I thought you should al ...

  6. SpringCloud(2) 服务注册和发现Eureka Server

    一.简介 EureKa在Spring Cloud全家桶中担任着服务的注册与发现的落地实现.Netflix在设计EureKa时遵循着AP原则,它基于REST的服务,用于定位服务,以实现云端中间层服务发现 ...

  7. Python3+Selenium2完整的自动化测试实现之旅(四):Selenium-webdriver操作浏览器、Cookie、鼠标键盘、警示框、设置等待时间、多窗口切换

    本篇学习总结webdriver模块操作浏览器.Cookie.鼠标键盘.警示框.设置等待时间.多窗口切换等方法的使用 1    浏览器控制 Selenium-webdriverAPI提供了对页面元素定位 ...

  8. 杭电ACM2010--水仙花数

    水仙花数 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  9. Djiango初识

    加载静态文件 在一个网页中,不仅仅只有一个 html 骨架,还需要 css 样式文件, js 执行文件以及一些图片 等.因此在 DTL 中加载静态文件是一个必须要解决的问题.在 DTL 中,使用 st ...

  10. Vue脚手架搭建项目

    全局安装vue脚手架 $ npm install -g vue-cli 卸载方法 $ npm uninstall -g vue-cli 查看vue版本(注意:大写的V) $ vue -V 创建项目 $ ...