【问题标题】:Gulp watch task sequence and Browser SyncGulp 观看任务序列和浏览器同步
【发布时间】:2016-01-01 05:58:21
【问题描述】:

我是使用 Gulp 的新手,只是想学习它...现在我得到并想问的问题是设置包含手表和浏览器同步的默认任务的方法 我需要知道我做错了什么

任何人都可以在这里改进我​​的代码,我不明白手表和浏览器同步的关系,在浏览器同步之前要运行哪些任务以及何时观看

下面是我的文件夹结构

var gulp = require('gulp');
var browserSync = require('browser-sync');
var reload = browserSync.reload;
var	uglify = require('gulp-uglify');
var less = require('gulp-less');
var plumber= require('gulp-plumber');
var cssmin = require('gulp-cssmin');
var rename = require('gulp-rename');
var htmlmin = require('gulp-htmlmin');
var imagemin = require ('gulp-imagemin');

//scripts task
//uglifies
gulp.task('scripts', function(){
gulp.src('js/*.js')
	.pipe(plumber())
	.pipe(uglify())
	.pipe(gulp.dest('build/js'));
});


//compress images
gulp.task('imagemin', function(){
        gulp.src('img/**/*.+(png|jpg|gif|svg)')
        .pipe(cache(imagemin({
      interlaced: true
    })))
        .pipe(gulp.dest('build/img'));
});

//CSS styles
gulp.task('less', function(){
 gulp.src('less/style.less')
 .pipe(plumber())
 .pipe(less())
 .pipe(gulp.dest('build/css'));
 
});

gulp.task('cssmin', function(){
gulp.src('build/css/style.css')
		.pipe(plumber())
		.pipe(cssmin())
		.pipe(rename({suffix: '.min'}))
		.pipe(gulp.dest('build/css'))
		.pipe(reload({stream:true})); // inject into browsers

});

gulp.task('htmlmin', function(){
  return gulp.src('*.html')
    .pipe(htmlmin({removeComments: true}))
    .pipe(gulp.dest('build'))
    .pipe(reload({stream:true})); // inject into browsers
});



// Browser-sync task, only cares about compiled CSS
gulp.task('browser-sync', function() {
    browserSync(['css/*.css', 'js/*.js','less/*.less', 'images/*'],{
        server: {
            baseDir: "./"
        }
    });
});



/* Watch scss, js and html files, doing different things with each. */
gulp.task('default', ['browser-sync' , 'scripts', 'less', 'cssmin', 'htmlmin', 'imagemin'], function () {
    /* Watch scss, run the sass task on change. */
    gulp.watch(['less/**/*.less'], ['less'])
    //Watch css min
    gulp.watch(['build/css/*.css'], ['cssmin'])
    /* Watch app.js file, run the scripts task on change. */
    gulp.watch(['js/*.js'], ['scripts'])
    /* Watch .html files, run the bs-reload task on change. */
    gulp.watch(['*.html'], ['htmlmin']);



     // gulp.watch('app/*.html', browser-sync.reload); 
    // gulp.watch('app/js/**/*.js', browser-sync.reload); 
});

现在我想要的过程是

  1. 将less编译为css,然后将其压缩为build文件夹
  2. 列表项
  3. 然后缩小我的 HTML 代码
  4. 然后缩小并连接我的 js
  5. 压缩所有图像(仅在某些图像发生变化时运行)
  6. 使用 Browser Sync 运行缩小的 HTML 并观察我所有源 HTML、Less、图像和 JS 的变化

【问题讨论】:

    标签: gulp gulp-watch gulp-uglify gulp-less


    【解决方案1】:

    如果您的目标是在开发模式下运行,此时我不会担心缩小,这适用于 imagemin(无论如何我都会离线执行)、cssmin、htmlmin 以及默认运行 uglify 的 js 任务。理想情况下,您希望在浏览器中进行调试,而缩小代码对您没有多大帮助。如果您添加一个dist 任务来执行缩小步骤。

    我了解您需要 Less to CSS 的原因很明显。所以你正在寻找这样的东西:

    var gulp = require('gulp');
    var plumber = require('gulp-plumber');
    var browserSync = require('browser-sync').create();
    var sass = require('gulp-less');
    
    // Static Server + watching less/html files
    gulp.task('serve', ['less'], function() {
    
        browserSync.init({
            server: "./"
        });
    
        gulp.watch("less/*.less", ['less']);
        gulp.watch("*.html").on('change', browserSync.reload);
    });
    
    gulp.task('less', function(){
      gulp.src('less/style.less')
      .pipe(plumber())
      .pipe(less())
      .pipe(gulp.dest('build/css'))
      .pipe(browserSync.stream());
    
    });
    
    gulp.task('default', ['serve']);
    

    此代码调用serve 作为主要任务。 Serve 任务具有 less 作为依赖项(将首先调用)。然后,回调最终被调用。 BrowserSync 已初始化,并为 html 文件和 less 文件添加了监视。

    如果您想了解有关 gulp + browsersync 集成的更多信息,请查看this page

    【讨论】:

    • 非常感谢@alan-souza:所以当我完成开发时,我应该做一个单独的任务来缩小......这是一个很好的提示......再次百万感谢
    猜你喜欢
    • 2016-01-21
    • 1970-01-01
    • 1970-01-01
    • 2015-04-15
    • 2017-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多