guard-coffee似乎导致guard-shell执行两次

时间:2012-10-25 17:48:22

标签: ruby coffeescript guard

我有防守(红宝石宝石)设置,并且它似乎在我的Mac上工作,并设置了一个防护 - 咖啡和防护 - 外壳似乎工作正常。这是我的Guardfile下面的相关部分

guard 'coffeescript', :input => 'src/javascripts', :output => 'public/javascripts'
guard 'shell' do
    watch( %r{^public/.+\.(js|css)$} ) do |m|
        puts m.inspect
        if m[1] == 'js'
            puts 'a js is new!'
        else
            puts 'a css is new!'
        end
        puts %x{ echo #{File.mtime(m[0])} }
    end
end

如果编辑coffeescript文件,似乎输出'a js is new'两次。使用调试它似乎在

之后运行
13:39:23 - DEBUG - Hook :run_on_changes_begin executed for Guard::CoffeeScript
13:39:23 - INFO - Compile src/javascripts/blah.coffee
13:39:23 - INFO - 01:39:23 PM Successfully generated public/javascripts/blah.js
["public/javascripts/blah.js", "js"]
a js is new!

13:39:23 - DEBUG - Hook :run_on_changes_end executed for Guard::CoffeeScript
["public/javascripts/blah.js", "js"]
a js is new!

如果直接编辑bl​​ah.js文件,它似乎只会触发一次。我对钩子如何工作感到有点困惑,我可以从另一个守卫那里锁上钩子吗?我应该在coffeescript后卫的回调中运行此代码吗?我试图使用组,如果我在一个组中只做shell部分,并且不想在我使用回调的情况下重复咖啡保护。

关于如何在咖啡火灾时停止触发炮弹守卫的任何想法?

1 个答案:

答案 0 :(得分:1)

在Guard 1.0.0之前,从Guard插件创建和更新的新文件未触发其他插件的后续文件更改。这是一个问题,例如CoffeeScript和LiveReload插件:当JavaScript文件更新后,LiveReload没有重新加载文件。作为一种解决方法,我添加了一些manual file trigger code。使用Listen gem已删除此限制,因此CoffeeScript插件会两次触发文件更改。

removed在我的主分支上。在发布新宝石之前,你能试一试吗?您可以通过添加:

使用我的主分支轻松完成此操作

gem 'guard-coffeescript', :github => 'netzpirat/guard-coffeescript', :branch => 'master'

Gemfile。当它工作正常时,我会尽快发布新的宝石。