<!doctype html>
<html>
  <title>npm-config</title>
  <meta http-equiv="content-type" value="text/html;utf-8">
  <link rel="stylesheet" type="text/css" href="../../static/style.css">

  <body>
    <div id="wrapper">
<h1><a href="../cli/npm-config.html">npm-config</a></h1> <p>Manage the npm configuration files</p>

<h2 id="SYNOPSIS">SYNOPSIS</h2>

<pre><code>npm config set &lt;key&gt; &lt;value&gt; [--global]
npm config get &lt;key&gt;
npm config delete &lt;key&gt;
npm config list
npm config edit
npm c [set|get|delete|list]
npm get &lt;key&gt;
npm set &lt;key&gt; &lt;value&gt; [--global]</code></pre>

<h2 id="DESCRIPTION">DESCRIPTION</h2>

<p>npm gets its config settings from the command line, environment
variables, <code>npmrc</code> files, and in some cases, the <code>package.json</code> file.</p>

<p>See <a href="../files/npmrc.html">npmrc(5)</a> for more information about the npmrc files.</p>

<p>See <code><a href="../misc/npm-config.html">npm-config(7)</a></code> for a more thorough discussion of the mechanisms
involved.</p>

<p>The <code>npm config</code> command can be used to update and edit the contents
of the user and global npmrc files.</p>

<h2 id="Sub-commands">Sub-commands</h2>

<p>Config supports the following sub-commands:</p>

<h3 id="set">set</h3>

<pre><code>npm config set key value</code></pre>

<p>Sets the config key to the value.</p>

<p>If value is omitted, then it sets it to &quot;true&quot;.</p>

<h3 id="get">get</h3>

<pre><code>npm config get key</code></pre>

<p>Echo the config value to stdout.</p>

<h3 id="list">list</h3>

<pre><code>npm config list</code></pre>

<p>Show all the config settings.</p>

<h3 id="delete">delete</h3>

<pre><code>npm config delete key</code></pre>

<p>Deletes the key from all configuration files.</p>

<h3 id="edit">edit</h3>

<pre><code>npm config edit</code></pre>

<p>Opens the config file in an editor.  Use the <code>--global</code> flag to edit the
global config.</p>

<h2 id="SEE-ALSO">SEE ALSO</h2>

<ul><li><a href="../files/npm-folders.html">npm-folders(5)</a></li><li><a href="../misc/npm-config.html">npm-config(7)</a></li><li><a href="../files/package.json.html">package.json(5)</a></li><li><a href="../files/npmrc.html">npmrc(5)</a></li><li><a href="../cli/npm.html">npm(1)</a></li></ul>
</div>
<p id="footer">npm-config &mdash; npm@1.3.21</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")
var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
  .filter(function (el) {
    return el.parentNode === wrapper
        && el.tagName.match(/H[1-6]/)
        && el.id
  })
var l = 2
  , toc = document.createElement("ul")
toc.innerHTML = els.map(function (el) {
  var i = el.tagName.charAt(1)
    , out = ""
  while (i > l) {
    out += "<ul>"
    l ++
  }
  while (i < l) {
    out += "</ul>"
    l --
  }
  out += "<li><a href='#" + el.id + "'>" +
    ( el.innerText || el.text || el.innerHTML)
    + "</a>"
  return out
}).join("\n")
toc.id = "toc"
document.body.appendChild(toc)
})()
</script>
