defmodule Mix.Tasks.Enguia.Build do @shortdoc "Builds priv/static/enguia.js from assets/js/enguia/" @moduledoc """ Bundles the Enguia JavaScript sources into `priv/static/enguia.js`. $ mix enguia.build $ mix enguia.build --watch $ mix enguia.build --minify """ use Mix.Task @impl Mix.Task def run(args) do {opts, _, _} = OptionParser.parse(args, switches: [watch: :boolean, minify: :boolean]) script = cond do opts[:watch] -> "build:watch" opts[:minify] -> "build:minified" true -> "build" end Mix.shell().info("Running npm run #{script}...") case System.cmd("npm", ["run", script], stderr_to_stdout: true) do {output, 0} -> Mix.shell().info(output) Mix.shell().info("Done.") {output, code} -> Mix.shell().error(output) Mix.raise("enguia.build failed with exit code #{code}") end end end