Gulp-babel 在观看时不会转译
Gulp-babel doesn't transpile when watching
任务'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
}))
);
gulp.watch('app/es6/*.js', ['babel'])
这是将 es6 发送到 babel 的 watch 目录,但您正在将转译后的脚本输出到 .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
}))
);
问题出在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);
否则它还会监视所有应用依赖项,这会大大减慢监视速度。
任务'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
}))
);
gulp.watch('app/es6/*.js', ['babel'])
这是将 es6 发送到 babel 的 watch 目录,但您正在将转译后的脚本输出到 .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
}))
);
问题出在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);
否则它还会监视所有应用依赖项,这会大大减慢监视速度。