gulp配置(编译压缩转码自动刷新注释全)

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

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

gulpfile.js文件

  1 /*!
  2  * gulp
  3  * $ 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
  4  */
  5 
  6 // Load plugins
  7 var gulp = require('gulp'), // 必须先引入gulp插件
  8     del = require('del'),  // 文件删除
  9     sass = require('gulp-sass'), // sass 编译
 10     less = require('gulp-less'), // less 编译
 11     sourcemaps = require('gulp-sourcemaps'),//确保本地已安装gulp-sourcemaps [cnpm install gulp-sourcemaps --save-dev]
 12     cached = require('gulp-cached'), // 缓存当前任务中的文件,只让已修改的文件通过管道
 13     uglify = require('gulp-uglify'), // js 压缩
 14     rename = require('gulp-rename'), // 重命名
 15     concat = require('gulp-concat'), // 合并文件
 16     notify = require('gulp-notify'), // 相当于 console.log()
 17     filter = require('gulp-filter'), // 过滤筛选指定文件
 18     jshint = require('gulp-jshint'), // js 语法校验
 19     rev = require('gulp-rev-append'), // 插入文件指纹(MD5)
 20     cssnano = require('gulp-cssnano'), // CSS 压缩
 21     imagemin = require('gulp-imagemin'), // 图片优化
 22     browserSync = require('browser-sync'), // 保存自动刷新
 23     connect = require('gulp-connect'),//热刷新
 24     fileinclude = require('gulp-file-include'), // 可以 include html 文件
 25     autoprefixer = require('gulp-autoprefixer'), // 添加 CSS 浏览器前缀
 26     babel = require('gulp-babel'); //es6编译
 28 
 29 // sass
 30 gulp.task('sass', function() {
 31   return gulp.src('src/sass/**/*.scss', {style: 'expanded'})  // 传入 sass 目录及子目录下的所有 .scss 文件生成文件流通过管道并设置输出格式
 32     .pipe(cached('sass'))  // 缓存传入文件,只让已修改的文件通过管道(第一次执行是全部通过,因为还没有记录缓存)
 33     .pipe(autoprefixer('last 6 version')) // 添加 CSS 浏览器前缀,兼容最新的5个版本
 34     .pipe(sass())
 35     .pipe(sourcemaps.init())//资源地图创建
 36     .pipe(sourcemaps.write())//资源地图写入
 37     .pipe(gulp.dest('dist/css')) // 输出到 dist/css 目录下(不影响此时管道里的文件流)
 38     .pipe(rename({suffix: '.min'})) // 对管道里的文件流添加 .min 的重命名
 39     .pipe(cssnano()) // 压缩 CSS
 40     .pipe(gulp.dest('dist/css')) // 输出到 dist/css 目录下,此时每个文件都有压缩(*.min.css)和未压缩(*.css)两个版本
 41 });
 42 // less
 43 gulp.task('less', function() {
 44   return gulp.src('src/less/**/*.less', {style: 'expanded'})  // 传入 sass 目录及子目录下的所有 .scss 文件生成文件流通过管道并设置输出格式
 45     .pipe(cached('less'))  // 缓存传入文件,只让已修改的文件通过管道(第一次执行是全部通过,因为还没有记录缓存)
 46     .pipe(autoprefixer('last 6 version')) // 添加 CSS 浏览器前缀,兼容最新的5个版本
 47     .pipe(less())
 48     .pipe(sourcemaps.init())//资源地图创建
 49     .pipe(sourcemaps.write())//资源地图写入
 50     .pipe(gulp.dest('dist/css'))//输出未压缩的css文件
 51     .pipe(rename({suffix: '.min'})) // 对管道里的文件流添加 .min 的重命名
 52     .pipe(cssnano()) // 压缩 CSS目录下,此时每个文件都有压缩(*.min.css)和未压缩(*.css)两个版本
 53     .pipe(gulp.dest('dist/css')) // 输出到 dist/css 目录下(不影响此时管道里的文件流)
 54 });
 55 // css (拷贝 *.min.css,常规 CSS 则输出压缩与未压缩两个版本)
 56 gulp.task('css', function() {
 57   return gulp.src('src/css/**/*.css')
 58     .pipe(cached('css'))
 59     .pipe(gulp.dest('dist/css')) // 把管道里的所有文件输出到 dist/css 目录
 60     .pipe(filter(['**/*', '!**/*.min.css'])) // 筛选出管道中的非 *.min.css 文件
 61     .pipe(autoprefixer({
 62               grid:true,
 63               browsers:['last 6 versions']
 64               })
 65             )
 66     .pipe(connect.reload())//页面热刷新
 67     .pipe(gulp.dest('dist/css')) // 把处理过的 css 输出到 dist/css 目录
 68     .pipe(rename({suffix: '.min'}))
 69     .pipe(cssnano())
 70     .pipe(gulp.dest('dist/css'))
 71 });
 72 
 73 // styleReload (结合 watch 任务,无刷新CSS注入)
 74 gulp.task('styleReload', ['less', 'css'], function() {
 75   return gulp.src(['dist/css/**/*.css'])
 76     .pipe(cached('style'))
 77     .pipe(browserSync.reload({stream: true})); // 使用无刷新 browserSync 注入 CSS
 78 });
 79 
 80 // script (拷贝 *.min.js,常规 js 则输出压缩与未压缩两个版本)
 81 gulp.task('script', function() {
 82   return gulp.src(['src/js/**/*.js'])
 83     .pipe(cached('script'))
 84     .pipe(gulp.dest('dist/js'))
 85     .pipe(filter(['**/*', '!**/*.min.js'])) // 筛选出管道中的非 *.min.js 文件
 86     // .pipe(jshint('.jshintrc')) // js的校验与合并,根据需要开启
 87     // .pipe(jshint.reporter('default'))
 88     // .pipe(concat('main.js'))
 89     .pipe(connect.reload())//页面热刷新
 90     .pipe(babel({
 91       presets: ['es2015']
 92     }))//es6转码
 93         .pipe(gulp.dest('dist/js'))//输出js文件
 94         .pipe(rename({suffix: '.min'}))
 95         .pipe(uglify())// 压缩js
 96     .pipe(gulp.dest('dist/js'))//输出压缩后的js文件
 97 });
 98 
 99 // image
100 gulp.task('image', function() {
101   return gulp.src('src/img/**/*.{jpg,jpeg,png,gif}')
102     .pipe(cached('image'))
103     .pipe(imagemin({optimizationLevel: 3, progressive: true, interlaced: true, multipass: true}))
104     // 取值范围:0-7(优化等级),是否无损压缩jpg图片,是否隔行扫描gif进行渲染,是否多次优化svg直到完全优化
105     .pipe(connect.reload())//页面热刷新
106     .pipe(gulp.dest('dist/img'))
107 });
108 
109 // html 编译 html 文件并复制字体
110 gulp.task('html', function () {
111   return gulp.src('src/*.html')
112     .pipe(fileinclude()) // include html
113     .pipe(rev()) // 生成并插入 MD5
114     .pipe(connect.reload())//页面热刷新
115     .pipe(gulp.dest('dist/'))
116 });
117 
118 // clean 清空 dist 目录
119 gulp.task('clean', function() {
120   return del('dist/**/*');
121 });
122 
123 // build,关连执行全部编译任务
124 gulp.task('build', ['sass','less', 'css', 'script', 'image'], function () {
125   gulp.start('html');
126 });
127 
128 // default 默认任务,依赖清空任务
129 gulp.task('default', ['clean'], function() {
130   gulp.start('build');
131 });
132 
133 // watch 开启本地服务器并监听
134 gulp.task('watch', function() {
135   browserSync.init({
136     server: {
137       baseDir: 'src' // 在 dist 目录下启动本地服务器环境,自动启动默认浏览器
138     }
139   });
140 
141   // 监控 SASS 文件,有变动则执行CSS注入
142   gulp.watch('src/sass/**/*.scss', ['styleReload']);
143     // 监控 LESS 文件,有变动则执行CSS注入
144   gulp.watch('src/less/**/*.less', ['styleReload']);
145   // 监控 CSS 文件,有变动则执行CSS注入
146   gulp.watch('src/css/**/*.css', ['styleReload']);
147   // 监控 js 文件,有变动则执行 script 任务
148   gulp.watch('src/js/**/*.js', ['script']);
149   // 监控图片文件,有变动则执行 image 任务
150   gulp.watch('src/img/**/*', ['image']);
151   // 监控 html 文件,有变动则执行 html 任务
152   gulp.watch('src/**/*.html', ['html']);
153   // 监控 dist 目录下除 css 目录以外的变动(如js,图片等),则自动刷新页面
154   gulp.watch(['dist/**/*', 'dist/css/**/*']).on('change', browserSync.reload);
155 });

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"
  }
}

 

posted @ 2017-12-05 17:32  =DLSS=webZT  阅读(556)  评论(0编辑  收藏  举报