gulp 使用浏览器同步进行构建并做出反应而不是重新加载页面

gulp build with browser sync and react not reloading page

我有一个包含以下 build 任务的 gulpfile:

var gulp = require('gulp'),
    source = require('vinyl-source-stream'),
    buffer = require('vinyl-buffer'),
    babelify = require('babelify'),
    browserify = require('browserify'),
    uglify = require('gulp-uglify'),
    sourcemaps = require('gulp-sourcemaps'),
    bs = require('browser-sync').create('BrowserSync');

gulp.task('build', function () {
    return browserify({entries: './src/app.js', debug: true})
        .transform("babelify", { presets: ['es2015','react'] })
        .bundle()
        .pipe(source('app.js'))
        .pipe(buffer())
        .pipe(sourcemaps.init())
        .pipe(uglify())
        .pipe(sourcemaps.write('./maps'))
        .pipe(gulp.dest('./dist/js'))
        .pipe(bs.reload({stream: true}));
});

这个过程完美地构建了我的文件,但是我的浏览器没有加载。为什么我的浏览器不重新加载?我如何实现所需的行为?我觉得我遗漏了一些关于 BrowserSync.

的东西

注意: 我相当有信心 BrowserSync 工作正常,因为我在另一个任务中调用 bs.reload(),并且页面重新加载完美。如果需要,很乐意粘贴更多代码。

这是我不久前开始的 starter project 中的一个片段,它可以实现您提到的内容...

/*...*/
gulp.task('watchify', () => {
  let args = merge(watchify.args, { debug: true })
  let bundler = watchify(browserify('./src/js/app.js', args)).transform(babelify, { presets: ["es2015", "react"] })
  bundle(bundler)

  bundler.on('update', () => {
    bundle(bundler)
  })
})


function bundle(bundler) {
  return bundler.bundle()
    .on('error', map_error)
    .pipe(source('app.js'))
    .pipe(buffer())
    .pipe(rename('app.min.js'))
    .pipe(sourcemaps.init({ loadMaps: true }))
      // capture sourcemaps from transforms
      .pipe(uglify())
    .pipe(sourcemaps.write('./maps'))
    .pipe(gulp.dest('./dist/js'))
    .pipe(sync.reload({
            stream: true
    }))
}
/*...*/

// watching multiple files with a task 'watch'
gulp.task('default', () => {
    gulp.watch('src/js/**/*.js', ['watchify']);
});

启动 browsersync 的 gulp 任务由 gulp 运行 执行,因为它是在默认任务中触发的。

然后我从终端手动 运行 gulp build,这就是问题所在。因此,此手动命令无法访问由默认 gulp 进程创建的 browsersync 实例。

所以让 gulp build 运行 自动使用可用的实例化版本就成功了。