defmodule Mix.Tasks.Npm.Set do @shortdoc "Set npm config values" @moduledoc """ Set a configuration value in `.npmrc`. mix npm.set registry https://registry.example.com mix npm.set save-exact true mix npm.set always-auth true Values are written to the project-level `.npmrc` file. """ use Mix.Task @impl true def run([key, value]) do path = ".npmrc" existing = case File.read(path) do {:ok, content} -> NPM.Config.parse_npmrc(content) {:error, :enoent} -> %{} end updated = Map.put(existing, key, value) content = updated |> Enum.sort_by(&elem(&1, 0)) |> Enum.map_join("\n", fn {k, v} -> "#{k}=#{v}" end) File.write!(path, content <> "\n") Mix.shell().info("Set #{key}=#{value} in .npmrc") end def run(_) do Mix.shell().error("Usage: mix npm.set ") end end