<!doctype html>
<html>
  <title>npm-install</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-install.html">npm-install</a></h1> <p>install a package programmatically</p>

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

<pre><code>npm.commands.install([where,] packages, callback)</code></pre>

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

<p>This acts much the same ways as installing on the command-line.</p>

<p>The &#39;where&#39; parameter is optional and only used internally, and it specifies
where the packages should be installed to.</p>

<p>The &#39;packages&#39; parameter is an array of strings. Each element in the array is
the name of a package to be installed.</p>

<p>Finally, &#39;callback&#39; is a function that will be called when all packages have been
installed or when an error has been encountered.</p>
</div>
<p id="footer">npm-install &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>
