0

我已经设置了警卫(红宝石宝石),并且在我的 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

如果我编辑咖啡脚本文件,这似乎会输出两次“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!

如果我直接编辑 blah.js 文件,它似乎只触发一次。我对钩子的工作方式有点困惑,我可以从另一个守卫那里打钩吗?我应该在咖啡脚本守卫的回调中运行这段代码吗?我试图使用组,并且只在我在一个组中时才做外壳部分,并且不想在我使用回调的情况下重复咖啡卫士。

关于如何在咖啡一开火时停止触发两次外壳防护的任何想法?

4

1 回答 1

1

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

我在我的主分支上删除了它。在我发布新的 gem 之前,你能试一试吗?您可以通过添加以下内容使用我的主分支轻松完成此操作:

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

到你的Gemfile. 当它工作正常时,我会尽快发布一个新的 gem。

于 2012-10-26T06:21:45.857 回答