这个问题让我费了很长时间,但似乎找不到解决方法。我使用Vagrant运行一个Fedora 20的虚拟机,其中运行着grunt/karma。我在主机上编辑代码,但当我保存后,grunt却没有检测到变化,因此无法进行测试。
我想这是一个配置问题,因此尝试了很多组合,但都没有成功。最后,我在虚拟机中打开了第二个ssh
由于虚拟机没有任何X窗口或其他界面,所以我使用PhantomJS运行测试。另一个问题是,我必须在httpd.conf中设置
有人遇到过这种情况吗?是否有解决方法?似乎主机机器对共享文件进行更改时,没有触发grunt/karma正在监听的某个事件来表明文件已经更改。
【更新】
尝试了NFS和rsync共享,但NFS根本不起作用,rsync似乎只会在启动时同步一次。
【更新】
作为临时解决方法,我必须手动告诉虚拟机中的文件已经更新:
有趣的是,如果我更新了
我想这是一个配置问题,因此尝试了很多组合,但都没有成功。最后,我在虚拟机中打开了第二个ssh
vagrant ssh
,并在另一个ssh终端中更改了文件echo " " >> app/js/app.js
,发现现在grunt/karma检测到了变化并再次运行测试。由于虚拟机没有任何X窗口或其他界面,所以我使用PhantomJS运行测试。另一个问题是,我必须在httpd.conf中设置
EnableSendfile off
,以防止Apache在从共享目录(我的项目在主机上,web根目录在虚拟机中)提供文本文件时发送垃圾信息。我猜测可能还需要对node进行其他设置,以便它能够检测到主机上对共享文件的更改。它正在使用VirtualBox共享。有人遇到过这种情况吗?是否有解决方法?似乎主机机器对共享文件进行更改时,没有触发grunt/karma正在监听的某个事件来表明文件已经更改。
【更新】
尝试了NFS和rsync共享,但NFS根本不起作用,rsync似乎只会在启动时同步一次。
【更新】
作为临时解决方法,我必须手动告诉虚拟机中的文件已经更新:
#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
显示了更改。如果不是这样的话,解决方案就是将焦点设置为正确的窗口,并按下两个按键(上箭头和Enter)