【问题标题】:BrowserSync + Gulp with Vagrant not refreshingBrowserSync + Gulp with Vagrant 不刷新
【发布时间】:2016-03-18 01:03:33
【问题描述】:

当特定类型的文件发生更改时,我正在使用带有 Gulp 的 BrowserSync 在本地计算机上实时重新加载站点。我的gulpfile 中有以下 sn-p:

gulp.task('browser-sync', function() {
    browsersync.init({
        proxy: "mySite:8080",
        files: ["./*.html", "dev/*.css"]
    });
});

当更改(和保存)上述任何类型的文件时,我会在终端中得到如下输出:

[BS] Serving files from: ./
[BS] Watching files...
[BS] File changed: index.html
[BS] File changed: dev\styles.css

网站一直按预期重新加载,但其内容并未反映所做的更改。我无法弄清楚我在这里做错了什么。任何提示表示赞赏!


更新

我忘了提到我的主机运行的是 Windows 10,而我的客户机运行的是 Ubuntu 14.04.4 LTS。 VM 提供程序是 VirtualBox。

最初,我使用默认的config.vm.synced_folder 方法。我的 vagrantfile 上有这个:

config.vm.synced_folder "/Path/To/My/Host/Website/Folder/", "/usr/nginx/html/mywebsite/"

我已经尝试过使用 NFS,配置如下:

config.vm.synced_folder "/Path/To/My/Host/Website/Folder/", "/usr/nginx/html/mywebsite/", 
:type => :nfs, 
:mount_options => ['nolock,vers=3,udp,noatime,actimeo=1']

由于我的主机运行的是 Windows,我安装了插件vagrant-winnfsd,它增加了对 NFS 的支持。但是现在 vagrant 在尝试挂载 NFS 共享文件夹时会停止。

此外,由于我在vagrant up 上收到以下错误:GuestAdditions versions on your host (5.0.16) and guest (4.3.36) do not match,因此我安装了插件vagrant-vbgues,以使VirtualBox Guest Additions 保持最新。也无济于事。 Vagrant 在尝试挂载 NFS 共享文件夹时仍处于冻结状态。

【问题讨论】:

标签: gulp vagrant browser-sync


【解决方案1】:

标题和标签表明您正在使用 Vagrant,即使您的问题中没有提及。

确保您的更改正在同步到虚拟机。查看vagrant documentation 以选择适合您情况的同步文件夹类型。他们的基本例子如下:

Vagrant.configure("2") do |config|
  # other config here

  config.vm.synced_folder "src/", "/srv/website"
end

您可以vagrant ssh 并手动检查文件以确保它们匹配,并且同步的文件夹按预期工作。

更新

根据新的信息和评论,我建议使用rsync作为共享文件夹的方法。

config.vm.synced_folder "Host/Path/", "/Guest/Path", type: "rsync",
    rsync__exclude: [ '.git', 'logs'],
    rsync__args: ["--verbose"],
    rsync__chown: false

如果 Windows 混合使用,我从未找到让 NFS 运行良好(并且性能良好)的方法。

【讨论】:

  • 最初,我使用类似的配置,但我现在正在探索 NFS。将尝试您的建议以手动检查文件,尽管我之前没有尝试过。感谢您的提示!
  • 我回到了初始配置并按照您的建议检查了文件,vagrant ssh。最奇怪的事情正在发生:例如,index.html 反映了我对编辑器所做的更改。难道是浏览器同步正在观看正确的文件,但刷新了其他文件?
  • 关于 rsync 的快速说明:它在 Vagrant 1.8.0 中不起作用(由于 1.8.1 中尚未修复的错误)。不过,有一个解决方法。举报here
【解决方案2】:

正如here 所解释的那样,问题恰好与VirtualBox 有关。由于我在 VirtualBox 中的虚拟机上运行 Nginx,解决我的问题的方法是注释掉 nginx.conf 中的 sendfile 指令,或者干脆将其设置为关闭,如下所示:

sendfile off;

herehere 报告了相同的问题。以及在 Vagrant docs 中,它指出“有一个与 sendfile 相关的 VirtualBox 错误,它可能导致文件损坏或无法更新。”

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-25
    相关资源
    最近更新 更多