【问题标题】:Browser-sync not reloading for file event add/change浏览器同步未重新加载文件事件添加/更改
【发布时间】:2017-02-20 22:20:56
【问题描述】:

我在 webpack 中使用浏览器同步,因为构建中有一些文件 webpack 没有规则。出于某种原因,当我的图像文件被修改/添加/删除时,浏览器同步不会触发重新加载?

在终端中记录 [BS] File event [add] : image.png[BS] File event [change] : image.png

但与我编辑 .html 文件时不同,它不是说 [BS] Reloading Browsers...

这是我的浏览器同步初始化:

browserSync.init({ files: ['./**.html', './**.png'] });

【问题讨论】:

    标签: javascript node.js webpack browser-sync


    【解决方案1】:

    事实证明,我需要将自定义事件处理程序传递给 browserSync.init 文件选项,该选项使用 reload() 响应任何类型的事件

    示例:

    browserSync.init({
            files: [
                {
                    match: ['./img/**'],
                    fn:    function (event, file) {
                        this.reload()
                    }
                }
            ]
        })
    

    【讨论】:

    • --no-inject-changes 参数会为你做吗?
    【解决方案2】:

    默认情况下,BroswerSync 仅侦听 change 事件。 watchEvents 选项可以更改为收听文件的adding。添加addunlinkaddDirunlinkDir监听文件和目录的添加和删除。

    browserSync.init({
        files       : [ './img/**' ]
        watchEvents : [ 'change', 'add', 'unlink', 'addDir', 'unlinkDir' ]
    });
    

    【讨论】:

      【解决方案3】:

      查看浏览器同步代码库后,BS 将执行页面刷新(也称为浏览器重新加载)或注入文件更改。 BS 对具有以下扩展名的文件执行注入:“css”、“gif”、“jpg”、“jpeg”、“png”、“svg”、“webp”、“map”。

      如果您想对所有文件类型禁用代码注入,请将 injectChanges 配置设置为 false。或者添加--no-inject-changes 命令行标志。此选项将关闭所有文件类型的注入。

      如果您仍希望允许对上面列出的文件类型的子集进行代码注入,请移除 injectChanges 配置或将其设置为 false。此外,删除 --no-inject-changes(如果已设置)。然后在files 数组中为需要重新加载浏览器的文件添加条目。例如:

      files: [
          {
              match: ['./img/**'],
              fn:    function (event, file) {
                  this.reload()
              },
          },
      ],
      

      【讨论】:

        【解决方案4】:

        我遇到了同样的问题,对我有用的解决方案是 injectChanges:false

        查看文档页面:https://www.browsersync.io/docs/options#option-injectChanges

        所以试试这个:

        browserSync.init({
          injectChanges: false,
          files: ['./**.html', './**.png']
        });
        

        对于那些使用 Laravel Mix 的人(就像我一样):

        mix.browserSync({
          injectChanges: false,
          files: ['./**.html', './**.png']
        });
        

        【讨论】:

          【解决方案5】:

          如果您想查看当前目录中的所有 HTML 文件,请使用 ./*.html*.html

          **——这是子目录; * — 目录中的文件

          例子:

          • ./**/*.html — 查看所有扩展名为 html 的子目录文件
          • app/js/*.js — 在目录 app/js 中查看所有扩展名为 js 的文件

          更多关于Browsersync options的信息

          【讨论】:

          • 你看到我发布的浏览器同步 init() 了吗?它已经 正在 观看 html 文件,并且它还在检测 png 文件,只是没有重新加载浏览器 './**.html', './**.png' - 当 same 中有一个 .html 和一个 .png 时目录,如果我编辑 .html 文件,浏览器同步会重新加载浏览器,但是如果我编辑 .html 文件旁边的 .png,它不会重新加载浏览器,它只会记录 [BS] File event [change] : image.png 所以它检测到png 和 html 文件在同一个文件夹中,它只是不会触发浏览器重新加载 png,就像 html 一样
          • 您可以添加有问题的文件结构吗?
          • 它只是根文件夹./img/ 中的一个目录,它现在包含两个用于测试目的的文件-./img/index.html./img/image.png。正如我所说,对./img/index.html 的编辑会触发浏览器重新加载,对./img/image.png 的编辑会导致浏览器同步将[BS] File event [change] : image.png 记录到终端,但与我编辑.html 时不同,它不会记录[BS] Reloading Browsers...
          猜你喜欢
          • 2015-11-11
          • 1970-01-01
          • 2016-03-26
          • 1970-01-01
          • 2017-11-08
          • 2016-12-16
          • 1970-01-01
          • 2018-03-27
          • 1970-01-01
          相关资源
          最近更新 更多