<!doctype html>
<html>
  <title>npm-tag</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-tag.html">npm-tag</a></h1> <p>Tag a published version</p>

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

<pre><code>npm tag &lt;name&gt;@&lt;version&gt; [&lt;tag&gt;]</code></pre>

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

<p>Tags the specified version of the package with the specified tag, or the
<code>--tag</code> config if not specified.</p>

<p>A tag can be used when installing packages as a reference to a version instead
of using a specific version number:</p>

<pre><code>npm install &lt;name&gt;@&lt;tag&gt;</code></pre>

<p>When installing dependencies, a preferred tagged version may be specified:</p>

<pre><code>npm install --tag &lt;tag&gt;</code></pre>

<p>This also applies to <code>npm dedupe</code>.</p>

<p>Publishing a package always sets the &quot;latest&quot; tag to the published version.</p>

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

<ul><li><a href="../cli/npm-publish.html">npm-publish(1)</a></li><li><a href="../cli/npm-install.html">npm-install(1)</a></li><li><a href="../cli/npm-dedupe.html">npm-dedupe(1)</a></li><li><a href="../misc/npm-registry.html">npm-registry(7)</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-tag &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>
