|
|
|
<!doctype html>
|
|
|
|
<html>
|
|
|
|
<title>npm-dedupe</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-dedupe.html">npm-dedupe</a></h1> <p>Reduce duplication</p>
|
|
|
|
|
|
|
|
<h2 id="SYNOPSIS">SYNOPSIS</h2>
|
|
|
|
|
|
|
|
<pre><code>npm dedupe [package names...]
|
|
|
|
npm ddp [package names...]</code></pre>
|
|
|
|
|
|
|
|
<h2 id="DESCRIPTION">DESCRIPTION</h2>
|
|
|
|
|
|
|
|
<p>Searches the local package tree and attempts to simplify the overall
|
|
|
|
structure by moving dependencies further up the tree, where they can
|
|
|
|
be more effectively shared by multiple dependent packages.</p>
|
|
|
|
|
|
|
|
<p>For example, consider this dependency graph:</p>
|
|
|
|
|
|
|
|
<pre><code>a
|
|
|
|
+-- b <-- depends on c@1.0.x
|
|
|
|
| `-- c@1.0.3
|
|
|
|
`-- d <-- depends on c@~1.0.9
|
|
|
|
`-- c@1.0.10</code></pre>
|
|
|
|
|
|
|
|
<p>In this case, <code><a href="../cli/npm-dedupe.html">npm-dedupe(1)</a></code> will transform the tree to:</p>
|
|
|
|
|
|
|
|
<pre><code>a
|
|
|
|
+-- b
|
|
|
|
+-- d
|
|
|
|
`-- c@1.0.10</code></pre>
|
|
|
|
|
|
|
|
<p>Because of the hierarchical nature of node's module lookup, b and d
|
|
|
|
will both get their dependency met by the single c package at the root
|
|
|
|
level of the tree.</p>
|
|
|
|
|
|
|
|
<p>If a suitable version exists at the target location in the tree
|
|
|
|
already, then it will be left untouched, but the other duplicates will
|
|
|
|
be deleted.</p>
|
|
|
|
|
|
|
|
<p>If no suitable version can be found, then a warning is printed, and
|
|
|
|
nothing is done.</p>
|
|
|
|
|
|
|
|
<p>If any arguments are supplied, then they are filters, and only the
|
|
|
|
named packages will be touched.</p>
|
|
|
|
|
|
|
|
<p>Note that this operation transforms the dependency tree, and may
|
|
|
|
result in packages getting updated versions, perhaps from the npm
|
|
|
|
registry.</p>
|
|
|
|
|
|
|
|
<p>This feature is experimental, and may change in future versions.</p>
|
|
|
|
|
|
|
|
<p>The <code>--tag</code> argument will apply to all of the affected dependencies. If a
|
|
|
|
tag with the given name exists, the tagged version is preferred over newer
|
|
|
|
versions.</p>
|
|
|
|
|
|
|
|
<h2 id="SEE-ALSO">SEE ALSO</h2>
|
|
|
|
|
|
|
|
<ul><li><a href="../cli/npm-ls.html">npm-ls(1)</a></li><li><a href="../cli/npm-update.html">npm-update(1)</a></li><li><a href="../cli/npm-install.html">npm-install(1)</a></li></ul>
|
|
|
|
</div>
|
|
|
|
<p id="footer">npm-dedupe — npm@1.3.24</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>
|