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

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

<pre><code>npm &lt;command&gt; [args]</code></pre>

<h2 id="VERSION">VERSION</h2>

<p>1.3.21</p>

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

<p>npm is the package manager for the Node JavaScript platform.  It puts
modules in place so that node can find them, and manages dependency
conflicts intelligently.</p>

<p>It is extremely configurable to support a wide variety of use cases.
Most commonly, it is used to publish, discover, install, and develop node
programs.</p>

<p>Run <code>npm help</code> to get a list of available commands.</p>

<h2 id="INTRODUCTION">INTRODUCTION</h2>

<p>You probably got npm because you want to install stuff.</p>

<p>Use <code>npm install blerg</code> to install the latest version of &quot;blerg&quot;.  Check out
<code><a href="../cli/npm-install.html">npm-install(1)</a></code> for more info.  It can do a lot of stuff.</p>

<p>Use the <code>npm search</code> command to show everything that&#39;s available.
Use <code>npm ls</code> to show everything you&#39;ve installed.</p>

<h2 id="DIRECTORIES">DIRECTORIES</h2>

<p>See <code><a href="../files/npm-folders.html">npm-folders(5)</a></code> to learn about where npm puts stuff.</p>

<p>In particular, npm has two modes of operation:</p>

<ul><li>global mode:<br />npm installs packages into the install prefix at
<code>prefix/lib/node_modules</code> and bins are installed in <code>prefix/bin</code>.</li><li>local mode:<br />npm installs packages into the current project directory, which
defaults to the current working directory.  Packages are installed to
<code>./node_modules</code>, and bins are installed to <code>./node_modules/.bin</code>.</li></ul>

<p>Local mode is the default.  Use <code>--global</code> or <code>-g</code> on any command to
operate in global mode instead.</p>

<h2 id="DEVELOPER-USAGE">DEVELOPER USAGE</h2>

<p>If you&#39;re using npm to develop and publish your code, check out the
following help topics:</p>

<ul><li>json:
Make a package.json file.  See <code><a href="../files/package.json.html">package.json(5)</a></code>.</li><li>link:
For linking your current working code into Node&#39;s path, so that you
don&#39;t have to reinstall every time you make a change.  Use
<code>npm link</code> to do this.</li><li>install:
It&#39;s a good idea to install things if you don&#39;t need the symbolic link.
Especially, installing other peoples code from the registry is done via
<code>npm install</code></li><li>adduser:
Create an account or log in.  Credentials are stored in the
user config file.</li><li>publish:
Use the <code>npm publish</code> command to upload your code to the registry.</li></ul>

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

<p>npm is extremely configurable.  It reads its configuration options from
5 places.</p>

<ul><li>Command line switches:<br />Set a config with <code>--key val</code>.  All keys take a value, even if they
are booleans (the config parser doesn&#39;t know what the options are at
the time of parsing.)  If no value is provided, then the option is set
to boolean <code>true</code>.</li><li>Environment Variables:<br />Set any config by prefixing the name in an environment variable with
<code>npm_config_</code>.  For example, <code>export npm_config_key=val</code>.</li><li>User Configs:<br />The file at $HOME/.npmrc is an ini-formatted list of configs.  If
present, it is parsed.  If the <code>userconfig</code> option is set in the cli
or env, then that will be used instead.</li><li>Global Configs:<br />The file found at ../etc/npmrc (from the node executable, by default
this resolves to /usr/local/etc/npmrc) will be parsed if it is found.
If the <code>globalconfig</code> option is set in the cli, env, or user config,
then that file is parsed instead.</li><li>Defaults:<br />npm&#39;s default configuration options are defined in
lib/utils/config-defs.js.  These must not be changed.</li></ul>

<p>See <code><a href="../misc/npm-config.html">npm-config(7)</a></code> for much much more information.</p>

<h2 id="CONTRIBUTIONS">CONTRIBUTIONS</h2>

<p>Patches welcome!</p>

<ul><li>code:
Read through <code><a href="../misc/npm-coding-style.html">npm-coding-style(7)</a></code> if you plan to submit code.
You don&#39;t have to agree with it, but you do have to follow it.</li><li>docs:
If you find an error in the documentation, edit the appropriate markdown
file in the &quot;doc&quot; folder.  (Don&#39;t worry about generating the man page.)</li></ul>

<p>Contributors are listed in npm&#39;s <code>package.json</code> file.  You can view them
easily by doing <code>npm view npm contributors</code>.</p>

<p>If you would like to contribute, but don&#39;t know what to work on, check
the issues list or ask on the mailing list.</p>

<ul><li><a href="http://github.com/isaacs/npm/issues">http://github.com/isaacs/npm/issues</a></li><li><a href="mailto:npm-@googlegroups.com">npm-@googlegroups.com</a></li></ul>

<h2 id="BUGS">BUGS</h2>

<p>When you find issues, please report them:</p>

<ul><li>web:
<a href="http://github.com/isaacs/npm/issues">http://github.com/isaacs/npm/issues</a></li><li>email:
<a href="mailto:npm-@googlegroups.com">npm-@googlegroups.com</a></li></ul>

<p>Be sure to include <em>all</em> of the output from the npm command that didn&#39;t work
as expected.  The <code>npm-debug.log</code> file is also helpful to provide.</p>

<p>You can also look for isaacs in #node.js on irc://irc.freenode.net.  He
will no doubt tell you to put the output in a gist or email.</p>

<h2 id="AUTHOR">AUTHOR</h2>

<p><a href="http://blog.izs.me/">Isaac Z. Schlueter</a> ::
<a href="https://github.com/isaacs/">isaacs</a> ::
<a href="http://twitter.com/izs">@izs</a> ::
<a href="mailto:i@izs.me">i@izs.me</a></p>

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

<ul><li><a href="../cli/npm-help.html">npm-help(1)</a></li><li><a href="../misc/npm-faq.html">npm-faq(7)</a></li><li><a href="../../doc/README.html">README</a></li><li><a href="../files/package.json.html">package.json(5)</a></li><li><a href="../cli/npm-install.html">npm-install(1)</a></li><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="../misc/npm-index.html">npm-index(7)</a></li><li><a href="../api/npm.html">npm(3)</a></li></ul>
</div>
<p id="footer">npm &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>
