javascript - Gulp.js 在没有 browserSync 的情况下提供 src 文件?

标签 javascript node.js gulp gulp-watch browser-sync

Yeoman Gulp-Angular 搭建了一个新项目.

我了解 BrowserSync 的前提,但坦率地说,我无法理解任何人如何容忍他们的网络请求被此淹没:

BrowserSync dumps an endless stream of polls into the browser

我想立即从我的项目中删除 BrowserSync。

如何更正以下代码以便 gulp serve 并执行预览非缩小 src 文件的相同功能,但没有 BrowserSync?

这是我当前的 gulp/server.js,默认由 gulp-angular 生成:

'use strict';

var gulp = require('gulp');
var browserSync = require('browser-sync');
var browserSyncSpa = require('browser-sync-spa');

var util = require('util');

var middleware = require('./proxy');

module.exports = function(options) {

  function browserSyncInit(baseDir, browser) {
    browser = browser === undefined ? 'default' : browser;

    var routes = null;
    if(baseDir === options.src || (util.isArray(baseDir) && baseDir.indexOf(options.src) !== -1)) {
      routes = {
        '/bower_components': 'bower_components'
      };
    }

    var server = {
      baseDir: baseDir,
      routes: routes
    };

    if(middleware.length > 0) {
      server.middleware = middleware;
    }

    browserSync.instance = browserSync.init({
      startPath: '/',
      server: server,
      browser: browser,
      online: false,
      notify: false,
      open: false,
      ui: false
    });
  }

  browserSync.use(browserSyncSpa({
    selector: '[ng-app]'// Only needed for angular apps
  }));

  gulp.task('serve', ['watch'], function () {
    browserSyncInit([options.tmp + '/serve', options.src]);
  });

  gulp.task('serve:dist', ['build'], function () {
    browserSyncInit(options.dist);
  });

  gulp.task('serve:e2e', ['inject'], function () {
    browserSyncInit([options.tmp + '/serve', options.src], []);
  });

  gulp.task('serve:e2e-dist', ['build'], function () {
    browserSyncInit(options.dist, []);
  });
};

还有我当前的gulp/watch.js,默认由gulp-angular生成:

'use strict';

var gulp = require('gulp');
var browserSync = require('browser-sync');

function isOnlyChange(event) {
  return event.type === 'changed';
}

module.exports = function(options) {
  gulp.task('watch', ['markups', 'inject'], function () {

    gulp.watch([options.src + '/*.html', 'bower.json'], ['inject']);

    gulp.watch([
      options.src + '/app/**/*.css',
      options.src + '/app/**/*.less'
    ], function(event) {
      if(isOnlyChange(event)) {
        gulp.start('styles');
      } else {
        gulp.start('inject');
      }
    });

    gulp.watch(options.src + '/app/**/*.js', function(event) {
      if(isOnlyChange(event)) {
        gulp.start('scripts');
      } else {
        gulp.start('inject');
      }
    });

    gulp.watch(options.src + '/app/**/*.jade', ['markups']);

    gulp.watch(options.src + '/app/**/*.html', function(event) {
      browserSync.reload(event.path);
    });
  });
};

最佳答案

以下是弃用 BrowserSync 以支持 gulp-connect 的方法,一个简单稳定的 Gulp 插件,用于运行网络服务器(使用 LiveReload)。

新的gulp/server.js:

'use strict';

var gulp = require('gulp');
var util = require('util');
var connect = require('gulp-connect');

module.exports = function(options) {

  function createServerTask(name, pre, root) {
    gulp.task(name, pre, function() {
      connect.server({
        root: root,
        port: 3000,
        debug: true,
        livereload: true
      });
    });
  }

  createServerTask( 'serve', ['watch'], [ options.tmp+'/serve', options.src, './' ]);

  createServerTask( 'serve:dist', ['build'], [ options.dist ]);

  createServerTask( 'serve:e2e', ['inject'], [ options.tmp+'/serve', options.src, './' ]);

  createServerTask( 'serve', ['watch'], [ options.tmp+'/serve', options.src, './' ]);

  createServerTask( 'serve:e2e-dist', ['build'], [ options.dist ]);

};

然后将 gulp/watch.js 中的 BrowserSync 重新加载替换为:

gulp.src('./app/*.html')
  .pipe(connect.reload());

关于javascript - Gulp.js 在没有 browserSync 的情况下提供 src 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30540092/

相关文章:

javascript - Aurelia中输入的控制值

javascript - 如何在 body 上制作 Div

javascript - 如何使用客户端的凭据从 Node 后端查询 firebase

Node.js 中的 MySQL 隔离级别。连接中的每个查询是隔离的还是每个池都是隔离的?

javascript - ES6 导入并要求无法与 gulp/browserify/babelify 正常工作

javascript - Gulp 二级 Assets

javascript - D3 plus 将文本包裹在圆圈中

javascript - p5.j​​s:当我的鼠标悬停在正在处理的草图中的不同元素上时,如何使文本出现?

android - 当应用程序关闭或未运行时,Android 上的 Cordova 推送插件无法工作

node.js - gulp.watch 任务抛出错误 : (FSEvents. 框架)FSEventStreamStart:register_with_server:错误