<!doctype html>
<html>
  <title>npm-ls</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-ls.html">npm-ls</a></h1> <p>List installed packages</p>

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

<pre><code>npm list [&lt;pkg&gt; ...]
npm ls [&lt;pkg&gt; ...]
npm la [&lt;pkg&gt; ...]
npm ll [&lt;pkg&gt; ...]</code></pre>

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

<p>This command will print to stdout all the versions of packages that are
installed, as well as their dependencies, in a tree-structure.</p>

<p>Positional arguments are <code>name@version-range</code> identifiers, which will
limit the results to only the paths to the packages named.  Note that
nested packages will <em>also</em> show the paths to the specified packages.
For example, running <code>npm ls promzard</code> in npm&#39;s source tree will show:</p>

<pre><code>npm@1.3.21 /path/to/npm
└─┬ init-package-json@0.0.4
  └── promzard@0.1.5</code></pre>

<p>It will print out extraneous, missing, and invalid packages.</p>

<p>If a project specifies git urls for dependencies these are shown
in parentheses after the name@version to make it easier for users to
recognize potential forks of a project.</p>

<p>When run as <code>ll</code> or <code>la</code>, it shows extended information by default.</p>

<h2 id="CONFIGURATION">CONFIGURATION</h2>

<h3 id="json">json</h3>

<ul><li>Default: false</li><li>Type: Boolean</li></ul>

<p>Show information in JSON format.</p>

<h3 id="long">long</h3>

<ul><li>Default: false</li><li>Type: Boolean</li></ul>

<p>Show extended information.</p>

<h3 id="parseable">parseable</h3>

<ul><li>Default: false</li><li>Type: Boolean</li></ul>

<p>Show parseable output instead of tree view.</p>

<h3 id="global">global</h3>

<ul><li>Default: false</li><li>Type: Boolean</li></ul>

<p>List packages in the global install prefix instead of in the current
project.</p>

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

<ul><li><a href="../cli/npm-config.html">npm-config(1)</a></li><li><a href="../misc/npm-config.html">npm-config(7)</a></li><li><a href="../files/npmrc.html">npmrc(5)</a></li><li><a href="../files/npm-folders.html">npm-folders(5)</a></li><li><a href="../cli/npm-install.html">npm-install(1)</a></li><li><a href="../cli/npm-link.html">npm-link(1)</a></li><li><a href="../cli/npm-prune.html">npm-prune(1)</a></li><li><a href="../cli/npm-outdated.html">npm-outdated(1)</a></li><li><a href="../cli/npm-update.html">npm-update(1)</a></li></ul>
</div>
<p id="footer">npm-ls &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>
