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

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

<pre><code>npm link (in package folder)
npm link &lt;pkgname&gt;
npm ln (with any of the previous argument usage)</code></pre>

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

<p>Package linking is a two-step process.</p>

<p>First, <code>npm link</code> in a package folder will create a globally-installed
symbolic link from <code>prefix/package-name</code> to the current folder.</p>

<p>Next, in some other location, <code>npm link package-name</code> will create a
symlink from the local <code>node_modules</code> folder to the global symlink.</p>

<p>Note that <code>package-name</code> is taken from <code>package.json</code>,
not from directory name.</p>

<p>When creating tarballs for <code>npm publish</code>, the linked packages are
&quot;snapshotted&quot; to their current state by resolving the symbolic links.</p>

<p>This is
handy for installing your own stuff, so that you can work on it and test it
iteratively without having to continually rebuild.</p>

<p>For example:</p>

<pre><code>cd ~/projects/node-redis    # go into the package directory
npm link                    # creates global link
cd ~/projects/node-bloggy   # go into some other package directory.
npm link redis              # link-install the package</code></pre>

<p>Now, any changes to ~/projects/node-redis will be reflected in
~/projects/node-bloggy/node_modules/redis/</p>

<p>You may also shortcut the two steps in one.  For example, to do the
above use-case in a shorter way:</p>

<pre><code>cd ~/projects/node-bloggy  # go into the dir of your main project
npm link ../node-redis     # link the dir of your dependency</code></pre>

<p>The second line is the equivalent of doing:</p>

<pre><code>(cd ../node-redis; npm link)
npm link redis</code></pre>

<p>That is, it first creates a global link, and then links the global
installation target into your project&#39;s <code>node_modules</code> folder.</p>

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

<ul><li><a href="../misc/npm-developers.html">npm-developers(7)</a></li><li><a href="../misc/npm-faq.html">npm-faq(7)</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="../files/npm-folders.html">npm-folders(5)</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></ul>
</div>
<p id="footer">npm-link &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>
