发生错误的Guard或guard-uglify不会重新运行

刚刚开始运行Guard,我遇到了一个奇怪的问题。 只要我将多个文件添加到concat和uglify中,uglifier就会一直触发。 我必须按^ C才能让它停止并抛出以下错误:

ERROR - Guard::Uglify failed to achieve its , exception was: ExecJS::RuntimeError: /Users/joe/.rvm/gems/ruby-1.9.3-p194/gems/execjs-1.4.0/lib/execjs/external_runtime.rb:142:in `exec_runtime' /Users/joe/.rvm/gems/ruby-1.9.3-p194/gems/execjs-1.4.0/lib/execjs/external_runtime.rb:28:in `block in exec' /Users/joe/.rvm/gems/ruby-1.9.3-p194/gems/execjs-1.4.0/lib/execjs/external_runtime.rb:41:in `compile_to_tempfile' /Users/joe/.rvm/gems/ruby-1.9.3-p194/gems/execjs-1.4.0/lib/execjs/external_runtime.rb:27:in `exec' /Users/joe/.rvm/gems/ruby-1.9.3-p194/gems/uglifier-1.3.0/lib/uglifier.rb:100:in `compile' /Users/joe/.rvm/gems/ruby-1.9.3-p194/gems/guard-uglify-0.1.0/lib/guard/uglify.rb:23:in `run_on_change' /Users/joe/.rvm/gems/ruby-1.9.3-p194/gems/guard-1.7.0/lib/guard/runner.rb:99:in `block in run_supervised_task' /Users/joe/.rvm/gems/ruby-1.9.3-p194/gems/guard-1.7.0/lib/guard/runner.rb:97:in `catch' /Users/joe/.rvm/gems/ruby-1.9.3-p194/gems/guard-1.7.0/lib/guard/runner.rb:97:in `run_supervised_task' /Users/joe/.rvm/gems/ruby-1.9.3-p194/gems/guard-1.7.0/lib/guard/runner.rb:146:in `block in run_first_task_found' /Users/joe/.rvm/gems/ruby-1.9.3-p194/gems/guard-1.7.0/lib/guard/runner.rb:144:in `each' /Users/joe/.rvm/gems/ruby-1.9.3-p194/gems/guard-1.7.0/lib/guard/runner.rb:144:in `run_first_task_found' /Users/joe/.rvm/gems/ruby-1.9.3-p194/gems/guard-1.7.0/lib/guard/runner.rb:79:in `block in run_on_changes' /Users/joe/.rvm/gems/ruby-1.9.3-p194/gems/guard-1.7.0/lib/guard/runner.rb:175:in `block (3 levels) in scoped_guards' /Users/joe/.rvm/gems/ruby-1.9.3-p194/gems/guard-1.7.0/lib/guard/runner.rb:174:in `each' /Users/joe/.rvm/gems/ruby-1.9.3-p194/gems/guard-1.7.0/lib/guard/runner.rb:174:in `block (2 levels) in scoped_guards' /Users/joe/.rvm/gems/ruby-1.9.3-p194/gems/guard-1.7.0/lib/guard/runner.rb:173:in `catch' /Users/joe/.rvm/gems/ruby-1.9.3-p194/gems/guard-1.7.0/lib/guard/runner.rb:173:in `block in scoped_guards' /Users/joe/.rvm/gems/ruby-1.9.3-p194/gems/guard-1.7.0/lib/guard/runner.rb:172:in `each' /Users/joe/.rvm/gems/ruby-1.9.3-p194/gems/guard-1.7.0/lib/guard/runner.rb:172:in `scoped_guards' /Users/joe/.rvm/gems/ruby-1.9.3-p194/gems/guard-1.7.0/lib/guard/runner.rb:72:in `run_on_changes' /Users/joe/.rvm/gems/ruby-1.9.3-p194/gems/guard-1.7.0/lib/guard.rb:141:in `block (2 levels) in setup_listener' /Users/joe/.rvm/gems/ruby-1.9.3-p194/gems/guard-1.7.0/lib/guard.rb:365:in `block in within_preserved_state' :10:in `synchronize' /Users/joe/.rvm/gems/ruby-1.9.3-p194/gems/guard-1.7.0/lib/guard.rb:362:in `within_preserved_state' /Users/joe/.rvm/gems/ruby-1.9.3-p194/gems/guard-1.7.0/lib/guard.rb:140:in `block in setup_listener' /Users/joe/.rvm/gems/ruby-1.9.3-p194/gems/listen-0.7.3/lib/listen/listener.rb:212:in `call' /Users/joe/.rvm/gems/ruby-1.9.3-p194/gems/listen-0.7.3/lib/listen/listener.rb:212:in `on_change' /Users/joe/.rvm/gems/ruby-1.9.3-p194/gems/listen-0.7.3/lib/listen/listener.rb:221:in `block in initialize_adapter' /Users/joe/.rvm/gems/ruby-1.9.3-p194/gems/listen-0.7.3/lib/listen/adapter.rb:198:in `call' /Users/joe/.rvm/gems/ruby-1.9.3-p194/gems/listen-0.7.3/lib/listen/adapter.rb:198:in `report_changes' /Users/joe/.rvm/gems/ruby-1.9.3-p194/gems/listen-0.7.3/lib/listen/adapter.rb:210:in `poll_changed_dirs' /Users/joe/.rvm/gems/ruby-1.9.3-p194/gems/listen-0.7.3/lib/listen/adapters/darwin.rb:38:in `block in start' 

请注意,代码仍然是正确的,并且一切正常……但是一旦我点击^ C uglify将不会再次触发。 就像我说的那样,我是Guard的新手,所以我不知道我做错了什么,如果这是一个关于guard-uglify或Ruby的东西或者只是与Guard本身有关的错误。

几个笔记:

  1. 是的,所有gem都是最新的
  2. Ruby 1.9.3
  3. Mac OSX 10.8.3

另外,这是我的Guardfile:

 guard :concat, type: "js", files: %w(vendor/jquery-1.9.1.min vendor/handlebars vendor/jquery.iosslider.min app), input_dir: "js", output: "js/s.min" guard 'uglify', :destination_file => "js/s.min.js" do watch (%r{js/s.min.js}) end 

任何帮助非常感谢

uglifier插件配置为写入正在监视更改的同一文件,从而创建无限循环。 您需要使用不同的文件:

 guard :concat, { type: 'js', files: %w(vendor/jquery-1.9.1.min vendor/handlebars vendor/jquery.iosslider.min app), input_dir: 'js', output: 'js/s' } guard 'uglify', :destination_file => 'js/s.min.js' do watch (%r{js/s.js}) end 

编辑

由于已经报告了后续错误,我看了一下该插件并认识到它已经更新,但没有新的gem被推送到RubyGems。 所以看起来创作对插件失去了兴趣。 您可以通过更改Gemfile直接从GitHub获取最新的插件:

gem 'guard-uglify', github: 'pferdefleisch/guard-uglify'

这使它可以在我的机器上运行。 说实话,我的工具链中没有那个未完成且没有维护的插件。 你可以通过使用guard-jammit或guard-process来实现同样的目的 。