Skip to main content

lib/mix/tasks/npm.ci.ex

defmodule Mix.Tasks.Npm.Ci do
  @shortdoc "Install from lockfile (CI mode)"

  @moduledoc """
  Install npm packages in CI mode.

      mix npm.ci

  Equivalent to `mix npm.install --frozen`. Fails if `npm.lock` doesn't
  match `package.json`, ensuring reproducible builds.
  """

  use Mix.Task

  @impl true
  def run([]) do
    Application.ensure_all_started(:req)
    NPM.install(frozen: true)
  end

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