$stdout.sync = true

def ensure_log_goes_to_stdout

old_logger = Webpacker.logger
Webpacker.logger = ActiveSupport::Logger.new(STDOUT)
yield

ensure

Webpacker.logger = old_logger

end

def enhance_assets_precompile

Rake::Task["assets:precompile"].enhance do
  unless Rake::Task.task_defined?("yarn:install")
    # For Rails < 5.1
    Rake::Task["webpacker:yarn_install"].invoke
  end
  Rake::Task["webpacker:compile"].invoke
end

end

namespace :webpacker do

desc "Compile JavaScript packs using webpack for production with digests"
task compile: ["webpacker:verify_install", :environment] do
  ensure_log_goes_to_stdout do
    if Webpacker.compile
      # Successful compilation!
    else
      # Failed compilation
      exit!
    end
  end
end

end

# Compile packs after we've compiled all other assets during precompilation if Rake::Task.task_defined?(“assets:precompile”)

skip_webpacker_precompile = %w(no false n f).include?(ENV["WEBPACKER_PRECOMPILE"])
enhance_assets_precompile unless skip_webpacker_precompile

else

Rake::Task.define_task("assets:precompile" => ["webpacker:yarn_install", "webpacker:compile"])

end