2012-10-25 53 views
0

我有后卫(红宝石宝石)的设置和工作似乎在我的Mac和后卫咖啡和保护壳设立保护似乎很好地工作。这里是我的Guardfile以下后卫咖啡似乎导致后卫-shell执行两次

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 

这似乎是输出的相关章节“一个js是新的”两次,如果我编辑的CoffeeScript文件。随着它的调试似乎后

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! 

运行它似乎只火一次,如果我编辑blah.js文件直接。我对钩子的工作方式有点困惑,我能否把它锁在另一名后卫的钩子上?我是否应该在coffeescript后卫的回调中运行此代码?我正在尝试使用群组,并且只在群组中使用shell部分,而不想在使用回调的情况下重复使用咖啡卫兵。

我如何能停止触发壳后卫两次咖啡一个火灾时,有什么想法?

回答

1

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

removed它在我的主分支。在我发布新宝石之前,您可以试一试吗?您可以通过添加容易使用我的主分支做到这一点:

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

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

+0

这似乎是伎俩!感谢您的跟进:)我非常喜欢守卫,我希望尽快挖掘更多内容。另外,因为我刚刚做了一个“捆绑更新”,所以我也放松了1.5.1的防守,如果这也影响了任何事情。我在这个周末旅行,或者我会早点看到这一点。 – Rockshandy