Skip to main content

lib/mix/tasks/npm.rebuild.ex

defmodule Mix.Tasks.Npm.Rebuild do
  @shortdoc "Rebuild node_modules from lockfile"

  @moduledoc """
  Remove `node_modules/` and reinstall from the lockfile.

      mix npm.rebuild

  Equivalent to `mix npm.clean` followed by `mix npm.get`.
  """

  use Mix.Task

  @impl true
  def run([]) do
    Application.ensure_all_started(:req)

    if File.exists?("node_modules") do
      File.rm_rf!("node_modules")
      Mix.shell().info("Removed node_modules/")
    end

    NPM.get()
  end

  def run(_) do
    Mix.shell().error("Usage: mix npm.rebuild")
  end
end