0

Guard の実行を開始したところ、奇妙な問題が発生しました。concat と uglify に複数のファイルを追加するとすぐに、uglifier が起動し続けます。停止するには ^C を押す必要があり、次のエラーがスローされます。

 ERROR - Guard::Uglify failed to achieve its <run_on_change>, 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'
 <internal:prelude>: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. はい、すべての宝石は最新です
  2. ルビー1.9.3
  3. Mac OS X 10.8.3

また、ここに私のガードファイルがあります:

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

どんな助けでも大歓迎です

4

1 に答える 1

3

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

編集

その後エラーが報告されたので、プラグインを確認したところ、更新されていることがわかりましたが、RubyGems に新しい gem がプッシュされていません。そのため、作成者はプラグインへの関心を失ったようです。以下を変更することで、最新のプラグインを GitHub から直接取得できますGemfile

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

これにより、私のマシンで動作します。正直なところ、ツールチェーンに未完成でメンテナンスされていないプラグインはありません。Guard-jammitまたはguard-processを使用して同じことを実現できます。

于 2013-04-10T20:59:44.087 に答える