npm: Upgrade to 1.1.33

Support for parallel use of the cache folder
Retry on registry timeouts or network failures
Reduce 'engines' failures to a warning
Use new zsh completion if aviailable
This commit is contained in:
isaacs 2012-06-28 19:08:32 -07:00
parent f2a9ed4873
commit c721604d25
131 changed files with 1539 additions and 245 deletions

22
deps/npm/.npmignore vendored
View File

@ -1,16 +1,16 @@
*.swp
test/bin
test/output.log
test/packages/*/node_modules
test/packages/npm-test-depends-on-spark/which-spark.log
test/packages/test-package/random-data.txt
test/root
node_modules/ronn
node_modules/.bin
npm-debug.log
./npmrc
.gitignore
release/
/test/bin
/test/output.log
/test/packages/*/node_modules
/test/packages/npm-test-depends-on-spark/which-spark.log
/test/packages/test-package/random-data.txt
/test/root
/node_modules/ronn
/node_modules/tap
/node_modules/.bin
/npmrc
/release/
# don't need these in the npm package.
html/*.png

View File

@ -195,6 +195,27 @@ See also the `strict-ssl` config.
The location of npm's cache directory. See `npm-cache(1)`
### cache-lock-stale
* Default: 60000 (1 minute)
* Type: Number
The number of ms before cache folder lockfiles are considered stale.
### cache-lock-retries
* Default: 10
* Type: Number
Number of times to retry to acquire a lock on cache folder lockfiles.
### cache-lock-wait
* Default: 10000 (10 seconds)
* Type: Number
Number of ms to wait for cache lock files to expire.
### cache-max
* Default: Infinity
@ -266,6 +287,15 @@ set.
The command to run for `npm edit` or `npm config edit`.
### engine-strict
* Default: false
* Type: Boolean
If set to true, then npm will stubbornly refuse to install (or even
consider installing) any package that claims to not be compatible with
the current Node.js version.
### force
* Default: false
@ -278,6 +308,38 @@ Makes various commands more forceful.
* skips cache when requesting from the registry.
* prevents checks against clobbering non-npm files.
### fetch-retries
* Default: 2
* Type: Number
The "retries" config for the `retry` module to use when fetching
packages from the registry.
### fetch-retry-factor
* Default: 10
* Type: Number
The "factor" config for the `retry` module to use when fetching
packages.
### fetch-retry-mintimeout
* Default: 10000 (10 seconds)
* Type: Number
The "minTimeout" config for the `retry` module to use when fetching
packages.
### fetch-retry-maxtimeout
* Default: 60000 (1 minute)
* Type: Number
The "maxTimeout" config for the `retry` module to use when fetching
packages.
### git
* Default: `"git"`

View File

@ -453,8 +453,7 @@ Entries in `optionalDependencies` will override entries of the same name in
## engines
You can specify the version of
node that your stuff works on:
You can specify the version of node that your stuff works on:
{ "engines" : { "node" : ">=0.1.27 <0.1.30" } }
@ -470,6 +469,22 @@ are capable of properly installing your program. For example:
{ "engines" : { "npm" : "~1.0.20" } }
Note that, unless the user has set the `engine-strict` config flag, this
field is advisory only.
## engineStrict
If you are sure that your module will *definitely not* run properly on
versions of Node/npm other than those specified in the `engines` hash,
then you can set `"engineStrict": true` in your package.json file.
This will override the user's `engine-strict` config setting.
Please do not do this unless you are really very very sure. If your
engines hash is something overly restrictive, you can quite easily and
inadvertently lock yourself into obscurity and prevent your users from
updating to new versions of Node. Consider this choice carefully. If
people abuse it, it will be removed in a future version of npm.
## os
You can specify which operating systems your

View File

@ -19,7 +19,7 @@
<p>This function should not be used programmatically. Instead, just refer
to the <code>npm.bin</code> member.</p>
</div>
<p id="footer">bin &mdash; npm@1.1.32</p>
<p id="footer">bin &mdash; npm@1.1.33</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@ -25,7 +25,7 @@ optional version number.</p>
<p>This command will launch a browser, so this command may not be the most
friendly for programmatic use.</p>
</div>
<p id="footer">bugs &mdash; npm@1.1.32</p>
<p id="footer">bugs &mdash; npm@1.1.33</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@ -28,7 +28,7 @@ usage, or <code>man 3 npm-&lt;command&gt;</code> for programmatic usage.</p>
<ul><li><a href="../doc/index.html">index(1)</a></li></ul>
</div>
<p id="footer">commands &mdash; npm@1.1.32</p>
<p id="footer">commands &mdash; npm@1.1.33</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@ -33,7 +33,7 @@ functions instead.</p>
<ul><li><a href="../api/npm.html">npm(3)</a></li></ul>
</div>
<p id="footer">config &mdash; npm@1.1.32</p>
<p id="footer">config &mdash; npm@1.1.33</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@ -30,7 +30,7 @@ install the package.</p></li></ul>
<ul><li><a href="../api/publish.html">publish(3)</a></li><li><a href="../api/unpublish.html">unpublish(3)</a></li><li><a href="../doc/registry.html">registry(1)</a></li></ul>
</div>
<p id="footer">deprecate &mdash; npm@1.1.32</p>
<p id="footer">deprecate &mdash; npm@1.1.33</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@ -25,7 +25,7 @@ optional version number.</p>
<p>This command will launch a browser, so this command may not be the most
friendly for programmatic use.</p>
</div>
<p id="footer">docs &mdash; npm@1.1.32</p>
<p id="footer">docs &mdash; npm@1.1.33</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@ -30,7 +30,7 @@ to open. The package can optionally have a version number attached.</p>
<p>Since this command opens an editor in a new process, be careful about where
and how this is used.</p>
</div>
<p id="footer">edit &mdash; npm@1.1.32</p>
<p id="footer">edit &mdash; npm@1.1.33</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@ -24,7 +24,7 @@ sure to use <code>npm rebuild &lt;pkg&gt;</code> if you make any changes.</p>
<p>The first element in the 'args' parameter must be a package name. After that is the optional command, which can be any number of strings. All of the strings will be combined into one, space-delimited command.</p>
</div>
<p id="footer">explore &mdash; npm@1.1.32</p>
<p id="footer">explore &mdash; npm@1.1.33</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@ -32,7 +32,7 @@ Name of the file that matched</li></ul>
<p>The silent parameter is not neccessary not used, but it may in the future.</p>
</div>
<p id="footer">help-search &mdash; npm@1.1.32</p>
<p id="footer">help-search &mdash; npm@1.1.33</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@ -35,7 +35,7 @@ then go ahead and use this programmatically.</p>
<p><a href="../doc/json.html">json(1)</a></p>
</div>
<p id="footer">init &mdash; npm@1.1.32</p>
<p id="footer">init &mdash; npm@1.1.33</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@ -25,7 +25,7 @@ the name of a package to be installed.</p>
<p>Finally, 'callback' is a function that will be called when all packages have been
installed or when an error has been encountered.</p>
</div>
<p id="footer">install &mdash; npm@1.1.32</p>
<p id="footer">install &mdash; npm@1.1.33</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@ -39,7 +39,7 @@ npm.commands.link('redis', cb) # link-install the package</code></pre>
<p>Now, any changes to the redis package will be reflected in
the package in the current working directory</p>
</div>
<p id="footer">link &mdash; npm@1.1.32</p>
<p id="footer">link &mdash; npm@1.1.33</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@ -32,7 +32,7 @@ config object.</p>
<p>For a list of all the available command-line configs, see <code>npm help config</code></p>
</div>
<p id="footer">load &mdash; npm@1.1.32</p>
<p id="footer">load &mdash; npm@1.1.33</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@ -59,7 +59,7 @@ project.</p>
This means that if a submodule a same dependency as a parent module, then the
dependency will only be output once.</p>
</div>
<p id="footer">ls &mdash; npm@1.1.32</p>
<p id="footer">ls &mdash; npm@1.1.33</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@ -24,7 +24,7 @@ npm.load(configObject, function (er, npm) {
<h2 id="VERSION">VERSION</h2>
<p>1.1.32</p>
<p>1.1.33</p>
<h2 id="DESCRIPTION">DESCRIPTION</h2>
@ -91,7 +91,7 @@ method names. Use the <code>npm.deref</code> method to find the real name.</p>
<pre><code>var cmd = npm.deref("unp") // cmd === "unpublish"</code></pre>
</div>
<p id="footer">npm &mdash; npm@1.1.32</p>
<p id="footer">npm &mdash; npm@1.1.33</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@ -19,7 +19,7 @@ currently outdated.</p>
<p>If the 'packages' parameter is left out, npm will check all packages.</p>
</div>
<p id="footer">outdated &mdash; npm@1.1.32</p>
<p id="footer">outdated &mdash; npm@1.1.33</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@ -34,7 +34,7 @@ that is not implemented at this time.</p>
<ul><li><a href="../api/publish.html">publish(3)</a></li><li><a href="../doc/registry.html">registry(1)</a></li></ul>
</div>
<p id="footer">owner &mdash; npm@1.1.32</p>
<p id="footer">owner &mdash; npm@1.1.33</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@ -25,7 +25,7 @@ overwritten the second time.</p>
<p>If no arguments are supplied, then npm packs the current package folder.</p>
</div>
<p id="footer">pack &mdash; npm@1.1.32</p>
<p id="footer">pack &mdash; npm@1.1.33</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@ -21,7 +21,7 @@
<p>This function is not useful programmatically</p>
</div>
<p id="footer">prefix &mdash; npm@1.1.32</p>
<p id="footer">prefix &mdash; npm@1.1.33</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@ -23,7 +23,7 @@
<p>Extraneous packages are packages that are not listed on the parent
package's dependencies list.</p>
</div>
<p id="footer">prune &mdash; npm@1.1.32</p>
<p id="footer">prune &mdash; npm@1.1.33</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@ -32,7 +32,7 @@ the registry. Overwrites when the "force" environment variable is set.</p>
<ul><li><a href="../doc/registry.html">registry(1)</a></li><li><a href="../doc/adduser.html">adduser(1)</a></li><li><a href="../api/owner.html">owner(3)</a></li></ul>
</div>
<p id="footer">publish &mdash; npm@1.1.32</p>
<p id="footer">publish &mdash; npm@1.1.33</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@ -22,7 +22,7 @@ the new binary. If no 'packages' parameter is specify, every package will be reb
<p>See <code>npm help build</code></p>
</div>
<p id="footer">rebuild &mdash; npm@1.1.32</p>
<p id="footer">rebuild &mdash; npm@1.1.33</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@ -27,7 +27,7 @@ in the <code>packages</code> parameter.</p>
<ul><li><a href="../api/start.html">start(3)</a></li><li><a href="../api/stop.html">stop(3)</a></li></ul>
</div>
<p id="footer">restart &mdash; npm@1.1.32</p>
<p id="footer">restart &mdash; npm@1.1.33</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@ -21,7 +21,7 @@
<p>This function is not useful programmatically.</p>
</div>
<p id="footer">root &mdash; npm@1.1.32</p>
<p id="footer">root &mdash; npm@1.1.33</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@ -29,7 +29,7 @@ assumed to be the command to run. All other elements are ignored.</p>
<ul><li><a href="../doc/scripts.html">scripts(1)</a></li><li><a href="../api/test.html">test(3)</a></li><li><a href="../api/start.html">start(3)</a></li><li><a href="../api/restart.html">restart(3)</a></li><li><a href="../api/stop.html">stop(3)</a></li></ul>
</div>
<p id="footer">run-script &mdash; npm@1.1.32</p>
<p id="footer">run-script &mdash; npm@1.1.33</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@ -32,7 +32,7 @@ excluded term (the "searchexclude" config). The search is case insensitive
and doesn't try to read your mind (it doesn't do any verb tense matching or the
like).</p>
</div>
<p id="footer">search &mdash; npm@1.1.32</p>
<p id="footer">search &mdash; npm@1.1.33</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@ -26,7 +26,7 @@ but the shrinkwrap file will still be written.</p>
<p>Finally, 'callback' is a function that will be called when the shrinkwrap has
been saved.</p>
</div>
<p id="footer">shrinkwrap &mdash; npm@1.1.32</p>
<p id="footer">shrinkwrap &mdash; npm@1.1.33</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@ -19,7 +19,7 @@
<p>npm can run tests on multiple packages. Just specify multiple packages
in the <code>packages</code> parameter.</p>
</div>
<p id="footer">start &mdash; npm@1.1.32</p>
<p id="footer">start &mdash; npm@1.1.33</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@ -19,7 +19,7 @@
<p>npm can run stop on multiple packages. Just specify multiple packages
in the <code>packages</code> parameter.</p>
</div>
<p id="footer">stop &mdash; npm@1.1.32</p>
<p id="footer">stop &mdash; npm@1.1.33</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@ -33,7 +33,7 @@ dependencies into the submodule folder.</p>
<ul><li>npm help json</li><li>git help submodule</li></ul>
</div>
<p id="footer">submodule &mdash; npm@1.1.32</p>
<p id="footer">submodule &mdash; npm@1.1.33</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@ -29,7 +29,7 @@ parameter is missing or falsey (empty), the default froom the config will be
used. For more information about how to set this config, check
<code>man 3 npm-config</code> for programmatic usage or <code>man npm-config</code> for cli usage.</p>
</div>
<p id="footer">tag &mdash; npm@1.1.32</p>
<p id="footer">tag &mdash; npm@1.1.33</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@ -22,7 +22,7 @@ true.</p>
<p>npm can run tests on multiple packages. Just specify multiple packages
in the <code>packages</code> parameter.</p>
</div>
<p id="footer">test &mdash; npm@1.1.32</p>
<p id="footer">test &mdash; npm@1.1.33</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@ -22,7 +22,7 @@ the name of a package to be uninstalled.</p>
<p>Finally, 'callback' is a function that will be called when all packages have been
uninstalled or when an error has been encountered.</p>
</div>
<p id="footer">uninstall &mdash; npm@1.1.32</p>
<p id="footer">uninstall &mdash; npm@1.1.33</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@ -26,7 +26,7 @@ is what is meant.</p>
<p>If no version is specified, or if all versions are removed then
the root package entry is removed from the registry entirely.</p>
</div>
<p id="footer">unpublish &mdash; npm@1.1.32</p>
<p id="footer">unpublish &mdash; npm@1.1.33</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@ -18,7 +18,7 @@
<p>The 'packages' argument is an array of packages to update. The 'callback' parameter will be called when done or when an error occurs.</p>
</div>
<p id="footer">update &mdash; npm@1.1.32</p>
<p id="footer">update &mdash; npm@1.1.33</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@ -24,7 +24,7 @@ fail if the repo is not clean.</p>
parameter. The difference, however, is this function will fail if it does
not have exactly one element. The only element should be a version number.</p>
</div>
<p id="footer">version &mdash; npm@1.1.32</p>
<p id="footer">version &mdash; npm@1.1.33</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@ -99,7 +99,7 @@ the field name.</p>
<p>corresponding to the list of fields selected.</p>
</div>
<p id="footer">view &mdash; npm@1.1.32</p>
<p id="footer">view &mdash; npm@1.1.33</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@ -21,7 +21,7 @@
<p>This function is not useful programmatically</p>
</div>
<p id="footer">whoami &mdash; npm@1.1.32</p>
<p id="footer">whoami &mdash; npm@1.1.33</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@ -261,7 +261,7 @@ will no doubt tell you to put the output in a gist or email.</p>
<ul><li><a href="../doc/npm.html">npm(1)</a></li><li><a href="../doc/faq.html">faq(1)</a></li><li><a href="../doc/help.html">help(1)</a></li><li><a href="../doc/index.html">index(1)</a></li></ul>
</div>
<p id="footer"><a href="../doc/README.html">README</a> &mdash; npm@1.1.32</p>
<p id="footer"><a href="../doc/README.html">README</a> &mdash; npm@1.1.33</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@ -39,7 +39,7 @@ authorize on a new machine.</p>
<ul><li><a href="../doc/registry.html">registry(1)</a></li><li><a href="../doc/config.html">config(1)</a></li><li><a href="../doc/owner.html">owner(1)</a></li><li><a href="../doc/whoami.html">whoami(1)</a></li></ul>
</div>
<p id="footer">adduser &mdash; npm@1.1.32</p>
<p id="footer">adduser &mdash; npm@1.1.33</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@ -20,7 +20,7 @@
<ul><li><a href="../doc/prefix.html">prefix(1)</a></li><li><a href="../doc/root.html">root(1)</a></li><li><a href="../doc/folders.html">folders(1)</a></li><li><a href="../doc/config.html">config(1)</a></li></ul>
</div>
<p id="footer">bin &mdash; npm@1.1.32</p>
<p id="footer">bin &mdash; npm@1.1.33</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@ -36,7 +36,7 @@ config param.</p>
<ul><li><a href="../doc/docs.html">docs(1)</a></li><li><a href="../doc/view.html">view(1)</a></li><li><a href="../doc/publish.html">publish(1)</a></li><li><a href="../doc/registry.html">registry(1)</a></li><li><a href="../doc/config.html">config(1)</a></li><li><a href="../doc/json.html">json(1)</a></li></ul>
</div>
<p id="footer">bugs &mdash; npm@1.1.32</p>
<p id="footer">bugs &mdash; npm@1.1.33</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@ -25,7 +25,7 @@ A folder containing a <code>package.json</code> file in its root.</li></ul>
<ul><li><a href="../doc/install.html">install(1)</a></li><li><a href="../doc/link.html">link(1)</a></li><li><a href="../doc/scripts.html">scripts(1)</a></li><li><a href="../doc/json.html">json(1)</a></li></ul>
</div>
<p id="footer">build &mdash; npm@1.1.32</p>
<p id="footer">build &mdash; npm@1.1.33</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@ -20,7 +20,7 @@ install packages into the local space.</p>
<ul><li><a href="../doc/install.html">install(1)</a></li></ul>
</div>
<p id="footer">bundle &mdash; npm@1.1.32</p>
<p id="footer">bundle &mdash; npm@1.1.33</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@ -66,7 +66,7 @@ they do not make an HTTP request to the registry.</p>
<ul><li><a href="../doc/folders.html">folders(1)</a></li><li><a href="../doc/config.html">config(1)</a></li><li><a href="../doc/install.html">install(1)</a></li><li><a href="../doc/publish.html">publish(1)</a></li><li><a href="../doc/pack.html">pack(1)</a></li></ul>
</div>
<p id="footer">cache &mdash; npm@1.1.32</p>
<p id="footer">cache &mdash; npm@1.1.33</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@ -65,7 +65,7 @@
<ul><li><a href="../doc/npm.html">npm(1)</a></li><li><a href="../doc/faq.html">faq(1)</a></li></ul>
</div>
<p id="footer">changelog &mdash; npm@1.1.32</p>
<p id="footer">changelog &mdash; npm@1.1.33</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@ -180,7 +180,7 @@ set to anything."</p>
<ul><li><a href="../doc/developers.html">developers(1)</a></li><li><a href="../doc/faq.html">faq(1)</a></li><li><a href="../doc/npm.html">npm(1)</a></li></ul>
</div>
<p id="footer">coding-style &mdash; npm@1.1.32</p>
<p id="footer">coding-style &mdash; npm@1.1.33</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@ -33,7 +33,7 @@ completions based on the arguments.</p>
<ul><li><a href="../doc/developers.html">developers(1)</a></li><li><a href="../doc/faq.html">faq(1)</a></li><li><a href="../doc/npm.html">npm(1)</a></li></ul>
</div>
<p id="footer">completion &mdash; npm@1.1.32</p>
<p id="footer">completion &mdash; npm@1.1.33</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@ -176,6 +176,24 @@ to trust only that specific signing authority.</p>
<p>The location of npm's cache directory. See <code><a href="../doc/cache.html">cache(1)</a></code></p>
<h3 id="cache-lock-stale">cache-lock-stale</h3>
<ul><li>Default: 60000 (1 minute)</li><li>Type: Number</li></ul>
<p>The number of ms before cache folder lockfiles are considered stale.</p>
<h3 id="cache-lock-retries">cache-lock-retries</h3>
<ul><li>Default: 10</li><li>Type: Number</li></ul>
<p>Number of times to retry to acquire a lock on cache folder lockfiles.</p>
<h3 id="cache-lock-wait">cache-lock-wait</h3>
<ul><li>Default: 10000 (10 seconds)</li><li>Type: Number</li></ul>
<p>Number of ms to wait for cache lock files to expire.</p>
<h3 id="cache-max">cache-max</h3>
<ul><li>Default: Infinity</li><li>Type: Number</li></ul>
@ -239,6 +257,14 @@ or <code>"notepad"</code> on Windows.</li><li>Type: path</li></ul>
<p>The command to run for <code>npm edit</code> or <code>npm config edit</code>.</p>
<h3 id="engine-strict">engine-strict</h3>
<ul><li>Default: false</li><li>Type: Boolean</li></ul>
<p>If set to true, then npm will stubbornly refuse to install (or even
consider installing) any package that claims to not be compatible with
the current Node.js version.</p>
<h3 id="force">force</h3>
<ul><li>Default: false</li><li>Type: Boolean</li></ul>
@ -247,6 +273,34 @@ or <code>"notepad"</code> on Windows.</li><li>Type: path</li></ul>
<ul><li>lifecycle script failure does not block progress.</li><li>publishing clobbers previously published versions.</li><li>skips cache when requesting from the registry.</li><li>prevents checks against clobbering non-npm files.</li></ul>
<h3 id="fetch-retries">fetch-retries</h3>
<ul><li>Default: 2</li><li>Type: Number</li></ul>
<p>The "retries" config for the <code>retry</code> module to use when fetching
packages from the registry.</p>
<h3 id="fetch-retry-factor">fetch-retry-factor</h3>
<ul><li>Default: 10</li><li>Type: Number</li></ul>
<p>The "factor" config for the <code>retry</code> module to use when fetching
packages.</p>
<h3 id="fetch-retry-mintimeout">fetch-retry-mintimeout</h3>
<ul><li>Default: 10000 (10 seconds)</li><li>Type: Number</li></ul>
<p>The "minTimeout" config for the <code>retry</code> module to use when fetching
packages.</p>
<h3 id="fetch-retry-maxtimeout">fetch-retry-maxtimeout</h3>
<ul><li>Default: 60000 (1 minute)</li><li>Type: Number</li></ul>
<p>The "maxTimeout" config for the <code>retry</code> module to use when fetching
packages.</p>
<h3 id="git">git</h3>
<ul><li>Default: <code>"git"</code></li><li>Type: String</li></ul>
@ -681,7 +735,7 @@ then answer "no" to any prompt.</p>
<ul><li><a href="../doc/folders.html">folders(1)</a></li><li><a href="../doc/npm.html">npm(1)</a></li></ul>
</div>
<p id="footer">config &mdash; npm@1.1.32</p>
<p id="footer">config &mdash; npm@1.1.33</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@ -29,7 +29,7 @@ something like this:</p>
<ul><li><a href="../doc/publish.html">publish(1)</a></li><li><a href="../doc/registry.html">registry(1)</a></li></ul>
</div>
<p id="footer">deprecate &mdash; npm@1.1.32</p>
<p id="footer">deprecate &mdash; npm@1.1.33</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@ -160,7 +160,7 @@ from a fresh checkout.</p>
<ul><li><a href="../doc/faq.html">faq(1)</a></li><li><a href="../doc/npm.html">npm(1)</a></li><li><a href="../doc/init.html">init(1)</a></li><li><a href="../doc/json.html">json(1)</a></li><li><a href="../doc/scripts.html">scripts(1)</a></li><li><a href="../doc/publish.html">publish(1)</a></li><li><a href="../doc/adduser.html">adduser(1)</a></li><li><a href="../doc/registry.html">registry(1)</a></li></ul>
</div>
<p id="footer">developers &mdash; npm@1.1.32</p>
<p id="footer">developers &mdash; npm@1.1.33</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@ -80,7 +80,7 @@ license statement)</li><li>Illegal content.</li></ol>
<ul><li><a href="../doc/registry.html">registry(1)</a></li><li><a href="../doc/owner.html">owner(1)</a></li></ul>
</div>
<p id="footer">disputes &mdash; npm@1.1.32</p>
<p id="footer">disputes &mdash; npm@1.1.33</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@ -37,7 +37,7 @@ config param.</p>
<ul><li><a href="../doc/view.html">view(1)</a></li><li><a href="../doc/publish.html">publish(1)</a></li><li><a href="../doc/registry.html">registry(1)</a></li><li><a href="../doc/config.html">config(1)</a></li><li><a href="../doc/json.html">json(1)</a></li></ul>
</div>
<p id="footer">docs &mdash; npm@1.1.32</p>
<p id="footer">docs &mdash; npm@1.1.33</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@ -37,7 +37,7 @@ or <code>"notepad"</code> on Windows.</li><li>Type: path</li></ul>
<ul><li><a href="../doc/folders.html">folders(1)</a></li><li><a href="../doc/explore.html">explore(1)</a></li><li><a href="../doc/install.html">install(1)</a></li><li><a href="../doc/config.html">config(1)</a></li></ul>
</div>
<p id="footer">edit &mdash; npm@1.1.32</p>
<p id="footer">edit &mdash; npm@1.1.33</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@ -40,7 +40,7 @@ Windows</li><li>Type: path</li></ul>
<ul><li><a href="../doc/submodule.html">submodule(1)</a></li><li><a href="../doc/folders.html">folders(1)</a></li><li><a href="../doc/edit.html">edit(1)</a></li><li><a href="../doc/rebuild.html">rebuild(1)</a></li><li><a href="../doc/build.html">build(1)</a></li><li><a href="../doc/install.html">install(1)</a></li></ul>
</div>
<p id="footer">explore &mdash; npm@1.1.32</p>
<p id="footer">explore &mdash; npm@1.1.33</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@ -241,7 +241,7 @@ We'll have someone kick it or something.</p>
<ul><li><a href="../doc/npm.html">npm(1)</a></li><li><a href="../doc/developers.html">developers(1)</a></li><li><a href="../doc/json.html">json(1)</a></li><li><a href="../doc/config.html">config(1)</a></li><li><a href="../doc/folders.html">folders(1)</a></li></ul>
</div>
<p id="footer">faq &mdash; npm@1.1.32</p>
<p id="footer">faq &mdash; npm@1.1.33</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@ -205,7 +205,7 @@ cannot be found elsewhere. See <code><a href="../doc/json.html">json(1)</a></co
<ul><li><a href="../doc/faq.html">faq(1)</a></li><li><a href="../doc/json.html">json(1)</a></li><li><a href="../doc/install.html">install(1)</a></li><li><a href="../doc/pack.html">pack(1)</a></li><li><a href="../doc/cache.html">cache(1)</a></li><li><a href="../doc/config.html">config(1)</a></li><li><a href="../doc/publish.html">publish(1)</a></li></ul>
</div>
<p id="footer">folders &mdash; npm@1.1.32</p>
<p id="footer">folders &mdash; npm@1.1.33</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@ -38,7 +38,7 @@ where the terms were found in the documentation.</p>
<ul><li><a href="../doc/npm.html">npm(1)</a></li><li><a href="../doc/faq.html">faq(1)</a></li><li><a href="../doc/help.html">help(1)</a></li></ul>
</div>
<p id="footer">help-search &mdash; npm@1.1.32</p>
<p id="footer">help-search &mdash; npm@1.1.33</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@ -36,7 +36,7 @@ matches are equivalent to specifying a topic name.</p>
<ul><li><a href="../doc/npm.html">npm(1)</a></li><li><a href="../doc/README.html">README</a></li><li><a href="../doc/faq.html">faq(1)</a></li><li><a href="../doc/folders.html">folders(1)</a></li><li><a href="../doc/config.html">config(1)</a></li><li><a href="../doc/json.html">json(1)</a></li><li><a href="../doc/help-search.html">help-search(1)</a></li><li><a href="../doc/index.html">index(1)</a></li></ul>
</div>
<p id="footer">help &mdash; npm@1.1.32</p>
<p id="footer">help &mdash; npm@1.1.33</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@ -384,7 +384,7 @@
<p> Display npm username</p>
</div>
<p id="footer">index &mdash; npm@1.1.32</p>
<p id="footer">index &mdash; npm@1.1.33</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@ -29,7 +29,7 @@ without a really good reason to do so.</p>
<ul><li><a href="https://github.com/isaacs/init-package-json">https://github.com/isaacs/init-package-json</a></li><li><a href="../doc/json.html">json(1)</a></li><li><a href="../doc/version.html">version(1)</a></li></ul>
</div>
<p id="footer">init &mdash; npm@1.1.32</p>
<p id="footer">init &mdash; npm@1.1.33</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@ -133,7 +133,7 @@ affects a real use-case, it will be investigated.</p>
<ul><li><a href="../doc/folders.html">folders(1)</a></li><li><a href="../doc/update.html">update(1)</a></li><li><a href="../doc/link.html">link(1)</a></li><li><a href="../doc/rebuild.html">rebuild(1)</a></li><li><a href="../doc/scripts.html">scripts(1)</a></li><li><a href="../doc/build.html">build(1)</a></li><li><a href="../doc/config.html">config(1)</a></li><li><a href="../doc/registry.html">registry(1)</a></li><li><a href="../doc/folders.html">folders(1)</a></li><li><a href="../doc/tag.html">tag(1)</a></li><li><a href="../doc/rm.html">rm(1)</a></li><li><a href="../doc/shrinkwrap.html">shrinkwrap(1)</a></li></ul>
</div>
<p id="footer">install &mdash; npm@1.1.32</p>
<p id="footer">install &mdash; npm@1.1.33</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@ -425,8 +425,7 @@ if (foo) {
<h2 id="engines">engines</h2>
<p>You can specify the version of
node that your stuff works on:</p>
<p>You can specify the version of node that your stuff works on:</p>
<pre><code>{ "engines" : { "node" : "&gt;=0.1.27 &lt;0.1.30" } }</code></pre>
@ -442,6 +441,22 @@ are capable of properly installing your program. For example:</p>
<pre><code>{ "engines" : { "npm" : "~1.0.20" } }</code></pre>
<p>Note that, unless the user has set the <code>engine-strict</code> config flag, this
field is advisory only.</p>
<h2 id="engineStrict">engineStrict</h2>
<p>If you are sure that your module will <em>definitely not</em> run properly on
versions of Node/npm other than those specified in the <code>engines</code> hash,
then you can set <code>"engineStrict": true</code> in your package.json file.
This will override the user's <code>engine-strict</code> config setting.</p>
<p>Please do not do this unless you are really very very sure. If your
engines hash is something overly restrictive, you can quite easily and
inadvertently lock yourself into obscurity and prevent your users from
updating to new versions of Node. Consider this choice carefully. If
people abuse it, it will be removed in a future version of npm.</p>
<h2 id="os">os</h2>
<p>You can specify which operating systems your
@ -509,7 +524,7 @@ overridden.</p>
<ul><li><a href="../doc/semver.html">semver(1)</a></li><li><a href="../doc/init.html">init(1)</a></li><li><a href="../doc/version.html">version(1)</a></li><li><a href="../doc/config.html">config(1)</a></li><li><a href="../doc/help.html">help(1)</a></li><li><a href="../doc/faq.html">faq(1)</a></li><li><a href="../doc/install.html">install(1)</a></li><li><a href="../doc/publish.html">publish(1)</a></li><li><a href="../doc/rm.html">rm(1)</a></li></ul>
</div>
<p id="footer">json &mdash; npm@1.1.32</p>
<p id="footer">json &mdash; npm@1.1.33</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@ -58,7 +58,7 @@ installation target into your project's <code>node_modules</code> folder.</p>
<ul><li><a href="../doc/developers.html">developers(1)</a></li><li><a href="../doc/faq.html">faq(1)</a></li><li><a href="../doc/json.html">json(1)</a></li><li><a href="../doc/install.html">install(1)</a></li><li><a href="../doc/folders.html">folders(1)</a></li><li><a href="../doc/config.html">config(1)</a></li></ul>
</div>
<p id="footer">link &mdash; npm@1.1.32</p>
<p id="footer">link &mdash; npm@1.1.33</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@ -58,7 +58,7 @@ project.</p>
<ul><li><a href="../doc/config.html">config(1)</a></li><li><a href="../doc/folders.html">folders(1)</a></li><li><a href="../doc/install.html">install(1)</a></li><li><a href="../doc/link.html">link(1)</a></li><li><a href="../doc/prune.html">prune(1)</a></li><li><a href="../doc/outdated.html">outdated(1)</a></li><li><a href="../doc/update.html">update(1)</a></li></ul>
</div>
<p id="footer">list &mdash; npm@1.1.32</p>
<p id="footer">list &mdash; npm@1.1.33</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@ -14,7 +14,7 @@
<h2 id="VERSION">VERSION</h2>
<p>1.1.32</p>
<p>1.1.33</p>
<h2 id="DESCRIPTION">DESCRIPTION</h2>
@ -135,7 +135,7 @@ will no doubt tell you to put the output in a gist or email.</p>
<ul><li><a href="../doc/help.html">help(1)</a></li><li><a href="../doc/faq.html">faq(1)</a></li><li><a href="../doc/README.html">README</a></li><li><a href="../doc/json.html">json(1)</a></li><li><a href="../doc/install.html">install(1)</a></li><li><a href="../doc/config.html">config(1)</a></li><li><a href="../doc/index.html">index(1)</a></li><li><a href="../api/npm.html">npm(3)</a></li></ul>
</div>
<p id="footer">npm &mdash; npm@1.1.32</p>
<p id="footer">npm &mdash; npm@1.1.33</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@ -21,7 +21,7 @@ packages are currently outdated.</p>
<ul><li><a href="../doc/update.html">update(1)</a></li><li><a href="../doc/registry.html">registry(1)</a></li><li><a href="../doc/folders.html">folders(1)</a></li></ul>
</div>
<p id="footer">outdated &mdash; npm@1.1.32</p>
<p id="footer">outdated &mdash; npm@1.1.33</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@ -34,7 +34,7 @@ that is not implemented at this time.</p>
<ul><li><a href="../doc/publish.html">publish(1)</a></li><li><a href="../doc/registry.html">registry(1)</a></li><li><a href="../doc/adduser.html">adduser(1)</a></li><li><a href="../doc/disputes.html">disputes(1)</a></li></ul>
</div>
<p id="footer">owner &mdash; npm@1.1.32</p>
<p id="footer">owner &mdash; npm@1.1.33</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@ -29,7 +29,7 @@ overwritten the second time.</p>
<ul><li><a href="../doc/cache.html">cache(1)</a></li><li><a href="../doc/publish.html">publish(1)</a></li><li><a href="../doc/config.html">config(1)</a></li></ul>
</div>
<p id="footer">pack &mdash; npm@1.1.32</p>
<p id="footer">pack &mdash; npm@1.1.33</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@ -20,7 +20,7 @@
<ul><li><a href="../doc/root.html">root(1)</a></li><li><a href="../doc/bin.html">bin(1)</a></li><li><a href="../doc/folders.html">folders(1)</a></li><li><a href="../doc/config.html">config(1)</a></li></ul>
</div>
<p id="footer">prefix &mdash; npm@1.1.32</p>
<p id="footer">prefix &mdash; npm@1.1.33</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@ -25,7 +25,7 @@ package's dependencies list.</p>
<ul><li><a href="../doc/rm.html">rm(1)</a></li><li><a href="../doc/folders.html">folders(1)</a></li><li><a href="../doc/list.html">list(1)</a></li></ul>
</div>
<p id="footer">prune &mdash; npm@1.1.32</p>
<p id="footer">prune &mdash; npm@1.1.33</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@ -29,7 +29,7 @@ the registry. Overwrites when the "--force" flag is set.</p>
<ul><li><a href="../doc/registry.html">registry(1)</a></li><li><a href="../doc/adduser.html">adduser(1)</a></li><li><a href="../doc/owner.html">owner(1)</a></li><li><a href="../doc/deprecate.html">deprecate(1)</a></li><li><a href="../doc/tag.html">tag(1)</a></li></ul>
</div>
<p id="footer">publish &mdash; npm@1.1.32</p>
<p id="footer">publish &mdash; npm@1.1.33</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@ -25,7 +25,7 @@ the new binary.</p>
<ul><li><a href="../doc/build.html">build(1)</a></li><li><a href="../doc/install.html">install(1)</a></li></ul>
</div>
<p id="footer">rebuild &mdash; npm@1.1.32</p>
<p id="footer">rebuild &mdash; npm@1.1.33</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@ -97,7 +97,7 @@ ask for help on the <a href="mailto:npm-@googlegroups.com">npm-@googlegroups.com
<ul><li><a href="../doc/config.html">config(1)</a></li><li><a href="../doc/developers.html">developers(1)</a></li><li><a href="../doc/disputes.html">disputes(1)</a></li></ul>
</div>
<p id="footer">registry &mdash; npm@1.1.32</p>
<p id="footer">registry &mdash; npm@1.1.33</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@ -58,7 +58,7 @@ modules. To track those down, you can do the following:</p>
<ul><li><a href="../doc/README.html">README</a></li><li><a href="../doc/rm.html">rm(1)</a></li><li><a href="../doc/prune.html">prune(1)</a></li></ul>
</div>
<p id="footer">removing-npm &mdash; npm@1.1.32</p>
<p id="footer">removing-npm &mdash; npm@1.1.33</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@ -24,7 +24,7 @@ the "start" script.</p>
<ul><li><a href="../doc/run-script.html">run-script(1)</a></li><li><a href="../doc/scripts.html">scripts(1)</a></li><li><a href="../doc/test.html">test(1)</a></li><li><a href="../doc/start.html">start(1)</a></li><li><a href="../doc/stop.html">stop(1)</a></li></ul>
</div>
<p id="footer">restart &mdash; npm@1.1.32</p>
<p id="footer">restart &mdash; npm@1.1.33</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@ -20,7 +20,7 @@
<ul><li><a href="../doc/prefix.html">prefix(1)</a></li><li><a href="../doc/bin.html">bin(1)</a></li><li><a href="../doc/folders.html">folders(1)</a></li><li><a href="../doc/config.html">config(1)</a></li></ul>
</div>
<p id="footer">root &mdash; npm@1.1.32</p>
<p id="footer">root &mdash; npm@1.1.33</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@ -23,7 +23,7 @@ called directly, as well.</p>
<ul><li><a href="../doc/scripts.html">scripts(1)</a></li><li><a href="../doc/test.html">test(1)</a></li><li><a href="../doc/start.html">start(1)</a></li><li><a href="../doc/restart.html">restart(1)</a></li><li><a href="../doc/stop.html">stop(1)</a></li></ul>
</div>
<p id="footer">run-script &mdash; npm@1.1.32</p>
<p id="footer">run-script &mdash; npm@1.1.33</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@ -177,7 +177,7 @@ will sudo the npm command in question.</li></ul>
<ul><li><a href="../doc/run-script.html">run-script(1)</a></li><li><a href="../doc/json.html">json(1)</a></li><li><a href="../doc/developers.html">developers(1)</a></li><li><a href="../doc/install.html">install(1)</a></li></ul>
</div>
<p id="footer">scripts &mdash; npm@1.1.32</p>
<p id="footer">scripts &mdash; npm@1.1.33</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@ -24,7 +24,7 @@ expression characters must be escaped or quoted in most shells.)</p>
<ul><li><a href="../doc/registry.html">registry(1)</a></li><li><a href="../doc/config.html">config(1)</a></li><li><a href="../doc/view.html">view(1)</a></li></ul>
</div>
<p id="footer">search &mdash; npm@1.1.32</p>
<p id="footer">search &mdash; npm@1.1.33</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@ -104,7 +104,7 @@ that satisfies the range, or null if none of them do.</li></ul>
<ul><li><a href="../doc/json.html">json(1)</a></li></ul>
</div>
<p id="footer">semver &mdash; npm@1.1.32</p>
<p id="footer">semver &mdash; npm@1.1.33</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@ -169,7 +169,7 @@ versions.</p>
<ul><li><a href="../doc/install.html">install(1)</a></li><li><a href="../doc/json.html">json(1)</a></li><li><a href="../doc/list.html">list(1)</a></li></ul>
</div>
<p id="footer">shrinkwrap &mdash; npm@1.1.32</p>
<p id="footer">shrinkwrap &mdash; npm@1.1.33</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@ -26,7 +26,7 @@ a vaguely positive way to show that you care.</p>
<ul><li><a href="../doc/view.html">view(1)</a></li><li><a href="../doc/whoami.html">whoami(1)</a></li><li><a href="../doc/adduser.html">adduser(1)</a></li></ul>
</div>
<p id="footer">star &mdash; npm@1.1.32</p>
<p id="footer">star &mdash; npm@1.1.33</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@ -20,7 +20,7 @@
<ul><li><a href="../doc/run-script.html">run-script(1)</a></li><li><a href="../doc/scripts.html">scripts(1)</a></li><li><a href="../doc/test.html">test(1)</a></li><li><a href="../doc/restart.html">restart(1)</a></li><li><a href="../doc/stop.html">stop(1)</a></li></ul>
</div>
<p id="footer">start &mdash; npm@1.1.32</p>
<p id="footer">start &mdash; npm@1.1.33</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@ -20,7 +20,7 @@
<ul><li><a href="../doc/run-script.html">run-script(1)</a></li><li><a href="../doc/scripts.html">scripts(1)</a></li><li><a href="../doc/test.html">test(1)</a></li><li><a href="../doc/start.html">start(1)</a></li><li><a href="../doc/restart.html">restart(1)</a></li></ul>
</div>
<p id="footer">stop &mdash; npm@1.1.32</p>
<p id="footer">stop &mdash; npm@1.1.33</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@ -33,7 +33,7 @@ dependencies into the submodule folder.</p>
<ul><li><a href="../doc/json.html">json(1)</a></li><li>git help submodule</li></ul>
</div>
<p id="footer">submodule &mdash; npm@1.1.32</p>
<p id="footer">submodule &mdash; npm@1.1.33</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@ -21,7 +21,7 @@
<ul><li><a href="../doc/publish.html">publish(1)</a></li><li><a href="../doc/registry.html">registry(1)</a></li><li><a href="../doc/config.html">config(1)</a></li></ul>
</div>
<p id="footer">tag &mdash; npm@1.1.32</p>
<p id="footer">tag &mdash; npm@1.1.33</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@ -23,7 +23,7 @@ true.</p>
<ul><li><a href="../doc/run-script.html">run-script(1)</a></li><li><a href="../doc/scripts.html">scripts(1)</a></li><li><a href="../doc/start.html">start(1)</a></li><li><a href="../doc/restart.html">restart(1)</a></li><li><a href="../doc/stop.html">stop(1)</a></li></ul>
</div>
<p id="footer">test &mdash; npm@1.1.32</p>
<p id="footer">test &mdash; npm@1.1.33</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@ -22,7 +22,7 @@ on its behalf.</p>
<ul><li><a href="../doc/prune.html">prune(1)</a></li><li><a href="../doc/install.html">install(1)</a></li><li><a href="../doc/folders.html">folders(1)</a></li><li><a href="../doc/config.html">config(1)</a></li></ul>
</div>
<p id="footer">uninstall &mdash; npm@1.1.32</p>
<p id="footer">uninstall &mdash; npm@1.1.33</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@ -34,7 +34,7 @@ the root package entry is removed from the registry entirely.</p>
<ul><li><a href="../doc/deprecate.html">deprecate(1)</a></li><li><a href="../doc/publish.html">publish(1)</a></li><li><a href="../doc/registry.html">registry(1)</a></li><li><a href="../doc/adduser.html">adduser(1)</a></li><li><a href="../doc/owner.html">owner(1)</a></li></ul>
</div>
<p id="footer">unpublish &mdash; npm@1.1.32</p>
<p id="footer">unpublish &mdash; npm@1.1.33</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@ -23,7 +23,7 @@
<ul><li><a href="../doc/install.html">install(1)</a></li><li><a href="../doc/outdated.html">outdated(1)</a></li><li><a href="../doc/registry.html">registry(1)</a></li><li><a href="../doc/folders.html">folders(1)</a></li><li><a href="../doc/list.html">list(1)</a></li></ul>
</div>
<p id="footer">update &mdash; npm@1.1.32</p>
<p id="footer">update &mdash; npm@1.1.33</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@ -31,7 +31,7 @@ will use it as a commit message when creating a version commit.</p>
<ul><li><a href="../doc/init.html">init(1)</a></li><li><a href="../doc/json.html">json(1)</a></li><li><a href="../doc/semver.html">semver(1)</a></li></ul>
</div>
<p id="footer">version &mdash; npm@1.1.32</p>
<p id="footer">version &mdash; npm@1.1.33</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@ -88,7 +88,7 @@ the field name.</p>
<ul><li><a href="../doc/search.html">search(1)</a></li><li><a href="../doc/registry.html">registry(1)</a></li><li><a href="../doc/config.html">config(1)</a></li><li><a href="../doc/docs.html">docs(1)</a></li></ul>
</div>
<p id="footer">view &mdash; npm@1.1.32</p>
<p id="footer">view &mdash; npm@1.1.33</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@ -20,7 +20,7 @@
<ul><li><a href="../doc/config.html">config(1)</a></li><li><a href="../doc/adduser.html">adduser(1)</a></li></ul>
</div>
<p id="footer">whoami &mdash; npm@1.1.32</p>
<p id="footer">whoami &mdash; npm@1.1.33</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

276
deps/npm/lib/cache.js vendored
View File

@ -1,6 +1,30 @@
// XXX lib/utils/tar.js and this file need to be rewritten.
// URL-to-cache folder mapping:
// : -> !
// @ -> _
// http://registry.npmjs.org/foo/version -> cache/http!/...
//
/*
fetching a url:
1. Check for url in inFlightUrls. If present, add cb, and return.
2. create inFlightURL list
3. Acquire lock at {cache}/{sha(url)}.lock
retries = {cache-lock-retries, def=3}
stale = {cache-lock-stale, def=30000}
wait = {cache-lock-wait, def=100}
4. if lock can't be acquired, then fail
5. fetch url, clear lock, call cbs
cache folders:
1. urls: http!/server.com/path/to/thing
2. c:\path\to\thing: file!/c!/path/to/thing
3. /path/to/thing: file!/path/to/thing
4. git@ private: git_github.com!isaacs/npm
5. git://public: git!/github.com/isaacs/npm
6. git+blah:// git-blah!/server.com/foo/bar
adding a folder:
1. tar into tmp/random/package.tgz
2. untar into tmp/random/contents/package, stripping one dir piece
@ -49,6 +73,9 @@ var mkdir = require("mkdirp")
, fileCompletion = require("./utils/completion/file-completion.js")
, url = require("url")
, chownr = require("chownr")
, lockFile = require("lockfile")
, crypto = require("crypto")
, retry = require("retry")
cache.usage = "npm cache add <tarball file>"
+ "\nnpm cache add <folder>"
@ -238,10 +265,26 @@ function add (args, cb) {
default:
// if we have a name and a spec, then try name@spec
// if not, then try just spec (which may try name@"" if not found)
return name ? addNamed(name, spec, cb) : addLocal(spec, cb)
if (name) {
addNamed(name, spec, cb)
} else {
addLocal(spec, cb)
}
}
}
function fetchAndShaCheck (u, tmp, shasum, cb) {
fetch(u, tmp, function (er, response) {
if (er) {
log.error("fetch failed", u)
return cb(er, response)
}
if (!shasum) return cb()
// validate that the url we just downloaded matches the expected shasum.
sha.check(tmp, shasum, cb)
})
}
// Only have a single download action at once for a given url
// additional calls stack the callbacks.
var inFlightURLs = {}
@ -255,29 +298,48 @@ function addRemoteTarball (u, shasum, name, cb_) {
if (iF.length > 1) return
function cb (er, data) {
var c
while (c = iF.shift()) c(er, data)
delete inFlightURLs[u]
unlock(u, function () {
var c
while (c = iF.shift()) c(er, data)
delete inFlightURLs[u]
})
}
log.verbose("addRemoteTarball", [u, shasum])
var tmp = path.join(npm.tmp, Date.now()+"-"+Math.random(), "tmp.tgz")
mkdir(path.dirname(tmp), function (er) {
lock(u, function (er) {
if (er) return cb(er)
fetch(u, tmp, function (er) {
if (er) {
log.error("fetch failed", u)
return cb(er)
}
if (!shasum) return done()
// validate that the url we just downloaded matches the expected shasum.
sha.check(tmp, shasum, done)
log.verbose("addRemoteTarball", [u, shasum])
var tmp = path.join(npm.tmp, Date.now()+"-"+Math.random(), "tmp.tgz")
mkdir(path.dirname(tmp), function (er) {
if (er) return cb(er)
// Tuned to spread 3 attempts over about a minute.
// See formula at <https://github.com/tim-kos/node-retry>.
var operation = retry.operation
( { retries: npm.config.get("fetch-retries")
, factor: npm.config.get("fetch-retry-factor")
, minTimeout: npm.config.get("fetch-retry-mintimeout")
, maxTimeout: npm.config.get("fetch-retry-maxtimeout") })
operation.attempt(function (currentAttempt) {
log.info("retry", "fetch attempt " + currentAttempt
+ " at " + (new Date()).toLocaleTimeString())
fetchAndShaCheck(u, tmp, shasum, function (er, response) {
// Only retry on 408, 5xx or no `response`.
var statusCode = response && response.statusCode
var statusRetry = !statusCode || (statusCode === 408 || statusCode >= 500)
if (er && statusRetry && operation.retry(er)) {
log.info("retry", "will retry, error on last attempt: " + er)
return
}
done(er)
})
})
})
function done (er) {
if (er) return cb(er)
addLocalTarball(tmp, name, cb)
}
})
function done (er) {
if (er) return cb(er)
addLocalTarball(tmp, name, cb)
}
}
// For now, this is kind of dumb. Just basically treat git as
@ -292,48 +354,54 @@ function addRemoteGit (u, parsed, name, cb_) {
if (iF.length > 1) return
function cb (er, data) {
var c
while (c = iF.shift()) c(er, data)
delete inFlightURLs[u]
unlock(u, function () {
var c
while (c = iF.shift()) c(er, data)
delete inFlightURLs[u]
})
}
// figure out what we should check out.
var co = parsed.hash && parsed.hash.substr(1) || "master"
// git is so tricky!
// if the path is like ssh://foo:22/some/path then it works, but
// it needs the ssh://
// If the path is like ssh://foo:some/path then it works, but
// only if you remove the ssh://
u = u.replace(/^git\+/, "")
.replace(/#.*$/, "")
// ssh paths that are scp-style urls don't need the ssh://
if (parsed.pathname.match(/^\/?:/)) {
u = u.replace(/^ssh:\/\//, "")
}
log.verbose("addRemoteGit", [u, co])
var tmp = path.join(npm.tmp, Date.now()+"-"+Math.random())
mkdir(path.dirname(tmp), function (er) {
lock(u, function (er) {
if (er) return cb(er)
exec( npm.config.get("git"), ["clone", u, tmp], null, false
, function (er, code, stdout, stderr) {
stdout = (stdout + "\n" + stderr).trim()
if (er) {
log.error("git clone " + u, stdout)
return cb(er)
}
log.verbose("git clone "+u, stdout)
exec( npm.config.get("git"), ["checkout", co], null, false, tmp
// figure out what we should check out.
var co = parsed.hash && parsed.hash.substr(1) || "master"
// git is so tricky!
// if the path is like ssh://foo:22/some/path then it works, but
// it needs the ssh://
// If the path is like ssh://foo:some/path then it works, but
// only if you remove the ssh://
u = u.replace(/^git\+/, "")
.replace(/#.*$/, "")
// ssh paths that are scp-style urls don't need the ssh://
if (parsed.pathname.match(/^\/?:/)) {
u = u.replace(/^ssh:\/\//, "")
}
log.verbose("addRemoteGit", [u, co])
var tmp = path.join(npm.tmp, Date.now()+"-"+Math.random())
mkdir(path.dirname(tmp), function (er) {
if (er) return cb(er)
exec( npm.config.get("git"), ["clone", u, tmp], null, false
, function (er, code, stdout, stderr) {
stdout = (stdout + "\n" + stderr).trim()
if (er) {
log.error("git checkout " + co, stdout)
log.error("git clone " + u, stdout)
return cb(er)
}
log.verbose("git checkout " + co, stdout)
addLocalDirectory(tmp, cb)
log.verbose("git clone "+u, stdout)
exec( npm.config.get("git"), ["checkout", co], null, false, tmp
, function (er, code, stdout, stderr) {
stdout = (stdout + "\n" + stderr).trim()
if (er) {
log.error("git checkout " + co, stdout)
return cb(er)
}
log.verbose("git checkout " + co, stdout)
addLocalDirectory(tmp, cb)
})
})
})
})
@ -343,8 +411,10 @@ function addRemoteGit (u, parsed, name, cb_) {
// only have one request in flight for a given
// name@blah thing.
var inFlightNames = {}
function addNamed (name, x, cb_) {
function addNamed (name, x, data, cb_) {
if (typeof cb_ !== "function") cb_ = data, data = null
log.verbose("addNamed", [name, x])
var k = name + "@" + x
if (!inFlightNames[k]) inFlightNames[k] = []
var iF = inFlightNames[k]
@ -352,19 +422,27 @@ function addNamed (name, x, cb_) {
if (iF.length > 1) return
function cb (er, data) {
var c
while (c = iF.shift()) c(er, data)
delete inFlightNames[k]
unlock(k, function () {
var c
while (c = iF.shift()) c(er, data)
delete inFlightNames[k]
})
}
log.verbose("addNamed", [semver.valid(x), semver.validRange(x)])
return ( null !== semver.valid(x) ? addNameVersion
: null !== semver.validRange(x) ? addNameRange
: addNameTag
)(name, x, cb)
lock(k, function (er, fd) {
if (er) return cb(er)
var fn = ( null !== semver.valid(x) ? addNameVersion
: null !== semver.validRange(x) ? addNameRange
: addNameTag
)
fn(name, x, data, cb)
})
}
function addNameTag (name, tag, cb) {
function addNameTag (name, tag, data, cb) {
if (typeof cb !== "function") cb = data, data = null
log.info("addNameTag", [name, tag])
var explicit = true
if (!tag) {
@ -378,10 +456,10 @@ function addNameTag (name, tag, cb) {
if (data["dist-tags"] && data["dist-tags"][tag]
&& data.versions[data["dist-tags"][tag]]) {
var ver = data["dist-tags"][tag]
return addNameVersion(name, ver, data.versions[ver], cb)
return addNamed(name, ver, data.versions[ver], cb)
}
if (!explicit && Object.keys(data.versions).length) {
return addNameRange(name, "*", data, cb)
return addNamed(name, "*", data, cb)
}
return cb(installTargetsError(tag, data))
})
@ -390,12 +468,14 @@ function addNameTag (name, tag, cb) {
function engineFilter (data) {
var npmv = npm.version
, nodev = npm.config.get("node-version")
, strict = npm.config.get("engine-strict")
if (!nodev || npm.config.get("force")) return data
Object.keys(data.versions || {}).forEach(function (v) {
var eng = data.versions[v].engines
if (!eng) return
if (!strict && !data.versions[v].engineStrict) return
if (eng.node && !semver.satisfies(nodev, eng.node)
|| eng.npm && !semver.satisfies(npmv, eng.npm)) {
delete data.versions[v]
@ -438,12 +518,12 @@ function addNameRange (name, range, data, cb) {
function next_ () {
log.silly("addNameRange", "versions"
, [data.name, Object.keys(data.versions)])
, [data.name, Object.keys(data.versions || {})])
// if the tagged version satisfies, then use that.
var tagged = data["dist-tags"][npm.config.get("tag")]
if (tagged && data.versions[tagged] && semver.satisfies(tagged, range)) {
return addNameVersion(name, tagged, data.versions[tagged], cb)
return addNamed(name, tagged, data.versions[tagged], cb)
}
// find the max satisfying version.
@ -454,7 +534,7 @@ function addNameRange (name, range, data, cb) {
// if we don't have a registry connection, try to see if
// there's a cached copy that will be ok.
addNameVersion(name, ms, data.versions[ms], cb)
addNamed(name, ms, data.versions[ms], cb)
}
}
@ -573,24 +653,29 @@ function addLocal (p, name, cb_) {
if (typeof cb_ !== "function") cb_ = name, name = ""
function cb (er, data) {
if (er) {
// if it doesn't have a / in it, it might be a
// remote thing.
if (p.indexOf("/") === -1 && p.charAt(0) !== "."
&& (process.platform !== "win32" || p.indexOf("\\") === -1)) {
return addNamed(p, "", cb_)
unlock(p, function () {
if (er) {
// if it doesn't have a / in it, it might be a
// remote thing.
if (p.indexOf("/") === -1 && p.charAt(0) !== "."
&& (process.platform !== "win32" || p.indexOf("\\") === -1)) {
return addNamed(p, "", cb_)
}
log.error("addLocal", "Could not install %s", p)
return cb_(er)
}
log.error("addLocal", "Could not install %s", p)
return cb_(er)
}
return cb_(er, data)
return cb_(er, data)
})
}
// figure out if this is a folder or file.
fs.stat(p, function (er, s) {
lock(p, function (er) {
if (er) return cb(er)
if (s.isDirectory()) addLocalDirectory(p, name, cb)
else addLocalTarball(p, name, cb)
// figure out if this is a folder or file.
fs.stat(p, function (er, s) {
if (er) return cb(er)
if (s.isDirectory()) addLocalDirectory(p, name, cb)
else addLocalTarball(p, name, cb)
})
})
}
@ -847,3 +932,32 @@ function deprCheck (data) {
log.warn("deprecated", "%s: %s", data._id, data.deprecated)
}
}
function lockFileName (u) {
var c = u.replace(/[^a-zA-Z0-9]+/g, '-')
, h = crypto.createHash("sha1").update(u).digest("hex")
return path.resolve(npm.config.get("cache"), h + "-" + c + ".lock")
}
var madeCache = false
function lock (u, cb) {
// the cache dir needs to exist already for this.
if (madeCache) then()
else mkdir(npm.config.get("cache"), function (er) {
if (er) return cb(er)
madeCache = true
then()
})
function then () {
var opts = { stale: npm.config.get("cache-lock-stale")
, retries: npm.config.get("cache-lock-retries")
, wait: npm.config.get("cache-lock-wait") }
var lf = lockFileName(u)
log.verbose("lock", u, lf)
lockFile.lock(lf, opts, cb)
}
}
function unlock (u, cb) {
lockFile.unlock(lockFileName(u), cb)
}

View File

@ -710,15 +710,21 @@ function checkEngine (target, cb) {
var npmv = npm.version
, force = npm.config.get("force")
, nodev = force ? null : npm.config.get("node-version")
, strict = npm.config.get("engine-strict") || target.engineStrict
, eng = target.engines
if (!eng) return cb()
if (nodev && eng.node && !semver.satisfies(nodev, eng.node)
|| eng.npm && !semver.satisfies(npmv, eng.npm)) {
var er = new Error("Unsupported")
er.code = "ENOTSUP"
er.required = eng
er.pkgid = target._id
return cb(er)
if (strict) {
var er = new Error("Unsupported")
er.code = "ENOTSUP"
er.required = eng
er.pkgid = target._id
return cb(er)
} else {
log.warn( "engine", "%s: wanted: %j (current: %j)"
, target._id, eng, {node: nodev, npm: npm.version} )
}
}
return cb()
}

21
deps/npm/lib/npm.js vendored
View File

@ -57,13 +57,13 @@ try {
npm.version = j.version
npm.nodeVersionRequired = j.engines.node
if (!semver.satisfies(process.version, j.engines.node)) {
log.error("unsupported version", [""
,"npm requires node version: "+j.engines.node
,"And you have: "+process.version
,"which is not satisfactory."
,""
,"Bad things will likely happen. You have been warned."
,""].join("\n"))
log.warn("unsupported version", [""
,"npm requires node version: "+j.engines.node
,"And you have: "+process.version
,"which is not satisfactory."
,""
,"Bad things will likely happen. You have been warned."
,""].join("\n"))
}
} catch (ex) {
try {
@ -98,6 +98,7 @@ var commandCache = {}
, "apihelp" : "help"
, "login": "adduser"
, "add-user": "adduser"
, "tst": "test"
}
, aliasNames = Object.keys(aliases)
@ -287,6 +288,10 @@ function load (npm, conf, cb) {
, E404: npm.E404
, EPUBLISHCONFLICT: npm.EPUBLISHCONFLICT
, log: log
, retries: npm.config.get("fetch-retries")
, retryFactor: npm.config.get("fetch-retry-factor")
, retryMinTimeout: npm.config.get("fetch-retry-mintimeout")
, retryMaxTimeout: npm.config.get("fetch-retry-maxtimeout")
})
var umask = parseInt(conf.umask, 8)
@ -443,7 +448,7 @@ Object.defineProperty(npm, "cache",
var tmpFolder
Object.defineProperty(npm, "tmp",
{ get : function () {
if (!tmpFolder) tmpFolder = "npm-"+Date.now()
if (!tmpFolder) tmpFolder = "npm-" + process.pid
return path.resolve(npm.config.get("tmp"), tmpFolder)
}
, enumerable : true

Some files were not shown because too many files have changed in this diff Show More