【问题标题】:Gulp-babel doesn't transpile when watching观看时 Gulp-babel 不会转译
【发布时间】:2018-06-02 19:58:22
【问题描述】:

任务“babel”似乎运行良好。 另一方面,在观看时,如果我更改 es6 文件,即使浏览器重新加载,它也不会转译。它重新加载只是因为它在任务'babel'中。

这是我的 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
        }))
);

【问题讨论】:

    标签: javascript gulp babeljs gulp-watch


    【解决方案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);
    

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

    【讨论】:

      【解决方案2】:

      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
              }))
      );
      

      【讨论】:

      • 感谢您的回答,但如果是问题所在,我的代码应该可以工作,因为我实际上想要 app/js/ 文件夹中的转译输出。我认为实际的问题是它创建了一个新目录,它正在从 app/js/app/es6 读取文件。因此 app/es6/ 中的更改将被监视(因为任务监视),但不会被转译。
      猜你喜欢
      • 1970-01-01
      • 2019-08-15
      • 2017-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-25
      • 1970-01-01
      相关资源
      最近更新 更多