Gulp-babel在观看时并没有变相

时间:2018-06-02 19:58:22

标签: javascript gulp babel gulp-watch

任务' babel'似乎工作得很好。 另一方面,在观看时,如果我更改es6文件,即使浏览器重新加载,它也不会转换。它只是因为它在任务“巴贝尔”而重新加载。

这是我的gulpfile:

var gulp = require('gulp');
var sass = require('gulp-sass');
var browserSync = require('browser-sync').create();
var concat = require('gulp-concat');
var sourcemaps = require('gulp-sourcemaps');
var babel = require('gulp-babel');

/* ----------------- */
/* Styles
/* ----------------- */

gulp.task('sass', function() {
  return gulp.src('app/scss/*.+(scss|sass)') // Gets all files ending with .scss in app/scss
    .pipe(sass())
    .pipe(gulp.dest('app/css'))
    .pipe(browserSync.reload({
      stream: true
    }))
});

/* ----------------- */
/* Development
/* ----------------- */

gulp.task('watch', ['browserSync', 'sass', 'babel'], function(){
  gulp.watch('app/scss/*.+(scss|sass)', ['sass']);
  gulp.watch('app/*.html', browserSync.reload);
  gulp.watch('**/*.js', browserSync.reload);
  gulp.watch('app/es6/*.js', ['babel'])
})

gulp.task('browserSync', function() {
  browserSync.init({
    server: {
      baseDir: 'app'
    },
  })
})

/* ----------------- */
/* Scripts
/* ----------------- */

gulp.task('babel', () =>
    gulp.src('app/es6/*.+(js)')
        .pipe(babel({
            presets: ['env']
        }))
        .pipe(sourcemaps.init())
        .pipe(concat('scripts.js'))
        .pipe(gulp.dest('app/js'))
        .pipe(browserSync.reload({
          stream: true
        }))
);

2 个答案:

答案 0 :(得分:1)

问题出在babel任务中,在源文件中。它应该改为:

   /* ----------------- */
   /* Scripts
   /* ----------------- */


   gulp.task('babel', () =>
       gulp.src('app/js/es6/*.js')
           .pipe(babel({
               presets: ['env']
           }))
           .pipe(sourcemaps.init())
           .pipe(concat('main.js'))
           .pipe(gulp.dest('app/js/es5/'))
           .pipe(browserSync.reload({
             stream: true
           }))
   );

否则它创建了一个新目录,它从app / js / app / es6读取文件。因此,app / es6 /中的更改将被监视(因为任务监视)并且浏览器将重新加载,但.js文件不会被转换。

而且,正如旁注:有一些不好的结果:

    gulp.watch('app/js/*.js', browserSync.reload)

应该取出或至少改为:

    gulp.watch('gulpfile.js', browserSync.reload);

否则它还会监视所有应用依赖项,这会大大减慢观看速度。

答案 1 :(得分:0)

gulp.watch('app/es6/*.js', ['babel'])这是您的监视目录,它将es6发送给babel,但您将已编译的脚本输出到.pipe(gulp.dest('app/js'))

所以

gulp.task('babel', () =>
    gulp.src('app/es6/*.+(js)')
        .pipe(babel({
            presets: ['env']
        }))
        .pipe(sourcemaps.init())
        .pipe(concat('scripts.js'))
        .pipe(gulp.dest('app/es6/'))
        .pipe(browserSync.reload({
          stream: true
        }))
);