这花了我很多年才找到,但似乎无法找到解决方案。使用vagrant我运行一个运行grunt / karma的Fedora 20来宾。我在主机上编辑的源代码但是当我保存grunt时没有检测到更改,因此没有进行任何测试。
认为这是一个配置问题所以在这里尝试了许多组合而没有成功。最后,我向访客vagrang ssh
打开了第二个ssh,并更改了另一个ssh终端echo " " >> app/js/app.js
中的文件,看到现在grunt / karma检测到更改并再次运行测试。
因为它没有x窗口或任何我正在使用PhantomJS运行测试。另一个问题是我必须在httpd.conf中设置EnableSendfile off
以防止Apache在从共享中提供文本文件时发送垃圾(这是我的主机项目和客户机中的web根目录)。我的猜测是,可能需要对节点执行另一个设置,以便它检测主机对共享上的文件所做的更改。它正在使用virtualBox共享。
之前是否有人经历过这种情况并且有解决方案吗?似乎主机更改共享文件不会触发grunt / karma正在侦听的某些事件,表明文件已更改。
[更新]
尝试过NFS和rsync共享,但NFS根本不起作用,rsync似乎只是在启动时同步。
[更新]
作为临时解决方案,我必须手动告诉文件在ssh终端中更新:
#start grunt and give me back command:
grunt &
#when I update a file tell grunt it's updated
touch -d "now" test/unit/loginSpec.js
有趣的是,如果我更新app/js/login.js
并告诉grunt test/unit/loginSpec.js
已更新,它将再次运行测试但使用旧的login.js即使已更改cat app/js/login.js
也会显示更改。如果不是这样,解决方案将设置焦点到右侧窗口和2次击键(向上箭头并输入)
答案 0 :(得分:3)
这源于vboxsf(Virtualbox“分片文件夹”文件系统)同步中的已知错误,此问题的解决方案只能由Virtualbox团队实施。人们与Gulp,Guard或Meteor.js有类似的问题(仅举几例)。
您可以使用一些解决方法......
Vagrant 1.5有一个自动同步工具( rsync-auto ),可以监视指定的文件夹,并在您实时更改时自动同步更改。它使用特定于系统的API来检测文件更改,而不是轮询文件系统......
所以你应该在vagrant文件中定义你的共享。即:
config.vm.synced_folder ".", "/vagrant", type: "rsync"
并打开另一个终端会话:
$ vagrant rsync-auto
但是,仅此一项并不是效率最高的选项。在这里,您可以找到 gruntfile 和vagrant plugin,它们可以帮助您更快更顺畅地运行rsync ......
希望它有所帮助!