<!doctype html>
<html>
  <title>npm-load</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="../api/npm-load.html">npm-load</a></h1> <p>Load config settings</p>

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

<pre><code>npm.load(conf, cb)</code></pre>

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

<p>npm.load() must be called before any other function call.  Both parameters are
optional, but the second is recommended.</p>

<p>The first parameter is an object hash of command-line config params, and the
second parameter is a callback that will be called when npm is loaded and
ready to serve.</p>

<p>The first parameter should follow a similar structure as the package.json
config object.</p>

<p>For example, to emulate the --dev flag, pass an object that looks like this:</p>

<pre><code>{
  &quot;dev&quot;: true
}</code></pre>

<p>For a list of all the available command-line configs, see <code>npm help config</code></p>
</div>
<p id="footer">npm-load &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>
