module WebpackerHelper

Public Instance Methods

compile_once() click to toggle source
# File lib/generators/katapult/basics/templates/features/support/webpacker.rb, line 3
                def compile_once
  digest_file = Rails.root.join("tmp/webpacker_#{Rails.env}_digest")

  packable_contents = Dir[Webpacker.config.source_path.join('**/*')]
    .sort
    .map { |filename| File.read(filename) if File.file?(filename) }
    .join
  digest = Digest::SHA256.hexdigest(packable_contents)

  return if digest_file.exist? && digest_file.read == digest

  # Base process compiles
  if ENV['TEST_ENV_NUMBER'].to_i < 1
    output_path = Webpacker.config.public_output_path
    FileUtils.rm_r(output_path) if File.exist?(output_path)
    puts "Removed Webpack output directory #{output_path}"

    Webpacker.compile or raise 'Compilation failed'

    digest_file.write(digest)

  # Parallel processes wait for compilation
  else
    loop do
      break if digest_file.exist? && digest_file.read == digest
      sleep 0.1
    end
  end
end