在VM中运行的node.js脚本看不到从主OS进行的文件夹更改

Ale*_*nov 15 virtualbox node.js vagrant gruntjs

我有以下设置:

  1. Vagrant创建的Ubuntu Lucid 32 VM .
  2. 使用一些CSS和JS文件启动Vagrant的文件夹.该文件夹安装在VM的地址/ vagrant /中.
  3. 带有监视任务的grunt.js从VM启动,监视css和js文件的变化.更改文件后,必须将此文件连接到一个css和一个js文件.

问题:grunt.js中的监视任务没有看到已安装文件夹中的更改.

如果我更改VM内的文件,请正常查看任务.如果我不是从虚拟框启动grunt.js,而是从主操作系统启动它也可以.在Mac OS和Windows 7中尝试过.

只有问题发生,然后从VM启动任务,并从主OS更改文件.这个问题有解决方法吗?

更新.关于我们的使用场景的一些细节,以更好地理解上下文

  1. 我们正在设计工作室,10+ peaple使用代码.
  2. 不同的人使用不同的OS.我们有:Win 7,Mc OS X和Ubuntu Linux.
  3. 我们正在努力并支持100多个不同的项目.
  4. Prjects使用不同的语言和设置:我们在自己的CMS上有PHP项目,在Yii上有PHP项目,在Django上有Python项目,还有一些node.js项目.
  5. 不同的开发人员可能会在某个时间点处理任何这些项目.
  6. 现在,每当我们需要在开发人员的计算机上进行项目工作时,我们会花费大量时间,而开发人员以前没有使用它.通常我们需要一些已经开发过它的开发人员的帮助才能使它工作.

我们想让它更直接.为此,我们尝试使用Vagrant和一些预先配置的操作系统映像.

现在项目设置如下所示:

  1. 来自git的开发人员结账项目.
  2. Developer在Terminal中打开项目文件夹.
  3. 开发人员进入'流浪汉'.
  4. 5分钟后,他完全配置并运行项目副本.

我们喜欢这种设置,大部分时间我们都没有遇到任何问题.但是在我们的node.js项目中,我们使用了一些css和js预处理器,并且喜欢实时更新它们的文件.并且在初始帖子上存在问题.

可以使用ssh VM访问文件以及VM内部项目文件的解决方案,但是它们无法解决基本问题(在运行不同操作系统的开发人员组中快速轻松地设置大量项目)

has*_*sin 7

文件/路径观察者依赖于操作系统的低级设施,如Linux上的inotify或BSD系统上的kqueue.这些机制直接与文件系统驱动程序一起工作,它们不会在网络安装上看到更改.如果您的脚本可以在虚拟操作系统上运行,那么您可能会改变共享的方向.而不是从来宾操作系统中深远的主机操作系统的共享文件夹的,请在来宾操作系统真正的文件夹(其中实际行动发生),并从主机OS达到它来编辑文件.通过这种方式,您的客户操作系统将像其在生产环境中一样工作,这是Vagrant所承诺的; 但显然没有兑现.

我个人使用Sublime Text 2编辑器和SFTP插件.在此设置中,我保留两份文件副本并处理主机操作系统上的文件.每当我编辑/添加文件时,我的编辑器会快速将其上传到服务器,即客户操作系统.当我转移到生产服务器时,我仍然可以使用相同的方法,这比使用共享文件夹更好.

在转换到Sublime作为我的主编之前,我已经使用Vim超过十年了.那时,我使用WinSCP作为SFTP客户端,而不是使用Vim的sftp/ssh设备,这些设备总是有问题.配置正确之后,只要你双击服务器上的文件,它会打开它你选择的编辑器,只要你保存文件,WinSCP赋予自动上传到服务器.这与Sublime的SFTP插件非常接近; 但是,本地(主机操作系统)版本的文件是在WinSCP即时创建的临时文件夹上创建的.

Sublime的SFTP插件的方法,在两个系统上都有重复的文件夹,更符合我的需求,因为我还在主机操作系统上运行SpiderOak作为我的备份解决方案.我喜欢它,因为它保留了文件的版本历史.我将其设置为每小时检查一次更改,而不是经常观察,以便在系统出现故障的情况下使其执行更顺畅,冒失去一小时的工作.一切都在这个设置中完美运行,我已经多次使用它的旧版本功能,这使我免于很多苦差事和失去工作.

总而言之,如果您想继续处理共享文件夹,您将要在客户操作系统(您的Ubuntu)上安装和配置Samba/NFS/FTP服务器并共享文件夹.然后,您将以访问任何其他共享远程文件夹的方式从主机操作系统(Mac/Win7)访问网络共享.如果您的使用和需求与我的相似,那么我强烈建议您使用Sublime + SFTP或YourEditor和WinSCP或类似的SFTP客户端.

更新:基于特别是总结为"如果我在VM中更改文件,观察任务正常工作的症状.如果我不是从虚拟框启动grunt.js,而是从主操作系统启动它也可以." 在这个问题中,我对grunt.js如何监视文件和文件夹做了错误的假设.我以为它是使用node的fs.*watch函数; 但正如pyfunc展示了一项做得好的研究,我的假设是错误的.虽然这不会影响我提出的任何建议的结果,但这是一个错误的技术信息我必须道歉.因此,看起来问题是由于在远程计算机上进行修改时未正确设置文件的修改时间,这可能导致vboxf对于依赖于文件修改时间的此类使用无用.