lib/tasks/jsbundling/build.rake in jsbundling-rails-1.1.2 vs lib/tasks/jsbundling/build.rake in jsbundling-rails-1.2.0

- old
+ new

@@ -1,28 +1,49 @@ namespace :javascript do desc "Install JavaScript dependencies" task :install do - unless system "yarn install" - raise "jsbundling-rails: Command install failed, ensure yarn is installed" + command = install_command + unless system(command) + raise "jsbundling-rails: Command install failed, ensure #{command.split.first} is installed" end end desc "Build your JavaScript bundle" build_task = task :build do - unless system "yarn build" - raise "jsbundling-rails: Command build failed, ensure `yarn build` runs without errors" + command = build_command + unless system(command) + raise "jsbundling-rails: Command build failed, ensure `#{command}` runs without errors" end end - build_task.prereqs << :install unless ENV["SKIP_YARN_INSTALL"] + + build_task.prereqs << :install unless ENV["SKIP_YARN_INSTALL"] || ENV["SKIP_BUN_INSTALL"] end -if Rake::Task.task_defined?("assets:precompile") - Rake::Task["assets:precompile"].enhance(["javascript:build"]) +def install_command + return "bun install" if File.exist?('bun.lockb') || (tool_exists?('bun') && !File.exist?('yarn.lock')) + return "yarn install" if File.exist?('yarn.lock') || tool_exists?('yarn') + raise "jsbundling-rails: No suitable tool found for installing JavaScript dependencies" end -if Rake::Task.task_defined?("test:prepare") - Rake::Task["test:prepare"].enhance(["javascript:build"]) -elsif Rake::Task.task_defined?("spec:prepare") - Rake::Task["spec:prepare"].enhance(["javascript:build"]) -elsif Rake::Task.task_defined?("db:test:prepare") - Rake::Task["db:test:prepare"].enhance(["javascript:build"]) +def build_command + return "bun run build" if File.exist?('bun.lockb') || (tool_exists?('bun') && !File.exist?('yarn.lock')) + return "yarn build" if File.exist?('yarn.lock') || tool_exists?('yarn') + raise "jsbundling-rails: No suitable tool found for building JavaScript" +end + +def tool_exists?(tool) + system "command -v #{tool} > /dev/null" +end + +unless ENV["SKIP_JS_BUILD"] + if Rake::Task.task_defined?("assets:precompile") + Rake::Task["assets:precompile"].enhance(["javascript:build"]) + end + + if Rake::Task.task_defined?("test:prepare") + Rake::Task["test:prepare"].enhance(["javascript:build"]) + elsif Rake::Task.task_defined?("spec:prepare") + Rake::Task["spec:prepare"].enhance(["javascript:build"]) + elsif Rake::Task.task_defined?("db:test:prepare") + Rake::Task["db:test:prepare"].enhance(["javascript:build"]) + end end