如何将Guard监视文件放在子目录中

时间:2013-08-28 16:57:32

标签: ruby coffeescript guard

我正在尝试让Guard将我的CoffeeScript文件编译为JS文件,然后让Juicer合并并缩小它们。我使用tmp目录来存储中间JS文件。据我所知,这应该有效,但事实并非如此:

guard :coffeescript, :input => "src/coffee", :output => "tmp"

guard :shell do
    watch %r{^tmp/.+\.js$} do
        system 'juicer', 'merge', 'tmp/app.js', '-sfo', 'js/app.js'
    end
end
每次触摸时,

CoffeeScript文件都会正确编译到tmp目录中,但shell后卫不会触发。

--debug启动后卫并手动更改tmp中的一个JS文件,我在终端中没有得到任何调试行。似乎这些文件没有受到监控。

$ guard --debug
18:53:51 - DEBUG - Command execution: which notify-send
18:53:51 - DEBUG - Command execution: emacsclient --eval '1' 2> /dev/null || echo 'N/A'
18:53:51 - INFO - Guard is using TerminalTitle to send notifications.
18:53:51 - DEBUG - Command execution: hash stty
18:53:51 - DEBUG - Guard starts all plugins
18:53:51 - DEBUG - Hook :start_begin executed for Guard::CoffeeScript
18:53:51 - DEBUG - Hook :start_end executed for Guard::CoffeeScript
18:53:51 - DEBUG - Hook :start_begin executed for Guard::Shell
18:53:51 - DEBUG - Hook :start_end executed for Guard::Shell
18:53:51 - INFO - Guard is now watching at '/home/tobia/my_project'
18:53:51 - DEBUG - Start interactor
[1] guard(main)> 

^^^如果我此时修改/home/tobia/my_project/tmp中的JS文件,则没有任何反应。

我正在使用Debian stable的Ruby 1.9.1,与sudo gem install一起安装的Guard 1.8.2和Guard-shell 0.5.1

1 个答案:

答案 0 :(得分:3)

经过一些调查后,我意识到tmp位于默认的ignore列表中,因此这就是为什么Guard不会从生成的JavaScript文件中获取更改的原因。要解决这个问题,你可以......

1。从忽略的目录列表中删除tmp

ignore! /.git/

guard :coffeescript, :input => "src/coffee", :output => "tmp"

guard :shell do
  watch %r{^tmp/.+\.js$} do
    system 'juicer', 'merge', 'tmp/app.js', '-sfo', 'js/app.js'
  end
end

2。将JavaScript编译到不同的目录

guard :coffeescript, :input => "src/coffee", :output => "src/js"

guard :shell do
  watch %r{^src/.+\.js$} do
    system 'juicer', 'merge', 'tmp/app.js', '-sfo', 'js/app.js'
  end
end