关于javascript:如何禁用BrowserSync的跨设备操作镜像功能? (GhostMode)

How to disable cross-device action mirroring functionality of BrowserSync? (GhostMode)

我们的团队将gulp-angular生成器与yeoman一起使用来构建我们的Web应用程序。它使用browsersync处理我们想要的实时重载。但是,我们刚刚部署到开发服务器,现在当两个开发人员同时使用gulp serve命令时,他们两个都显示在同一窗口中(即,一个开发人员在一个窗口中键入,它显示在另一个开发人员的窗口中)以及)。我相信这是由于BrowserSync的跨设备测试功能引起的,但是我对如何禁用此功能一无所知。如果有人知道如何执行此操作(最好不禁用我们的实时重新加载功能),请告诉我!

下面是gulp文件夹中我的server.js文件的代码,该代码与gulp-angular生成器附带的代码相同,因此希望这会对某些人有所帮助。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
'use strict';

var path = require('path');
var gulp = require('gulp');
var conf = require('./conf');

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

var util = require('util');

var proxyMiddleware = require('http-proxy-middleware');

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

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

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

  /*
   * You can add a proxy to your backend by uncommenting the line bellow.
   * You just have to configure a context which will we redirected and the target url.
   * Example: $http.get('/users') requests will be automatically proxified.
   *
   * For more details and option, https://github.com/chimurai/http-proxy-middleware/blob/v0.0.5/README.md
   */

  // server.middleware = proxyMiddleware('/users', {target: 'http://jsonplaceholder.typicode.com', proxyHost: 'jsonplaceholder.typicode.com'});

  browserSync.instance = browserSync.init({
    startPath: '/',
    server: server,
    browser: browser
  });
}

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

gulp.task('serve', ['watch'], function () {
  browserSyncInit([path.join(conf.paths.tmp, '/serve'), conf.paths.src]);
});

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

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

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

面对相同的问题,您可以简单地在init选项中将ghost模式设置为false。

1
2
3
4
5
6
     browserSync.instance = browserSync.init({
      startPath: '/',
      ghostMode: false,
      server: server,
      browser: browser
     });

无需更改default.config.js:)


很抱歉回答我自己的问题,但是几天后我找到了答案,因为没有人回答过这个问题,所以我认为我会发布我的解决方案。

我们遇到的问题似乎是由BrowserSync中称为" GhostMode "的功能引起的,该功能可在设备之间镜像单击和滚动操作以及多个表单操作。禁用它非常简单:查找您的BrowserSync配置文件(对我而言,该文件位于root / node_modules / browser-sync / lib / default.config.js)并打开它。在该文件中搜索类似于以下内容的文件:

1
2
3
4
5
6
7
8
9
ghostMode: {
    clicks: true,
    scroll: true,
    forms: {
        submit: true,
        inputs: true,
        toggles: true
    }
},

并对其进行更改,使其显示为ghostMode: false,

这已解决了我们的问题,希望对其他遇到相同问题的人有所帮助。


如果通过命令行启动Browsersync,它将提供两个不同的地址:

  • 选择UI /管理控件的地址

    Browsersync

    1
    2
    3
    4
    5
    6
    7
    8
    9
    {
     "server": {
       "baseDir":"src",
       "routes": {
         "/node_modules":"node_modules"
        }
      },
     "ghostMode": false
    }

  • 对于JHIPSTER应用程序,只需添加ghostMode: false,

    1
    2
    3
    4
    5
    6
    7
    8
     new BrowserSyncPlugin({
            ghostMode: false,
            host: 'localhost',
            port: 9000,
            proxy: {
                target: 'http://localhost:9060',
                ws: true
            }