npm: Upgrade to v1.2.0
authorisaacs <i@izs.me>
Wed, 9 Jan 2013 23:21:30 +0000 (15:21 -0800)
committerisaacs <i@izs.me>
Wed, 9 Jan 2013 23:21:30 +0000 (15:21 -0800)
222 files changed:
deps/npm/doc/cli/json.md
deps/npm/doc/cli/scripts.md
deps/npm/doc/cli/semver.md
deps/npm/html/api/bin.html
deps/npm/html/api/bugs.html
deps/npm/html/api/commands.html
deps/npm/html/api/config.html
deps/npm/html/api/deprecate.html
deps/npm/html/api/docs.html
deps/npm/html/api/edit.html
deps/npm/html/api/explore.html
deps/npm/html/api/help-search.html
deps/npm/html/api/init.html
deps/npm/html/api/install.html
deps/npm/html/api/link.html
deps/npm/html/api/load.html
deps/npm/html/api/ls.html
deps/npm/html/api/npm.html
deps/npm/html/api/outdated.html
deps/npm/html/api/owner.html
deps/npm/html/api/pack.html
deps/npm/html/api/prefix.html
deps/npm/html/api/prune.html
deps/npm/html/api/publish.html
deps/npm/html/api/rebuild.html
deps/npm/html/api/restart.html
deps/npm/html/api/root.html
deps/npm/html/api/run-script.html
deps/npm/html/api/search.html
deps/npm/html/api/shrinkwrap.html
deps/npm/html/api/start.html
deps/npm/html/api/stop.html
deps/npm/html/api/submodule.html
deps/npm/html/api/tag.html
deps/npm/html/api/test.html
deps/npm/html/api/uninstall.html
deps/npm/html/api/unpublish.html
deps/npm/html/api/update.html
deps/npm/html/api/version.html
deps/npm/html/api/view.html
deps/npm/html/api/whoami.html
deps/npm/html/doc/README.html
deps/npm/html/doc/adduser.html
deps/npm/html/doc/bin.html
deps/npm/html/doc/bugs.html
deps/npm/html/doc/build.html
deps/npm/html/doc/bundle.html
deps/npm/html/doc/cache.html
deps/npm/html/doc/changelog.html
deps/npm/html/doc/coding-style.html
deps/npm/html/doc/completion.html
deps/npm/html/doc/config.html
deps/npm/html/doc/dedupe.html
deps/npm/html/doc/deprecate.html
deps/npm/html/doc/developers.html
deps/npm/html/doc/disputes.html
deps/npm/html/doc/docs.html
deps/npm/html/doc/edit.html
deps/npm/html/doc/explore.html
deps/npm/html/doc/faq.html
deps/npm/html/doc/folders.html
deps/npm/html/doc/help-search.html
deps/npm/html/doc/help.html
deps/npm/html/doc/index.html
deps/npm/html/doc/init.html
deps/npm/html/doc/install.html
deps/npm/html/doc/json.html
deps/npm/html/doc/link.html
deps/npm/html/doc/ls.html
deps/npm/html/doc/npm.html
deps/npm/html/doc/outdated.html
deps/npm/html/doc/owner.html
deps/npm/html/doc/pack.html
deps/npm/html/doc/prefix.html
deps/npm/html/doc/prune.html
deps/npm/html/doc/publish.html
deps/npm/html/doc/rebuild.html
deps/npm/html/doc/registry.html
deps/npm/html/doc/removing-npm.html
deps/npm/html/doc/restart.html
deps/npm/html/doc/root.html
deps/npm/html/doc/run-script.html
deps/npm/html/doc/scripts.html
deps/npm/html/doc/search.html
deps/npm/html/doc/semver.html
deps/npm/html/doc/shrinkwrap.html
deps/npm/html/doc/star.html
deps/npm/html/doc/start.html
deps/npm/html/doc/stop.html
deps/npm/html/doc/submodule.html
deps/npm/html/doc/tag.html
deps/npm/html/doc/test.html
deps/npm/html/doc/uninstall.html
deps/npm/html/doc/unpublish.html
deps/npm/html/doc/update.html
deps/npm/html/doc/version.html
deps/npm/html/doc/view.html
deps/npm/html/doc/whoami.html
deps/npm/lib/cache.js
deps/npm/lib/dedupe.js
deps/npm/lib/deprecate.js
deps/npm/lib/install.js
deps/npm/lib/ls.js
deps/npm/lib/outdated.js
deps/npm/lib/publish.js
deps/npm/lib/run-script.js
deps/npm/lib/uninstall.js
deps/npm/lib/unpublish.js
deps/npm/lib/utils/lifecycle.js
deps/npm/man/man1/README.1
deps/npm/man/man1/adduser.1
deps/npm/man/man1/bin.1
deps/npm/man/man1/bugs.1
deps/npm/man/man1/build.1
deps/npm/man/man1/bundle.1
deps/npm/man/man1/cache.1
deps/npm/man/man1/changelog.1
deps/npm/man/man1/coding-style.1
deps/npm/man/man1/completion.1
deps/npm/man/man1/config.1
deps/npm/man/man1/dedupe.1
deps/npm/man/man1/deprecate.1
deps/npm/man/man1/developers.1
deps/npm/man/man1/disputes.1
deps/npm/man/man1/docs.1
deps/npm/man/man1/edit.1
deps/npm/man/man1/explore.1
deps/npm/man/man1/faq.1
deps/npm/man/man1/folders.1
deps/npm/man/man1/help-search.1
deps/npm/man/man1/help.1
deps/npm/man/man1/index.1
deps/npm/man/man1/init.1
deps/npm/man/man1/install.1
deps/npm/man/man1/json.1
deps/npm/man/man1/link.1
deps/npm/man/man1/ls.1
deps/npm/man/man1/npm.1
deps/npm/man/man1/outdated.1
deps/npm/man/man1/owner.1
deps/npm/man/man1/pack.1
deps/npm/man/man1/prefix.1
deps/npm/man/man1/prune.1
deps/npm/man/man1/publish.1
deps/npm/man/man1/rebuild.1
deps/npm/man/man1/registry.1
deps/npm/man/man1/removing-npm.1
deps/npm/man/man1/restart.1
deps/npm/man/man1/root.1
deps/npm/man/man1/run-script.1
deps/npm/man/man1/scripts.1
deps/npm/man/man1/search.1
deps/npm/man/man1/semver.1
deps/npm/man/man1/shrinkwrap.1
deps/npm/man/man1/star.1
deps/npm/man/man1/start.1
deps/npm/man/man1/stop.1
deps/npm/man/man1/submodule.1
deps/npm/man/man1/tag.1
deps/npm/man/man1/test.1
deps/npm/man/man1/uninstall.1
deps/npm/man/man1/unpublish.1
deps/npm/man/man1/update.1
deps/npm/man/man1/version.1
deps/npm/man/man1/view.1
deps/npm/man/man1/whoami.1
deps/npm/man/man3/bin.3
deps/npm/man/man3/bugs.3
deps/npm/man/man3/commands.3
deps/npm/man/man3/config.3
deps/npm/man/man3/deprecate.3
deps/npm/man/man3/docs.3
deps/npm/man/man3/edit.3
deps/npm/man/man3/explore.3
deps/npm/man/man3/help-search.3
deps/npm/man/man3/init.3
deps/npm/man/man3/install.3
deps/npm/man/man3/link.3
deps/npm/man/man3/load.3
deps/npm/man/man3/ls.3
deps/npm/man/man3/npm.3
deps/npm/man/man3/outdated.3
deps/npm/man/man3/owner.3
deps/npm/man/man3/pack.3
deps/npm/man/man3/prefix.3
deps/npm/man/man3/prune.3
deps/npm/man/man3/publish.3
deps/npm/man/man3/rebuild.3
deps/npm/man/man3/restart.3
deps/npm/man/man3/root.3
deps/npm/man/man3/run-script.3
deps/npm/man/man3/search.3
deps/npm/man/man3/shrinkwrap.3
deps/npm/man/man3/start.3
deps/npm/man/man3/stop.3
deps/npm/man/man3/submodule.3
deps/npm/man/man3/tag.3
deps/npm/man/man3/test.3
deps/npm/man/man3/uninstall.3
deps/npm/man/man3/unpublish.3
deps/npm/man/man3/update.3
deps/npm/man/man3/version.3
deps/npm/man/man3/view.3
deps/npm/man/man3/whoami.3
deps/npm/node_modules/fstream/lib/file-writer.js
deps/npm/node_modules/fstream/lib/proxy-writer.js
deps/npm/node_modules/fstream/package.json
deps/npm/node_modules/node-gyp/lib/build.js
deps/npm/node_modules/node-gyp/lib/configure.js
deps/npm/node_modules/node-gyp/lib/install.js
deps/npm/node_modules/node-gyp/package.json
deps/npm/node_modules/semver/README.md
deps/npm/node_modules/semver/package.json
deps/npm/package.json
deps/npm/test/packages/npm-test-peer-deps-invalid/README [new file with mode: 0644]
deps/npm/test/packages/npm-test-peer-deps-invalid/npm-ls.json [new file with mode: 0644]
deps/npm/test/packages/npm-test-peer-deps-invalid/package.json [new file with mode: 0644]
deps/npm/test/packages/npm-test-peer-deps-invalid/test.js [new file with mode: 0644]
deps/npm/test/packages/npm-test-peer-deps/README [new file with mode: 0644]
deps/npm/test/packages/npm-test-peer-deps/npm-ls.json [new file with mode: 0644]
deps/npm/test/packages/npm-test-peer-deps/package.json [new file with mode: 0644]
deps/npm/test/packages/npm-test-peer-deps/test.js [new file with mode: 0644]

index 46df441..c6cedaa 100644 (file)
@@ -366,8 +366,8 @@ a version in the following fashion.
 For example, the following are equivalent:
 
 * `"~1.2.3" = ">=1.2.3 <1.3.0"`
-* `"~1.2" = ">=1.2.0 <2.0.0"`
-* `"~1" = ">=1.0.0 <2.0.0"`
+* `"~1.2" = ">=1.2.0 <1.3.0"`
+* `"~1" = ">=1.0.0 <1.1.0"`
 
 ### X Version Ranges
 
index 3d33a83..0eba5f7 100644 (file)
@@ -6,6 +6,11 @@ npm-scripts(1) -- How npm handles the "scripts" field
 npm supports the "scripts" member of the package.json script, for the
 following scripts:
 
+* prepublish:
+  Run BEFORE the package is published.  (Also run on local `npm
+  install` without any arguments.)
+* publish, postpublish:
+  Run AFTER the package is published.
 * preinstall:
   Run BEFORE the package is installed
 * install, postinstall:
@@ -18,10 +23,6 @@ following scripts:
   Run BEFORE the package is updated with the update command.
 * update, postupdate:
   Run AFTER the package is updated with the update command.
-* prepublish:
-  Run BEFORE the package is published.
-* publish, postpublish:
-  Run AFTER the package is published.
 * pretest, test, posttest:
   Run by the `npm test` command.
 * prestop, stop, poststop:
@@ -35,6 +36,50 @@ following scripts:
 Additionally, arbitrary scrips can be run by doing
 `npm run-script <stage> <pkg>`.
 
+## NOTE: INSTALL SCRIPTS ARE AN ANTIPATTERN
+
+**tl;dr** Don't use `install`.  Use a `.gyp` file for compilation, and
+`prepublish` for anything else.
+
+You should almost never have to explicitly set a `preinstall` or
+`install` script.  If you are doing this, please consider if there is
+another option.
+
+The only valid use of `install` or `preinstall` scripts is for
+compilation which must be done on the target architecture.  In early
+versions of node, this was often done using the `node-waf` scripts, or
+a standalone `Makefile`, and early versions of npm required that it be
+explicitly set in package.json.  This was not portable, and harder to
+do properly.
+
+In the current version of node, the standard way to do this is using a
+`.gyp` file.  If you have a file with a `.gyp` extension in the root
+of your package, then npm will run the appropriate `node-gyp` commands
+automatically at install time.  This is the only officially supported
+method for compiling binary addons, and does not require that you add
+anything to your package.json file.
+
+If you have to do other things before your package is used, in a way
+that is not dependent on the operating system or architecture of the
+target system, then use a `prepublish` script instead.  This includes
+tasks such as:
+
+* Compile CoffeeScript source code into JavaScript.
+* Create minified versions of JavaScript source code.
+* Fetching remote resources that your package will use.
+
+The advantage of doing these things at `prepublish` time instead of
+`preinstall` or `install` time is that they can be done once, in a
+single place, and thus greatly reduce complexity and variability.
+Additionally, this means that:
+
+* You can depend on `coffee-script` as a `devDependency`, and thus
+  your users don't need to have it installed.
+* You don't need to include the minifiers in your package, reducing
+  the size for your users.
+* You don't need to rely on your users having `curl` or `wget` or
+  other system tools on the target machines.
+
 ## DEFAULT VALUES
 
 npm will default some script values based on package contents.
index 7eb2240..493dd7a 100644 (file)
@@ -11,8 +11,8 @@ As a node module:
 
     $ npm install semver
 
-    semver.valid('1.2.3') // true
-    semver.valid('a.b.c') // false
+    semver.valid('1.2.3') // '1.2.3'
+    semver.valid('a.b.c') // null
     semver.clean('  =v1.2.3   ') // '1.2.3'
     semver.satisfies('1.2.3', '1.x || >=2.5.0 || 5.0.0 - 7.2.3') // true
     semver.gt('1.2.3', '9.8.7') // false
@@ -83,7 +83,7 @@ The following range styles are supported:
 * `<1.2.3` Less than
 * `1.2.3 - 2.3.4` := `>=1.2.3 <=2.3.4`
 * `~1.2.3` := `>=1.2.3 <1.3.0`
-* `~1.2` := `>=1.2.0 <2.0.0`
+* `~1.2` := `>=1.2.0 <1.3.0`
 * `~1` := `>=1.0.0 <2.0.0`
 * `1.2.x` := `>=1.2.0 <1.3.0`
 * `1.x` := `>=1.0.0 <2.0.0`
index 05b588c..73eb5c1 100644 (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.70</p>
+<p id="footer">bin &mdash; npm@1.2.0</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 384644e..6c69e53 100644 (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.70</p>
+<p id="footer">bugs &mdash; npm@1.2.0</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 34d6280..14d9dcc 100644 (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.70</p>
+<p id="footer">commands &mdash; npm@1.2.0</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 07abff1..1158156 100644 (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.70</p>
+<p id="footer">config &mdash; npm@1.2.0</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index bf49937..80bd8f0 100644 (file)
@@ -32,7 +32,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.70</p>
+<p id="footer">deprecate &mdash; npm@1.2.0</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index b59b1d3..b0f9203 100644 (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.70</p>
+<p id="footer">docs &mdash; npm@1.2.0</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index e610fff..eaf876c 100644 (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.70</p>
+<p id="footer">edit &mdash; npm@1.2.0</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 139d8d1..d96d021 100644 (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 &#39;args&#39; 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.70</p>
+<p id="footer">explore &mdash; npm@1.2.0</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 7b9d0e7..f363d0b 100644 (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.70</p>
+<p id="footer">help-search &mdash; npm@1.2.0</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 51246b3..8e3ee9a 100644 (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.70</p>
+<p id="footer">init &mdash; npm@1.2.0</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index a0dcd1f..88faffd 100644 (file)
@@ -25,7 +25,7 @@ the name of a package to be installed.</p>
 <p>Finally, &#39;callback&#39; 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.70</p>
+<p id="footer">install &mdash; npm@1.2.0</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index c4362e5..744b7a0 100644 (file)
@@ -39,7 +39,7 @@ npm.commands.link(&#39;redis&#39;, 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.70</p>
+<p id="footer">link &mdash; npm@1.2.0</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index e2e3974..4ed5d1b 100644 (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.70</p>
+<p id="footer">load &mdash; npm@1.2.0</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 548619a..58b7e77 100644 (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.70</p>
+<p id="footer">ls &mdash; npm@1.2.0</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index a752f4a..ca4482c 100644 (file)
@@ -24,7 +24,7 @@ npm.load(configObject, function (er, npm) {
 
 <h2 id="VERSION">VERSION</h2>
 
-<p>1.1.70</p>
+<p>1.2.0</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(&quot;unp&quot;) // cmd === &quot;unpublish&quot;</code></pre>
 </div>
-<p id="footer">npm &mdash; npm@1.1.70</p>
+<p id="footer">npm &mdash; npm@1.2.0</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index cd00434..3c8427a 100644 (file)
@@ -19,7 +19,7 @@ currently outdated.</p>
 
 <p>If the &#39;packages&#39; parameter is left out, npm will check all packages.</p>
 </div>
-<p id="footer">outdated &mdash; npm@1.1.70</p>
+<p id="footer">outdated &mdash; npm@1.2.0</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index a9e85e1..f92a60b 100644 (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.70</p>
+<p id="footer">owner &mdash; npm@1.2.0</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 1c861f2..ec3cea8 100644 (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.70</p>
+<p id="footer">pack &mdash; npm@1.2.0</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index c38ccf7..9856363 100644 (file)
@@ -21,7 +21,7 @@
 
 <p>This function is not useful programmatically</p>
 </div>
-<p id="footer">prefix &mdash; npm@1.1.70</p>
+<p id="footer">prefix &mdash; npm@1.2.0</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 53fe82a..82faeeb 100644 (file)
@@ -23,7 +23,7 @@
 <p>Extraneous packages are packages that are not listed on the parent
 package&#39;s dependencies list.</p>
 </div>
-<p id="footer">prune &mdash; npm@1.1.70</p>
+<p id="footer">prune &mdash; npm@1.2.0</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 698f869..cbda587 100644 (file)
@@ -32,7 +32,7 @@ the registry.  Overwrites when the &quot;force&quot; environment variable is set
 
 <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.70</p>
+<p id="footer">publish &mdash; npm@1.2.0</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index ab41363..6ff81e6 100644 (file)
@@ -22,7 +22,7 @@ the new binary. If no &#39;packages&#39; parameter is specify, every package wil
 
 <p>See <code>npm help build</code></p>
 </div>
-<p id="footer">rebuild &mdash; npm@1.1.70</p>
+<p id="footer">rebuild &mdash; npm@1.2.0</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index b2283e4..c244dd6 100644 (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.70</p>
+<p id="footer">restart &mdash; npm@1.2.0</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 2c24434..08a978e 100644 (file)
@@ -21,7 +21,7 @@
 
 <p>This function is not useful programmatically.</p>
 </div>
-<p id="footer">root &mdash; npm@1.1.70</p>
+<p id="footer">root &mdash; npm@1.2.0</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 11592a1..772f5fb 100644 (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.70</p>
+<p id="footer">run-script &mdash; npm@1.2.0</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 5f29099..f50f0ee 100644 (file)
@@ -32,7 +32,7 @@ excluded term (the &quot;searchexclude&quot; config). The search is case insensi
 and doesn&#39;t try to read your mind (it doesn&#39;t do any verb tense matching or the
 like).</p>
 </div>
-<p id="footer">search &mdash; npm@1.1.70</p>
+<p id="footer">search &mdash; npm@1.2.0</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 2c17413..da628cd 100644 (file)
@@ -26,7 +26,7 @@ but the shrinkwrap file will still be written.</p>
 <p>Finally, &#39;callback&#39; is a function that will be called when the shrinkwrap has
 been saved.</p>
 </div>
-<p id="footer">shrinkwrap &mdash; npm@1.1.70</p>
+<p id="footer">shrinkwrap &mdash; npm@1.2.0</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 0428424..e98032b 100644 (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.70</p>
+<p id="footer">start &mdash; npm@1.2.0</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index cba9249..5f3841b 100644 (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.70</p>
+<p id="footer">stop &mdash; npm@1.2.0</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 8e1100c..ab64b5c 100644 (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.70</p>
+<p id="footer">submodule &mdash; npm@1.2.0</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 48fb32b..84748d8 100644 (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.70</p>
+<p id="footer">tag &mdash; npm@1.2.0</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index f62cabc..49add1e 100644 (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.70</p>
+<p id="footer">test &mdash; npm@1.2.0</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index a937504..ef8cf4a 100644 (file)
@@ -22,7 +22,7 @@ the name of a package to be uninstalled.</p>
 <p>Finally, &#39;callback&#39; 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.70</p>
+<p id="footer">uninstall &mdash; npm@1.2.0</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 4008cb6..0f3c11f 100644 (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.70</p>
+<p id="footer">unpublish &mdash; npm@1.2.0</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 660234f..52a4830 100644 (file)
@@ -18,7 +18,7 @@
 
 <p>The &#39;packages&#39; argument is an array of packages to update. The &#39;callback&#39; parameter will be called when done or when an error occurs.</p>
 </div>
-<p id="footer">update &mdash; npm@1.1.70</p>
+<p id="footer">update &mdash; npm@1.2.0</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 9c57f58..2ff314a 100644 (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.70</p>
+<p id="footer">version &mdash; npm@1.2.0</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index cd8b86d..d76d31b 100644 (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.70</p>
+<p id="footer">view &mdash; npm@1.2.0</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 4ed432d..09ec779 100644 (file)
@@ -21,7 +21,7 @@
 
 <p>This function is not useful programmatically</p>
 </div>
-<p id="footer">whoami &mdash; npm@1.1.70</p>
+<p id="footer">whoami &mdash; npm@1.2.0</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 3bd8334..c3378e8 100644 (file)
@@ -240,7 +240,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.70</p>
+<p id="footer"><a href="../doc/README.html">README</a> &mdash; npm@1.2.0</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 1c00ca7..28e31d3 100644 (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.70</p>
+<p id="footer">adduser &mdash; npm@1.2.0</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 0bc8f04..dd507cb 100644 (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.70</p>
+<p id="footer">bin &mdash; npm@1.2.0</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index dbd3833..e12e004 100644 (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.70</p>
+<p id="footer">bugs &mdash; npm@1.2.0</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index e7de5a4..4f5af87 100644 (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.70</p>
+<p id="footer">build &mdash; npm@1.2.0</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 860795c..61163b2 100644 (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.70</p>
+<p id="footer">bundle &mdash; npm@1.2.0</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index d045cea..fc9a1c0 100644 (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.70</p>
+<p id="footer">cache &mdash; npm@1.2.0</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 22b4990..a55851f 100644 (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.70</p>
+<p id="footer">changelog &mdash; npm@1.2.0</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 53aaa75..1718203 100644 (file)
@@ -182,7 +182,7 @@ set to anything.&quot;</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.70</p>
+<p id="footer">coding-style &mdash; npm@1.2.0</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index a9e4a28..a2ae76b 100644 (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.70</p>
+<p id="footer">completion &mdash; npm@1.2.0</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 5bbfae9..8442267 100644 (file)
@@ -756,7 +756,7 @@ then answer &quot;no&quot; 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.70</p>
+<p id="footer">config &mdash; npm@1.2.0</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index ce743d4..8acbf61 100644 (file)
@@ -57,7 +57,7 @@ registry.</p>
 
 <ul><li><a href="../doc/ls.html">ls(1)</a></li><li><a href="../doc/update.html">update(1)</a></li><li><a href="../doc/install.html">install(1)</a></li></ul>
 </div>
-<p id="footer">dedupe &mdash; npm@1.1.70</p>
+<p id="footer">dedupe &mdash; npm@1.2.0</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 2555bd4..9fcb58b 100644 (file)
@@ -31,7 +31,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.70</p>
+<p id="footer">deprecate &mdash; npm@1.2.0</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 3240964..aaae81b 100644 (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.70</p>
+<p id="footer">developers &mdash; npm@1.2.0</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index bbd13a4..d5c8bb2 100644 (file)
@@ -86,7 +86,7 @@ an empty tarball, you&#39;re going to be evicted.</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.70</p>
+<p id="footer">disputes &mdash; npm@1.2.0</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index b09a6ce..ad7e8a7 100644 (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.70</p>
+<p id="footer">docs &mdash; npm@1.2.0</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 3a4e86e..a2c6120 100644 (file)
@@ -37,7 +37,7 @@ or <code>&quot;notepad&quot;</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.70</p>
+<p id="footer">edit &mdash; npm@1.2.0</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index ebd1fed..8366909 100644 (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.70</p>
+<p id="footer">explore &mdash; npm@1.2.0</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 8d084ca..d991025 100644 (file)
@@ -250,7 +250,7 @@ There is not sufficient need to impose namespace rules on everyone.</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.70</p>
+<p id="footer">faq &mdash; npm@1.2.0</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 4d899ca..03ee379 100644 (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.70</p>
+<p id="footer">folders &mdash; npm@1.2.0</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 8be5376..5d991e4 100644 (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.70</p>
+<p id="footer">help-search &mdash; npm@1.2.0</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 000df6c..291b82b 100644 (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.70</p>
+<p id="footer">help &mdash; npm@1.2.0</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 6aa984a..cb3f9ee 100644 (file)
 
 <p> Display npm username</p>
 </div>
-<p id="footer">index &mdash; npm@1.1.70</p>
+<p id="footer">index &mdash; npm@1.2.0</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 3831a35..39979b5 100644 (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.70</p>
+<p id="footer">init &mdash; npm@1.2.0</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index d5f4821..5e196c4 100644 (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.70</p>
+<p id="footer">install &mdash; npm@1.2.0</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index fd3fd38..eaac020 100644 (file)
@@ -339,7 +339,7 @@ a version in the following fashion.</p>
 
 <p>For example, the following are equivalent:</p>
 
-<ul><li><code>&quot;~1.2.3&quot; = &quot;&gt;=1.2.3 &lt;1.3.0&quot;</code></li><li><code>&quot;~1.2&quot; = &quot;&gt;=1.2.0 &lt;2.0.0&quot;</code></li><li><code>&quot;~1&quot; = &quot;&gt;=1.0.0 &lt;2.0.0&quot;</code></li></ul>
+<ul><li><code>&quot;~1.2.3&quot; = &quot;&gt;=1.2.3 &lt;1.3.0&quot;</code></li><li><code>&quot;~1.2&quot; = &quot;&gt;=1.2.0 &lt;1.3.0&quot;</code></li><li><code>&quot;~1&quot; = &quot;&gt;=1.0.0 &lt;1.1.0&quot;</code></li></ul>
 
 <h3 id="X-Version-Ranges">X Version Ranges</h3>
 
@@ -525,7 +525,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.70</p>
+<p id="footer">json &mdash; npm@1.2.0</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 5fb8150..ba73fc7 100644 (file)
@@ -58,7 +58,7 @@ installation target into your project&#39;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.70</p>
+<p id="footer">link &mdash; npm@1.2.0</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 31b58cb..38ea227 100644 (file)
@@ -25,7 +25,7 @@ limit the results to only the paths to the packages named.  Note that
 nested packages will <em>also</em> show the paths to the specified packages.
 For example, running <code>npm ls promzard</code> in npm&#39;s source tree will show:</p>
 
-<pre><code>npm@1.1.70 /path/to/npm
+<pre><code>npm@1.2.0 /path/to/npm
 â””─┬ init-package-json@0.0.4
   â””── promzard@0.1.5</code></pre>
 
@@ -64,7 +64,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">ls &mdash; npm@1.1.70</p>
+<p id="footer">ls &mdash; npm@1.2.0</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index e1e6fee..5855f36 100644 (file)
@@ -14,7 +14,7 @@
 
 <h2 id="VERSION">VERSION</h2>
 
-<p>1.1.70</p>
+<p>1.2.0</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.70</p>
+<p id="footer">npm &mdash; npm@1.2.0</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index fab7338..139afe3 100644 (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.70</p>
+<p id="footer">outdated &mdash; npm@1.2.0</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 287c55b..0ac94e8 100644 (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.70</p>
+<p id="footer">owner &mdash; npm@1.2.0</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 0183cf3..ddebcc2 100644 (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.70</p>
+<p id="footer">pack &mdash; npm@1.2.0</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 9fdc466..af3da4c 100644 (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.70</p>
+<p id="footer">prefix &mdash; npm@1.2.0</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 19defa0..2411551 100644 (file)
@@ -25,7 +25,7 @@ package&#39;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.70</p>
+<p id="footer">prune &mdash; npm@1.2.0</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 1ac3faf..a73e074 100644 (file)
@@ -29,7 +29,7 @@ the registry.  Overwrites when the &quot;--force&quot; 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.70</p>
+<p id="footer">publish &mdash; npm@1.2.0</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index b8b7185..3f2b6ec 100644 (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.70</p>
+<p id="footer">rebuild &mdash; npm@1.2.0</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 10947a8..bf54497 100644 (file)
@@ -95,7 +95,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.70</p>
+<p id="footer">registry &mdash; npm@1.2.0</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index f9af1b5..246f4de 100644 (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.70</p>
+<p id="footer">removing-npm &mdash; npm@1.2.0</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 752a51e..37e3124 100644 (file)
@@ -24,7 +24,7 @@ the &quot;start&quot; 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.70</p>
+<p id="footer">restart &mdash; npm@1.2.0</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 22f6e14..2124ad2 100644 (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.70</p>
+<p id="footer">root &mdash; npm@1.2.0</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 4333b40..90c6809 100644 (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.70</p>
+<p id="footer">run-script &mdash; npm@1.2.0</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 7890290..24913f3 100644 (file)
 <p>npm supports the &quot;scripts&quot; member of the package.json script, for the
 following scripts:</p>
 
-<ul><li>preinstall:
+<ul><li>prepublish:
+Run BEFORE the package is published.  (Also run on local <code>npm
+install</code> without any arguments.)</li><li>publish, postpublish:
+Run AFTER the package is published.</li><li>preinstall:
 Run BEFORE the package is installed</li><li>install, postinstall:
 Run AFTER the package is installed.</li><li>preuninstall, uninstall:
 Run BEFORE the package is uninstalled.</li><li>postuninstall:
 Run AFTER the package is uninstalled.</li><li>preupdate:
 Run BEFORE the package is updated with the update command.</li><li>update, postupdate:
-Run AFTER the package is updated with the update command.</li><li>prepublish:
-Run BEFORE the package is published.</li><li>publish, postpublish:
-Run AFTER the package is published.</li><li>pretest, test, posttest:
+Run AFTER the package is updated with the update command.</li><li>pretest, test, posttest:
 Run by the <code>npm test</code> command.</li><li>prestop, stop, poststop:
 Run by the <code>npm stop</code> command.</li><li>prestart, start, poststart:
 Run by the <code>npm start</code> command.</li><li>prerestart, restart, postrestart:
@@ -31,6 +32,46 @@ stop and start scripts if no <code>restart</code> script is provided.</li></ul>
 <p>Additionally, arbitrary scrips can be run by doing
 <code>npm run-script &lt;stage&gt; &lt;pkg&gt;</code>.</p>
 
+<h2 id="NOTE-INSTALL-SCRIPTS-ARE-AN-ANTIPATTERN">NOTE: INSTALL SCRIPTS ARE AN ANTIPATTERN</h2>
+
+<p><strong>tl;dr</strong> Don&#39;t use <code>install</code>.  Use a <code>.gyp</code> file for compilation, and
+<code>prepublish</code> for anything else.</p>
+
+<p>You should almost never have to explicitly set a <code>preinstall</code> or
+<code>install</code> script.  If you are doing this, please consider if there is
+another option.</p>
+
+<p>The only valid use of <code>install</code> or <code>preinstall</code> scripts is for
+compilation which must be done on the target architecture.  In early
+versions of node, this was often done using the <code>node-waf</code> scripts, or
+a standalone <code>Makefile</code>, and early versions of npm required that it be
+explicitly set in package.json.  This was not portable, and harder to
+do properly.</p>
+
+<p>In the current version of node, the standard way to do this is using a
+<code>.gyp</code> file.  If you have a file with a <code>.gyp</code> extension in the root
+of your package, then npm will run the appropriate <code>node-gyp</code> commands
+automatically at install time.  This is the only officially supported
+method for compiling binary addons, and does not require that you add
+anything to your package.json file.</p>
+
+<p>If you have to do other things before your package is used, in a way
+that is not dependent on the operating system or architecture of the
+target system, then use a <code>prepublish</code> script instead.  This includes
+tasks such as:</p>
+
+<ul><li>Compile CoffeeScript source code into JavaScript.</li><li>Create minified versions of JavaScript source code.</li><li>Fetching remote resources that your package will use.</li></ul>
+
+<p>The advantage of doing these things at <code>prepublish</code> time instead of
+<code>preinstall</code> or <code>install</code> time is that they can be done once, in a
+single place, and thus greatly reduce complexity and variability.
+Additionally, this means that:</p>
+
+<ul><li>You can depend on <code>coffee-script</code> as a <code>devDependency</code>, and thus
+your users don&#39;t need to have it installed.</li><li>You don&#39;t need to include the minifiers in your package, reducing
+the size for your users.</li><li>You don&#39;t need to rely on your users having <code>curl</code> or <code>wget</code> or
+other system tools on the target machines.</li></ul>
+
 <h2 id="DEFAULT-VALUES">DEFAULT VALUES</h2>
 
 <p>npm will default some script values based on package contents.</p>
@@ -177,7 +218,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.70</p>
+<p id="footer">scripts &mdash; npm@1.2.0</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index b4f65ba..e072a01 100644 (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.70</p>
+<p id="footer">search &mdash; npm@1.2.0</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index e4c825c..9dddfc5 100644 (file)
@@ -18,8 +18,8 @@
 
 <pre><code>$ npm install semver
 
-semver.valid(&#39;1.2.3&#39;) // true
-semver.valid(&#39;a.b.c&#39;) // false
+semver.valid(&#39;1.2.3&#39;) // &#39;1.2.3&#39;
+semver.valid(&#39;a.b.c&#39;) // null
 semver.clean(&#39;  =v1.2.3   &#39;) // &#39;1.2.3&#39;
 semver.satisfies(&#39;1.2.3&#39;, &#39;1.x || &gt;=2.5.0 || 5.0.0 - 7.2.3&#39;) // true
 semver.gt(&#39;1.2.3&#39;, &#39;9.8.7&#39;) // false
@@ -73,7 +73,7 @@ larger tag.  <code>2.3.4-beta &gt; 2.3.4-alpha</code></li><li>At this point, the
 
 <p>The following range styles are supported:</p>
 
-<ul><li><code>&gt;1.2.3</code> Greater than a specific version.</li><li><code>&lt;1.2.3</code> Less than</li><li><code>1.2.3 - 2.3.4</code> := <code>&gt;=1.2.3 &lt;=2.3.4</code></li><li><code>~1.2.3</code> := <code>&gt;=1.2.3 &lt;1.3.0</code></li><li><code>~1.2</code> := <code>&gt;=1.2.0 &lt;2.0.0</code></li><li><code>~1</code> := <code>&gt;=1.0.0 &lt;2.0.0</code></li><li><code>1.2.x</code> := <code>&gt;=1.2.0 &lt;1.3.0</code></li><li><code>1.x</code> := <code>&gt;=1.0.0 &lt;2.0.0</code></li></ul>
+<ul><li><code>&gt;1.2.3</code> Greater than a specific version.</li><li><code>&lt;1.2.3</code> Less than</li><li><code>1.2.3 - 2.3.4</code> := <code>&gt;=1.2.3 &lt;=2.3.4</code></li><li><code>~1.2.3</code> := <code>&gt;=1.2.3 &lt;1.3.0</code></li><li><code>~1.2</code> := <code>&gt;=1.2.0 &lt;1.3.0</code></li><li><code>~1</code> := <code>&gt;=1.0.0 &lt;2.0.0</code></li><li><code>1.2.x</code> := <code>&gt;=1.2.0 &lt;1.3.0</code></li><li><code>1.x</code> := <code>&gt;=1.0.0 &lt;2.0.0</code></li></ul>
 
 <p>Ranges can be joined with either a space (which implies &quot;and&quot;) or a
 <code>||</code> (which implies &quot;or&quot;).</p>
@@ -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.70</p>
+<p id="footer">semver &mdash; npm@1.2.0</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 2c2bffe..99b10e9 100644 (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.70</p>
+<p id="footer">shrinkwrap &mdash; npm@1.2.0</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index fb4bb53..df1736f 100644 (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.70</p>
+<p id="footer">star &mdash; npm@1.2.0</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 7907c9b..52bfefe 100644 (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.70</p>
+<p id="footer">start &mdash; npm@1.2.0</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index a47c13f..77001af 100644 (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.70</p>
+<p id="footer">stop &mdash; npm@1.2.0</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 941c12e..3b9411c 100644 (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.70</p>
+<p id="footer">submodule &mdash; npm@1.2.0</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 29371bc..0247e51 100644 (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.70</p>
+<p id="footer">tag &mdash; npm@1.2.0</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index d4f031c..d16aad6 100644 (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.70</p>
+<p id="footer">test &mdash; npm@1.2.0</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 2a4a2d7..25bd0b4 100644 (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.70</p>
+<p id="footer">uninstall &mdash; npm@1.2.0</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index dfeedf2..f2c38c0 100644 (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.70</p>
+<p id="footer">unpublish &mdash; npm@1.2.0</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 6ebd0d7..65daa90 100644 (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.70</p>
+<p id="footer">update &mdash; npm@1.2.0</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index fe2bd4b..1712c2c 100644 (file)
@@ -40,7 +40,7 @@ in your git config for this to work properly.</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.70</p>
+<p id="footer">version &mdash; npm@1.2.0</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 6ea1902..2b988f3 100644 (file)
@@ -90,7 +90,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.70</p>
+<p id="footer">view &mdash; npm@1.2.0</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index f092fc2..33a3ca9 100644 (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.70</p>
+<p id="footer">whoami &mdash; npm@1.2.0</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index c2f870b..07f4d3e 100644 (file)
@@ -136,6 +136,7 @@ function read (name, ver, forceBypass, cb) {
   }
 
   readJson(jsonFile, function (er, data) {
+    if (er && er.code !== "ENOENT") return cb(er)
     if (er) return addNamed(name, ver, c)
     deprCheck(data)
     c(er, data)
@@ -414,7 +415,7 @@ function gitEnv () {
   if (gitEnv_) return gitEnv_
   gitEnv_ = {}
   for (var k in process.env) {
-    if (!~['GIT_PROXY_COMMAND'].indexOf(k) && k.match(/^GIT/)) continue
+    if (!~['GIT_PROXY_COMMAND','GIT_SSH'].indexOf(k) && k.match(/^GIT/)) continue
     gitEnv_[k] = process.env[k]
   }
   return gitEnv_
@@ -601,6 +602,7 @@ function addNameVersion (name, ver, data, cb) {
       if (!er) readJson( path.join( npm.cache, name, ver
                                   , "package", "package.json" )
                        , function (er, data) {
+          if (er && er.code !== "ENOENT") return cb(er)
           if (er) return fetchit()
           return cb(null, data)
         })
@@ -664,10 +666,16 @@ function addLocal (p, name, cb_) {
 }
 
 function maybeGithub (p, name, er, cb) {
-  var u = "git://github.com/" + p
+  var u = "https://github.com/" + p
     , up = url.parse(u)
+  if (up.hash && up.hash[0] === "#")
+    up.hash = up.hash.slice(1)
+
+  var ref = encodeURIComponent(up.hash || "master")
+  up.pathname = path.join(up.pathname, "tarball", ref).replace(/\\/g, "/")
+  u = url.format(up)
   log.info("maybeGithub", "Attempting to fetch %s from %s", p, u)
-  return addRemoteGit(u, up, name, function (er2, data) {
+  return addRemoteTarball(u, null, name, function (er2, data) {
     if (er2) return cb(er)
     return cb(null, data)
   })
index 67481c6..51c6fca 100644 (file)
@@ -265,6 +265,7 @@ function readInstalled (dir, counter, parent, cb) {
   })
 
   readJson(path.resolve(dir, "package.json"), function (er, data) {
+    if (er && er.code !== "ENOENT") return cb(er)
     if (er) return cb() // not a package, probably.
     counter[data.name] = counter[data.name] || 0
     counter[data.name]++
index c9e724e..1ba4305 100644 (file)
@@ -25,7 +25,7 @@ var semver = require("semver")
 function deprecate (args, cb) {
   var pkg = args[0]
     , msg = args[1]
-  if (msg === undefined) return cb(new Error(deprecate.usage))
+  if (msg === undefined) return cb("Usage: " + deprecate.usage)
   // fetch the data and make sure it exists.
   pkg = pkg.split(/@/)
   var name = pkg.shift()
index ecb5d0d..4741c34 100644 (file)
 
 module.exports = install
 
-install.usage = "npm install <tarball file>"
-              + "\nnpm install <tarball url>"
-              + "\nnpm install <folder>"
+install.usage = "npm install"
               + "\nnpm install <pkg>"
               + "\nnpm install <pkg>@<tag>"
               + "\nnpm install <pkg>@<version>"
               + "\nnpm install <pkg>@<version range>"
+              + "\nnpm install <folder>"
+              + "\nnpm install <tarball file>"
+              + "\nnpm install <tarball url>"
+              + "\nnpm install <git:// url>"
+              + "\nnpm install <github username>/<github project>"
               + "\n\nCan specify one or more: npm install ./foo.tgz bar@stable /some/folder"
               + "\nIf no argument is supplied and ./npm-shrinkwrap.json is "
               + "\npresent, installs dependencies specified in the shrinkwrap."
@@ -133,13 +136,19 @@ function install (args, cb_) {
             , parsed = url.parse(target.replace(/^git\+/, "git"))
           target = dep + "@" + target
           return target
-        }), where, context, cb)
+        }), where, context, function(er, results) {
+          if (er) return cb(er, results)
+          lifecycle(data, "prepublish", where, function(er) {
+            return cb(er, results)
+          })
+        })
       })
     }
 
     // initial "family" is the name:version of the root, if it's got
     // a package.json file.
     readJson(path.resolve(where, "package.json"), function (er, data) {
+      if (er && er.code !== "ENOENT") return cb(er)
       if (er) data = null
       var context = { family: {}
                     , ancestors: {}
@@ -276,9 +285,9 @@ function save (where, installed, tree, pretty, cb) {
     } catch (ex) {
       er = ex
     }
+
     if (er) {
       return cb(null, installed, tree, pretty)
-
     }
 
     var deps = npm.config.get("save-optional") ? "optionalDependencies"
@@ -442,10 +451,13 @@ function installManyTop_ (what, where, context, cb) {
       return path.resolve(nm, p, "package.json")
     }), function (jsonfile, cb) {
       readJson(jsonfile, function (er, data) {
+        if (er && er.code !== "ENOENT") return cb(er)
         if (er) return cb(null, [])
         return cb(null, [[data.name, data.version]])
       })
     }, function (er, packages) {
+      // if there's nothing in node_modules, then don't freak out.
+      if (er) packages = []
       // add all the existing packages to the family list.
       // however, do not add to the ancestors list.
       packages.forEach(function (p) {
@@ -521,6 +533,7 @@ function targetResolver (where, context, deps) {
     if (er) return alreadyInstalledManually = []
     asyncMap(inst, function (pkg, cb) {
       readJson(path.resolve(nm, pkg, "package.json"), function (er, d) {
+        if (er && er.code !== "ENOENT") return cb(er)
         // error means it's not a package, most likely.
         if (er) return cb(null, [])
 
@@ -640,6 +653,7 @@ function localLink (target, where, context, cb) {
     , parent = context.parent
 
   readJson(jsonFile, function (er, data) {
+    if (er && er.code !== "ENOENT") return cb(er)
     if (er || data._id === target._id) {
       if (er) {
         install( path.resolve(npm.globalDir, "..")
@@ -896,39 +910,65 @@ function write (target, targetFolder, context, cb_) {
       // before continuing to installing dependencies, check for a shrinkwrap.
       var opt = { dev: npm.config.get("dev") }
       readDependencies(context, targetFolder, opt, function (er, data, wrap) {
-        var deps = Object.keys(data.dependencies || {})
-
-        // don't install bundleDependencies, unless they're missing.
-        if (data.bundleDependencies) {
-          deps = deps.filter(function (d) {
-            return data.bundleDependencies.indexOf(d) === -1 ||
-                   bundled.indexOf(d) === -1
-          })
-        }
-
-        var newcontext = { family: family
+        var deps = prepareForInstallMany(data, "dependencies", bundled, wrap,
+            family)
+        var depsTargetFolder = targetFolder
+        var depsContext = { family: family
                          , ancestors: context.ancestors
                          , parent: target
                          , explicit: false
                          , wrap: wrap }
-        installMany(deps.filter(function (d) {
-          // prefer to not install things that are satisfied by
-          // something in the "family" list, unless we're installing
-          // from a shrinkwrap.
-          return wrap || !semver.satisfies(family[d], data.dependencies[d])
-        }).map(function (d) {
-          var t = data.dependencies[d]
-            , parsed = url.parse(t.replace(/^git\+/, "git"))
-          t = d + "@" + t
-          return t
-        }), targetFolder, newcontext, function (er, d) {
-          log.verbose("about to build", targetFolder)
-          if (er) return cb(er)
-          npm.commands.build( [targetFolder]
-                            , npm.config.get("global")
-                            , true
-                            , function (er) { return cb(er, d) })
-        })
+
+        var peerDeps = prepareForInstallMany(data, "peerDependencies", bundled,
+            wrap, family)
+        var pdTargetFolder = path.resolve(targetFolder, "..", "..")
+        var pdContext = context
+
+        var actions =
+          [ [ installManyAndBuild, deps, depsTargetFolder, depsContext ] ]
+
+        if (peerDeps.length > 0) {
+          actions.push(
+            [ installManyAndBuild, peerDeps, pdTargetFolder, pdContext ]
+          )
+        }
+
+        chain(actions, cb)
       })
     })
 }
+
+function installManyAndBuild (deps, targetFolder, context, cb) {
+  installMany(deps, targetFolder, context, function (er, d) {
+    log.verbose("about to build", targetFolder)
+    if (er) return cb(er)
+    npm.commands.build( [targetFolder]
+                      , npm.config.get("global")
+                      , true
+                      , function (er) { return cb(er, d) })
+  })
+}
+
+function prepareForInstallMany (packageData, depsKey, bundled, wrap, family) {
+  var deps = Object.keys(packageData[depsKey] || {})
+
+  // don't install bundleDependencies, unless they're missing.
+  if (packageData.bundleDependencies) {
+    deps = deps.filter(function (d) {
+      return packageData.bundleDependencies.indexOf(d) === -1 ||
+             bundled.indexOf(d) === -1
+    })
+  }
+
+  return deps.filter(function (d) {
+    // prefer to not install things that are satisfied by
+    // something in the "family" list, unless we're installing
+    // from a shrinkwrap.
+    return wrap || !semver.satisfies(family[d], packageData[depsKey][d])
+  }).map(function (d) {
+    var t = packageData[depsKey][d]
+      , parsed = url.parse(t.replace(/^git\+/, "git"))
+    t = d + "@" + t
+    return t
+  })
+}
index 8a4d627..637064e 100644 (file)
@@ -68,7 +68,7 @@ function ls (args, silent, cb) {
   })
 }
 
-// only include 
+// only include
 function filter (data, args) {
 
 }
@@ -112,6 +112,14 @@ function getLite (data, noname) {
                       + " " + (data.path || "") )
   }
 
+  if (data.peerInvalid) {
+    lite.peerInvalid = true
+    lite.problems = lite.problems || []
+    lite.problems.push( "peer invalid: "
+                      + data.name + "@" + data.version
+                      + " " + (data.path || "") )
+  }
+
   if (data.dependencies) {
     var deps = Object.keys(data.dependencies)
     if (deps.length) lite.dependencies = deps.map(function (d) {
@@ -244,6 +252,12 @@ function makeArchy_ (data, long, dir, depth, parent, d) {
               + (color ? "\033[0m" : "")
   }
 
+  if (data.peerInvalid) {
+    out.label += " " + (color ? "\033[31;40m" : "")
+              + "peer invalid"
+              + (color ? "\033[0m" : "")
+  }
+
   if (data.extraneous && data.path !== dir) {
     out.label += " " + (color ? "\033[32;40m" : "")
               + "extraneous"
@@ -331,4 +345,5 @@ function makeParseable_ (data, long, dir, depth, parent, d) {
        + ":" + (data.realPath !== data.path ? data.realPath : "")
        + (data.extraneous ? ":EXTRANEOUS" : "")
        + (data.invalid ? ":INVALID" : "")
+       + (data.peerInvalid ? ":PEERINVALID" : "")
 }
index 33c182c..bb9f93e 100644 (file)
@@ -76,6 +76,7 @@ function outdated_ (args, dir, parentHas, cb) {
 
   var deps = null
   readJson(path.resolve(dir, "package.json"), function (er, d) {
+    if (er && er.code !== "ENOENT") return cb(er)
     deps = (er) ? true : (d.dependencies || {})
     return next()
   })
@@ -89,6 +90,7 @@ function outdated_ (args, dir, parentHas, cb) {
     asyncMap(pkgs, function (pkg, cb) {
       var jsonFile = path.resolve(dir, "node_modules", pkg, "package.json")
       readJson(jsonFile, function (er, d) {
+        if (er && er.code !== "ENOENT") return cb(er)
         cb(null, er ? [] : [[d.name, d.version]])
       })
     }, function (er, pvs) {
index bb6a4ce..027ea59 100644 (file)
@@ -32,6 +32,7 @@ function publish (args, isRetry, cb) {
   var arg = args[0]
   // if it's a local folder, then run the prepublish there, first.
   readJson(path.resolve(arg, "package.json"), function (er, data) {
+    if (er && er.code !== "ENOENT") return cb(er)
     // error is ok.  could be publishing a url or tarball
     // however, that means that we will not have automatically run
     // the prepublish script, since that gets run when adding a folder
index 4af74ee..d509cc8 100644 (file)
@@ -25,6 +25,7 @@ runScript.completion = function (opts, cb) {
     // or a package, in which case, complete against its scripts
     var json = path.join(npm.prefix, "package.json")
     return readJson(json, function (er, d) {
+      if (er && er.code !== "ENOENT") return cb(er)
       if (er) d = {}
       var scripts = Object.keys(d.scripts || {})
       console.error("local scripts", scripts)
@@ -35,6 +36,7 @@ runScript.completion = function (opts, cb) {
       var pkgDir = path.resolve( pref, "node_modules"
                                , argv[2], "package.json" )
       readJson(pkgDir, function (er, d) {
+        if (er && er.code !== "ENOENT") return cb(er)
         if (er) d = {}
         var scripts = Object.keys(d.scripts || {})
         return cb(null, scripts)
@@ -55,6 +57,7 @@ runScript.completion = function (opts, cb) {
 
   if (npm.config.get("global")) scripts = [], next()
   else readJson(path.join(npm.prefix, "package.json"), function (er, d) {
+    if (er && er.code !== "ENOENT") return cb(er)
     d = d || {}
     scripts = Object.keys(d.scripts || {})
     next()
index b4dbd1d..275088e 100644 (file)
@@ -30,6 +30,7 @@ function uninstall (args, cb) {
   // remove this package from the global space, if it's installed there
   if (npm.config.get("global")) return cb(uninstall.usage)
   readJson(path.resolve(npm.prefix, "package.json"), function (er, pkg) {
+    if (er && er.code !== "ENOENT") return cb(er)
     if (er) return cb(uninstall.usage)
     uninstall_( [pkg.name]
               , npm.dir
index def3085..c0056e7 100644 (file)
@@ -56,6 +56,7 @@ function unpublish (args, cb) {
     // read the package name and version out of that.
     var cwdJson = path.join(process.cwd(), "package.json")
     return readJson(cwdJson, function (er, data) {
+      if (er && er.code !== "ENOENT") return cb(er)
       if (er) return cb("Usage:\n"+unpublish.usage)
       gotProject(data.name, data.version, cb)
     })
index 97adb96..825edc9 100644 (file)
@@ -49,6 +49,7 @@ function lifecycle (pkg, stage, wd, unsafe, failOk, cb) {
     var env = makeEnv(pkg)
     env.npm_lifecycle_event = stage
     env.npm_node_execpath = env.NODE = env.NODE || process.execPath
+    env.npm_execpath = require.main.filename
 
     // "nobody" typically doesn't have permission to write to /tmp
     // even if it's never used, sh freaks out.
index 0a927d3..bb9254d 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs 0.3.8
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM" "1" "December 2012" "" ""
+.TH "NPM" "1" "January 2013" "" ""
 .
 .SH "NAME"
 \fBnpm\fR \-\- node package manager
index df8f52f..63a2d32 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs 0.3.8
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-ADDUSER" "1" "December 2012" "" ""
+.TH "NPM\-ADDUSER" "1" "January 2013" "" ""
 .
 .SH "NAME"
 \fBnpm-adduser\fR \-\- Add a registry user account
index 338309c..9495dfa 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs 0.3.8
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-BIN" "1" "December 2012" "" ""
+.TH "NPM\-BIN" "1" "January 2013" "" ""
 .
 .SH "NAME"
 \fBnpm-bin\fR \-\- Display npm bin folder
index 02c2183..8156f39 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs 0.3.8
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-BUGS" "1" "December 2012" "" ""
+.TH "NPM\-BUGS" "1" "January 2013" "" ""
 .
 .SH "NAME"
 \fBnpm-bugs\fR \-\- Bugs for a package in a web browser maybe
index 59d45d1..67ccb0b 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs 0.3.8
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-BUILD" "1" "December 2012" "" ""
+.TH "NPM\-BUILD" "1" "January 2013" "" ""
 .
 .SH "NAME"
 \fBnpm-build\fR \-\- Build a package
index 2d5f333..976fcd4 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs 0.3.8
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-BUNDLE" "1" "December 2012" "" ""
+.TH "NPM\-BUNDLE" "1" "January 2013" "" ""
 .
 .SH "NAME"
 \fBnpm-bundle\fR \-\- REMOVED
index 45454d6..43234d5 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs 0.3.8
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-CACHE" "1" "December 2012" "" ""
+.TH "NPM\-CACHE" "1" "January 2013" "" ""
 .
 .SH "NAME"
 \fBnpm-cache\fR \-\- Manipulates packages cache
index ae61098..3584b87 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs 0.3.8
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-CHANGELOG" "1" "December 2012" "" ""
+.TH "NPM\-CHANGELOG" "1" "January 2013" "" ""
 .
 .SH "NAME"
 \fBnpm-changelog\fR \-\- Changes
index 8328e61..add053c 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs 0.3.8
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-CODING\-STYLE" "1" "December 2012" "" ""
+.TH "NPM\-CODING\-STYLE" "1" "January 2013" "" ""
 .
 .SH "NAME"
 \fBnpm-coding-style\fR \-\- npm\'s "funny" coding style
index 3367ff9..ff8af5f 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs 0.3.8
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-COMPLETION" "1" "December 2012" "" ""
+.TH "NPM\-COMPLETION" "1" "January 2013" "" ""
 .
 .SH "NAME"
 \fBnpm-completion\fR \-\- Tab Completion for npm
index 15685c6..8041285 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs 0.3.8
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-CONFIG" "1" "December 2012" "" ""
+.TH "NPM\-CONFIG" "1" "January 2013" "" ""
 .
 .SH "NAME"
 \fBnpm-config\fR \-\- Manage the npm configuration file
index 73de1f4..1a3a541 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs 0.3.8
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-DEDUPE" "1" "December 2012" "" ""
+.TH "NPM\-DEDUPE" "1" "January 2013" "" ""
 .
 .SH "NAME"
 \fBnpm-dedupe\fR \-\- Reduce duplication
index bbefd7f..0b4868b 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs 0.3.8
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-DEPRECATE" "1" "December 2012" "" ""
+.TH "NPM\-DEPRECATE" "1" "January 2013" "" ""
 .
 .SH "NAME"
 \fBnpm-deprecate\fR \-\- Deprecate a version of a package
index ab5e557..a7e9e7c 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs 0.3.8
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-DEVELOPERS" "1" "December 2012" "" ""
+.TH "NPM\-DEVELOPERS" "1" "January 2013" "" ""
 .
 .SH "NAME"
 \fBnpm-developers\fR \-\- Developer Guide
index 042b2ef..d8b110f 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs 0.3.8
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-DISPUTES" "1" "December 2012" "" ""
+.TH "NPM\-DISPUTES" "1" "January 2013" "" ""
 .
 .SH "NAME"
 \fBnpm-disputes\fR \-\- Handling Module Name Disputes
index e1028b8..96d85c9 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs 0.3.8
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-DOCS" "1" "December 2012" "" ""
+.TH "NPM\-DOCS" "1" "January 2013" "" ""
 .
 .SH "NAME"
 \fBnpm-docs\fR \-\- Docs for a package in a web browser maybe
index f727c2b..35db1fb 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs 0.3.8
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-EDIT" "1" "December 2012" "" ""
+.TH "NPM\-EDIT" "1" "January 2013" "" ""
 .
 .SH "NAME"
 \fBnpm-edit\fR \-\- Edit an installed package
index 7c8f95a..f5fa96d 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs 0.3.8
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-EXPLORE" "1" "December 2012" "" ""
+.TH "NPM\-EXPLORE" "1" "January 2013" "" ""
 .
 .SH "NAME"
 \fBnpm-explore\fR \-\- Browse an installed package
index bc72dea..b85b3cf 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs 0.3.8
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-FAQ" "1" "December 2012" "" ""
+.TH "NPM\-FAQ" "1" "January 2013" "" ""
 .
 .SH "NAME"
 \fBnpm-faq\fR \-\- Frequently Asked Questions
index 02a7c61..abef276 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs 0.3.8
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-FOLDERS" "1" "December 2012" "" ""
+.TH "NPM\-FOLDERS" "1" "January 2013" "" ""
 .
 .SH "NAME"
 \fBnpm-folders\fR \-\- Folder Structures Used by npm
index 95ea44f..926e340 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs 0.3.8
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-HELP\-SEARCH" "1" "December 2012" "" ""
+.TH "NPM\-HELP\-SEARCH" "1" "January 2013" "" ""
 .
 .SH "NAME"
 \fBnpm-help-search\fR \-\- Search npm help documentation
index 8b01719..0de2638 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs 0.3.8
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-HELP" "1" "December 2012" "" ""
+.TH "NPM\-HELP" "1" "January 2013" "" ""
 .
 .SH "NAME"
 \fBnpm-help\fR \-\- Get help on npm
index d2b7e81..0065d78 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs 0.3.8
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-INDEX" "1" "December 2012" "" ""
+.TH "NPM\-INDEX" "1" "January 2013" "" ""
 .
 .SH "NAME"
 \fBnpm-index\fR \-\- Index of all npm documentation
index 597e68c..41bf011 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs 0.3.8
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-INIT" "1" "December 2012" "" ""
+.TH "NPM\-INIT" "1" "January 2013" "" ""
 .
 .SH "NAME"
 \fBnpm-init\fR \-\- Interactively create a package\.json file
index 9de9fe0..dfb2c29 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs 0.3.8
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-INSTALL" "1" "December 2012" "" ""
+.TH "NPM\-INSTALL" "1" "January 2013" "" ""
 .
 .SH "NAME"
 \fBnpm-install\fR \-\- Install a package
index 517da10..6d3d384 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs 0.3.8
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-JSON" "1" "December 2012" "" ""
+.TH "NPM\-JSON" "1" "January 2013" "" ""
 .
 .SH "NAME"
 \fBnpm-json\fR \-\- Specifics of npm\'s package\.json handling
@@ -521,10 +521,10 @@ For example, the following are equivalent:
 \fB"~1\.2\.3" = ">=1\.2\.3 <1\.3\.0"\fR
 .
 .IP "\(bu" 4
-\fB"~1\.2" = ">=1\.2\.0 <2\.0\.0"\fR
+\fB"~1\.2" = ">=1\.2\.0 <1\.3\.0"\fR
 .
 .IP "\(bu" 4
-\fB"~1" = ">=1\.0\.0 <2\.0\.0"\fR
+\fB"~1" = ">=1\.0\.0 <1\.1\.0"\fR
 .
 .IP "" 0
 .
index 30bc4e7..505fcf3 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs 0.3.8
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-LINK" "1" "December 2012" "" ""
+.TH "NPM\-LINK" "1" "January 2013" "" ""
 .
 .SH "NAME"
 \fBnpm-link\fR \-\- Symlink a package folder
index ddeaac7..0b3aeb6 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs 0.3.8
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-LS" "1" "December 2012" "" ""
+.TH "NPM\-LS" "1" "January 2013" "" ""
 .
 .SH "NAME"
 \fBnpm-ls\fR \-\- List installed packages
@@ -29,7 +29,7 @@ For example, running \fBnpm ls promzard\fR in npm\'s source tree will show:
 .IP "" 4
 .
 .nf
-npm@1.1.70 /path/to/npm
+npm@1.2.0 /path/to/npm
 â””─┬ init\-package\-json@0\.0\.4
   â””── promzard@0\.1\.5
 .
index 4b50686..a152584 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs 0.3.8
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM" "1" "December 2012" "" ""
+.TH "NPM" "1" "January 2013" "" ""
 .
 .SH "NAME"
 \fBnpm\fR \-\- node package manager
@@ -14,7 +14,7 @@ npm <command> [args]
 .fi
 .
 .SH "VERSION"
-1.1.70
+1.2.0
 .
 .SH "DESCRIPTION"
 npm is the package manager for the Node JavaScript platform\.  It puts
index 0391206..2b8a569 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs 0.3.8
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-OUTDATED" "1" "December 2012" "" ""
+.TH "NPM\-OUTDATED" "1" "January 2013" "" ""
 .
 .SH "NAME"
 \fBnpm-outdated\fR \-\- Check for outdated packages
index 82adc69..7418f0a 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs 0.3.8
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-OWNER" "1" "December 2012" "" ""
+.TH "NPM\-OWNER" "1" "January 2013" "" ""
 .
 .SH "NAME"
 \fBnpm-owner\fR \-\- Manage package owners
index 12588fb..afe332d 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs 0.3.8
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-PACK" "1" "December 2012" "" ""
+.TH "NPM\-PACK" "1" "January 2013" "" ""
 .
 .SH "NAME"
 \fBnpm-pack\fR \-\- Create a tarball from a package
index 5a6cac9..7b4bbfc 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs 0.3.8
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-PREFIX" "1" "December 2012" "" ""
+.TH "NPM\-PREFIX" "1" "January 2013" "" ""
 .
 .SH "NAME"
 \fBnpm-prefix\fR \-\- Display prefix
index dfed0f8..0aecb54 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs 0.3.8
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-PRUNE" "1" "December 2012" "" ""
+.TH "NPM\-PRUNE" "1" "January 2013" "" ""
 .
 .SH "NAME"
 \fBnpm-prune\fR \-\- Remove extraneous packages
index 08b2478..f915e30 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs 0.3.8
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-PUBLISH" "1" "December 2012" "" ""
+.TH "NPM\-PUBLISH" "1" "January 2013" "" ""
 .
 .SH "NAME"
 \fBnpm-publish\fR \-\- Publish a package
index e6c5ee5..8559907 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs 0.3.8
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-REBUILD" "1" "December 2012" "" ""
+.TH "NPM\-REBUILD" "1" "January 2013" "" ""
 .
 .SH "NAME"
 \fBnpm-rebuild\fR \-\- Rebuild a package
index a4a096c..003e89c 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs 0.3.8
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-REGISTRY" "1" "December 2012" "" ""
+.TH "NPM\-REGISTRY" "1" "January 2013" "" ""
 .
 .SH "NAME"
 \fBnpm-registry\fR \-\- The JavaScript Package Registry
index 4a381c1..2c2118c 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs 0.3.8
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-REMOVAL" "1" "December 2012" "" ""
+.TH "NPM\-REMOVAL" "1" "January 2013" "" ""
 .
 .SH "NAME"
 \fBnpm-removal\fR \-\- Cleaning the Slate
index a9d5789..a5969b8 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs 0.3.8
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-RESTART" "1" "December 2012" "" ""
+.TH "NPM\-RESTART" "1" "January 2013" "" ""
 .
 .SH "NAME"
 \fBnpm-restart\fR \-\- Start a package
index b4cbfa7..04ec036 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs 0.3.8
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-ROOT" "1" "December 2012" "" ""
+.TH "NPM\-ROOT" "1" "January 2013" "" ""
 .
 .SH "NAME"
 \fBnpm-root\fR \-\- Display npm root
index 53a5c30..479a3ff 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs 0.3.8
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-RUN\-SCRIPT" "1" "December 2012" "" ""
+.TH "NPM\-RUN\-SCRIPT" "1" "January 2013" "" ""
 .
 .SH "NAME"
 \fBnpm-run-script\fR \-\- Run arbitrary package scripts
index 263afa8..11f6b8a 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs 0.3.8
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-SCRIPTS" "1" "December 2012" "" ""
+.TH "NPM\-SCRIPTS" "1" "January 2013" "" ""
 .
 .SH "NAME"
 \fBnpm-scripts\fR \-\- How npm handles the "scripts" field
@@ -11,6 +11,15 @@ npm supports the "scripts" member of the package\.json script, for the
 following scripts:
 .
 .IP "\(bu" 4
+prepublish:
+Run BEFORE the package is published\.  (Also run on local \fBnpm
+install\fR without any arguments\.)
+.
+.IP "\(bu" 4
+publish, postpublish:
+Run AFTER the package is published\.
+.
+.IP "\(bu" 4
 preinstall:
 Run BEFORE the package is installed
 .
@@ -35,14 +44,6 @@ update, postupdate:
 Run AFTER the package is updated with the update command\.
 .
 .IP "\(bu" 4
-prepublish:
-Run BEFORE the package is published\.
-.
-.IP "\(bu" 4
-publish, postpublish:
-Run AFTER the package is published\.
-.
-.IP "\(bu" 4
 pretest, test, posttest:
 Run by the \fBnpm test\fR command\.
 .
@@ -64,6 +65,64 @@ stop and start scripts if no \fBrestart\fR script is provided\.
 .P
 Additionally, arbitrary scrips can be run by doing \fBnpm run\-script <stage> <pkg>\fR\|\.
 .
+.SH "NOTE: INSTALL SCRIPTS ARE AN ANTIPATTERN"
+\fBtl;dr\fR Don\'t use \fBinstall\fR\|\.  Use a \fB\|\.gyp\fR file for compilation, and \fBprepublish\fR for anything else\.
+.
+.P
+You should almost never have to explicitly set a \fBpreinstall\fR or \fBinstall\fR script\.  If you are doing this, please consider if there is
+another option\.
+.
+.P
+The only valid use of \fBinstall\fR or \fBpreinstall\fR scripts is for
+compilation which must be done on the target architecture\.  In early
+versions of node, this was often done using the \fBnode\-waf\fR scripts, or
+a standalone \fBMakefile\fR, and early versions of npm required that it be
+explicitly set in package\.json\.  This was not portable, and harder to
+do properly\.
+.
+.P
+In the current version of node, the standard way to do this is using a \fB\|\.gyp\fR file\.  If you have a file with a \fB\|\.gyp\fR extension in the root
+of your package, then npm will run the appropriate \fBnode\-gyp\fR commands
+automatically at install time\.  This is the only officially supported
+method for compiling binary addons, and does not require that you add
+anything to your package\.json file\.
+.
+.P
+If you have to do other things before your package is used, in a way
+that is not dependent on the operating system or architecture of the
+target system, then use a \fBprepublish\fR script instead\.  This includes
+tasks such as:
+.
+.IP "\(bu" 4
+Compile CoffeeScript source code into JavaScript\.
+.
+.IP "\(bu" 4
+Create minified versions of JavaScript source code\.
+.
+.IP "\(bu" 4
+Fetching remote resources that your package will use\.
+.
+.IP "" 0
+.
+.P
+The advantage of doing these things at \fBprepublish\fR time instead of \fBpreinstall\fR or \fBinstall\fR time is that they can be done once, in a
+single place, and thus greatly reduce complexity and variability\.
+Additionally, this means that:
+.
+.IP "\(bu" 4
+You can depend on \fBcoffee\-script\fR as a \fBdevDependency\fR, and thus
+your users don\'t need to have it installed\.
+.
+.IP "\(bu" 4
+You don\'t need to include the minifiers in your package, reducing
+the size for your users\.
+.
+.IP "\(bu" 4
+You don\'t need to rely on your users having \fBcurl\fR or \fBwget\fR or
+other system tools on the target machines\.
+.
+.IP "" 0
+.
 .SH "DEFAULT VALUES"
 npm will default some script values based on package contents\.
 .
index 005664e..17de3fd 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs 0.3.8
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-SEARCH" "1" "December 2012" "" ""
+.TH "NPM\-SEARCH" "1" "January 2013" "" ""
 .
 .SH "NAME"
 \fBnpm-search\fR \-\- Search for packages
index 29d5c1b..8ecdd02 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs 0.3.8
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-SEMVER" "1" "December 2012" "" ""
+.TH "NPM\-SEMVER" "1" "January 2013" "" ""
 .
 .SH "NAME"
 \fBnpm-semver\fR \-\- The semantic versioner for npm
@@ -16,8 +16,8 @@ As a node module:
 .
 .nf
 $ npm install semver
-semver\.valid(\'1\.2\.3\') // true
-semver\.valid(\'a\.b\.c\') // false
+semver\.valid(\'1\.2\.3\') // \'1\.2\.3\'
+semver\.valid(\'a\.b\.c\') // null
 semver\.clean(\'  =v1\.2\.3   \') // \'1\.2\.3\'
 semver\.satisfies(\'1\.2\.3\', \'1\.x || >=2\.5\.0 || 5\.0\.0 \- 7\.2\.3\') // true
 semver\.gt(\'1\.2\.3\', \'9\.8\.7\') // false
@@ -132,7 +132,7 @@ The following range styles are supported:
 \fB~1\.2\.3\fR := \fB>=1\.2\.3 <1\.3\.0\fR
 .
 .IP "\(bu" 4
-\fB~1\.2\fR := \fB>=1\.2\.0 <2\.0\.0\fR
+\fB~1\.2\fR := \fB>=1\.2\.0 <1\.3\.0\fR
 .
 .IP "\(bu" 4
 \fB~1\fR := \fB>=1\.0\.0 <2\.0\.0\fR
index 3d84502..a2b354d 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs 0.3.8
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-SHRINKWRAP" "1" "December 2012" "" ""
+.TH "NPM\-SHRINKWRAP" "1" "January 2013" "" ""
 .
 .SH "NAME"
 \fBnpm-shrinkwrap\fR \-\- Lock down dependency versions
index 31db483..b9dc3f3 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs 0.3.8
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-STAR" "1" "December 2012" "" ""
+.TH "NPM\-STAR" "1" "January 2013" "" ""
 .
 .SH "NAME"
 \fBnpm-star\fR \-\- Mark your favorite packages
index e79a48d..29347d3 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs 0.3.8
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-START" "1" "December 2012" "" ""
+.TH "NPM\-START" "1" "January 2013" "" ""
 .
 .SH "NAME"
 \fBnpm-start\fR \-\- Start a package
index 5a7856b..240e3b0 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs 0.3.8
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-STOP" "1" "December 2012" "" ""
+.TH "NPM\-STOP" "1" "January 2013" "" ""
 .
 .SH "NAME"
 \fBnpm-stop\fR \-\- Stop a package
index 39bd1ad..c06af34 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs 0.3.8
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-SUBMODULE" "1" "December 2012" "" ""
+.TH "NPM\-SUBMODULE" "1" "January 2013" "" ""
 .
 .SH "NAME"
 \fBnpm-submodule\fR \-\- Add a package as a git submodule
index 3832cdc..74c65a3 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs 0.3.8
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-TAG" "1" "December 2012" "" ""
+.TH "NPM\-TAG" "1" "January 2013" "" ""
 .
 .SH "NAME"
 \fBnpm-tag\fR \-\- Tag a published version
index 988b694..51c8ad7 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs 0.3.8
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-TEST" "1" "December 2012" "" ""
+.TH "NPM\-TEST" "1" "January 2013" "" ""
 .
 .SH "NAME"
 \fBnpm-test\fR \-\- Test a package
index 79d01e2..7c188fc 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs 0.3.8
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-RM" "1" "December 2012" "" ""
+.TH "NPM\-RM" "1" "January 2013" "" ""
 .
 .SH "NAME"
 \fBnpm-rm\fR \-\- Remove a package
index 694386a..8188852 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs 0.3.8
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-UNPUBLISH" "1" "December 2012" "" ""
+.TH "NPM\-UNPUBLISH" "1" "January 2013" "" ""
 .
 .SH "NAME"
 \fBnpm-unpublish\fR \-\- Remove a package from the registry
index 09575c0..214ab23 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs 0.3.8
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-UPDATE" "1" "December 2012" "" ""
+.TH "NPM\-UPDATE" "1" "January 2013" "" ""
 .
 .SH "NAME"
 \fBnpm-update\fR \-\- Update a package
index fc9b7ac..d2d5219 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs 0.3.8
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-VERSION" "1" "December 2012" "" ""
+.TH "NPM\-VERSION" "1" "January 2013" "" ""
 .
 .SH "NAME"
 \fBnpm-version\fR \-\- Bump a package version
index 2b4a2f4..afe2b77 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs 0.3.8
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-VIEW" "1" "December 2012" "" ""
+.TH "NPM\-VIEW" "1" "January 2013" "" ""
 .
 .SH "NAME"
 \fBnpm-view\fR \-\- View registry info
index 46df8f6..4222bfe 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs 0.3.8
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-WHOAMI" "1" "December 2012" "" ""
+.TH "NPM\-WHOAMI" "1" "January 2013" "" ""
 .
 .SH "NAME"
 \fBnpm-whoami\fR \-\- Display npm username
index 54f935f..1047557 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs 0.3.8
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-BIN" "3" "December 2012" "" ""
+.TH "NPM\-BIN" "3" "January 2013" "" ""
 .
 .SH "NAME"
 \fBnpm-bin\fR \-\- Display npm bin folder
index 1a8e953..7997c17 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs 0.3.8
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-BUGS" "3" "December 2012" "" ""
+.TH "NPM\-BUGS" "3" "January 2013" "" ""
 .
 .SH "NAME"
 \fBnpm-bugs\fR \-\- Bugs for a package in a web browser maybe
index 9d3103f..5aafad6 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs 0.3.8
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-COMMANDS" "3" "December 2012" "" ""
+.TH "NPM\-COMMANDS" "3" "January 2013" "" ""
 .
 .SH "NAME"
 \fBnpm-commands\fR \-\- npm commands
index 600472f..5a43889 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs 0.3.8
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-CONFIG" "3" "December 2012" "" ""
+.TH "NPM\-CONFIG" "3" "January 2013" "" ""
 .
 .SH "NAME"
 \fBnpm-config\fR \-\- Manage the npm configuration files
index 3f83bf2..c9a7ecb 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs 0.3.8
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-DEPRECATE" "3" "December 2012" "" ""
+.TH "NPM\-DEPRECATE" "3" "January 2013" "" ""
 .
 .SH "NAME"
 \fBnpm-deprecate\fR \-\- Deprecate a version of a package
index ea9dbb0..6e9913c 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs 0.3.8
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-DOCS" "3" "December 2012" "" ""
+.TH "NPM\-DOCS" "3" "January 2013" "" ""
 .
 .SH "NAME"
 \fBnpm-docs\fR \-\- Docs for a package in a web browser maybe
index 5abc36f..938e3cc 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs 0.3.8
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-EDIT" "3" "December 2012" "" ""
+.TH "NPM\-EDIT" "3" "January 2013" "" ""
 .
 .SH "NAME"
 \fBnpm-edit\fR \-\- Edit an installed package
index 1d55e3b..c0cc6c0 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs 0.3.8
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-EXPLORE" "3" "December 2012" "" ""
+.TH "NPM\-EXPLORE" "3" "January 2013" "" ""
 .
 .SH "NAME"
 \fBnpm-explore\fR \-\- Browse an installed package
index b44525e..802e912 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs 0.3.8
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-HELP\-SEARCH" "3" "December 2012" "" ""
+.TH "NPM\-HELP\-SEARCH" "3" "January 2013" "" ""
 .
 .SH "NAME"
 \fBnpm-help-search\fR \-\- Search the help pages
index 26765c3..53db516 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs 0.3.8
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "INIT" "3" "December 2012" "" ""
+.TH "INIT" "3" "January 2013" "" ""
 .
 .SH "NAME"
 \fBinit\fR \-\- Interactively create a package\.json file
index aed53d2..67e871f 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs 0.3.8
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-INSTALL" "3" "December 2012" "" ""
+.TH "NPM\-INSTALL" "3" "January 2013" "" ""
 .
 .SH "NAME"
 \fBnpm-install\fR \-\- install a package programmatically
index 0c57b7f..1fbf67e 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs 0.3.8
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-LINK" "3" "December 2012" "" ""
+.TH "NPM\-LINK" "3" "January 2013" "" ""
 .
 .SH "NAME"
 \fBnpm-link\fR \-\- Symlink a package folder
index c2cf731..94cf49d 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs 0.3.8
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-LOAD" "3" "December 2012" "" ""
+.TH "NPM\-LOAD" "3" "January 2013" "" ""
 .
 .SH "NAME"
 \fBnpm-load\fR \-\- Load config settings
index 4694bc5..163e58b 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs 0.3.8
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-LS" "3" "December 2012" "" ""
+.TH "NPM\-LS" "3" "January 2013" "" ""
 .
 .SH "NAME"
 \fBnpm-ls\fR \-\- List installed packages
index 532d133..69a7507 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs 0.3.8
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM" "3" "December 2012" "" ""
+.TH "NPM" "3" "January 2013" "" ""
 .
 .SH "NAME"
 \fBnpm\fR \-\- node package manager
@@ -21,7 +21,7 @@ npm\.load(configObject, function (er, npm) {
 .fi
 .
 .SH "VERSION"
-1.1.70
+1.2.0
 .
 .SH "DESCRIPTION"
 This is the API documentation for npm\.
index 0a3f7c1..1247068 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs 0.3.8
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-OUTDATED" "3" "December 2012" "" ""
+.TH "NPM\-OUTDATED" "3" "January 2013" "" ""
 .
 .SH "NAME"
 \fBnpm-outdated\fR \-\- Check for outdated packages
index c6fc84c..2e706ed 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs 0.3.8
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-OWNER" "3" "December 2012" "" ""
+.TH "NPM\-OWNER" "3" "January 2013" "" ""
 .
 .SH "NAME"
 \fBnpm-owner\fR \-\- Manage package owners
index e98efbb..4a7596a 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs 0.3.8
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-PACK" "3" "December 2012" "" ""
+.TH "NPM\-PACK" "3" "January 2013" "" ""
 .
 .SH "NAME"
 \fBnpm-pack\fR \-\- Create a tarball from a package
index 13e8935..67b9a84 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs 0.3.8
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-PREFIX" "3" "December 2012" "" ""
+.TH "NPM\-PREFIX" "3" "January 2013" "" ""
 .
 .SH "NAME"
 \fBnpm-prefix\fR \-\- Display prefix
index 34e345c..1302dd7 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs 0.3.8
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-PRUNE" "3" "December 2012" "" ""
+.TH "NPM\-PRUNE" "3" "January 2013" "" ""
 .
 .SH "NAME"
 \fBnpm-prune\fR \-\- Remove extraneous packages
index 965c926..cbc618f 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs 0.3.8
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-PUBLISH" "3" "December 2012" "" ""
+.TH "NPM\-PUBLISH" "3" "January 2013" "" ""
 .
 .SH "NAME"
 \fBnpm-publish\fR \-\- Publish a package
index 198921f..ff3804c 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs 0.3.8
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-REBUILD" "3" "December 2012" "" ""
+.TH "NPM\-REBUILD" "3" "January 2013" "" ""
 .
 .SH "NAME"
 \fBnpm-rebuild\fR \-\- Rebuild a package
index d99d649..20c73f6 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs 0.3.8
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-RESTART" "3" "December 2012" "" ""
+.TH "NPM\-RESTART" "3" "January 2013" "" ""
 .
 .SH "NAME"
 \fBnpm-restart\fR \-\- Start a package
index cadd360..b863e85 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs 0.3.8
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-ROOT" "3" "December 2012" "" ""
+.TH "NPM\-ROOT" "3" "January 2013" "" ""
 .
 .SH "NAME"
 \fBnpm-root\fR \-\- Display npm root
index ccfac9f..237f11b 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs 0.3.8
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-RUN\-SCRIPT" "3" "December 2012" "" ""
+.TH "NPM\-RUN\-SCRIPT" "3" "January 2013" "" ""
 .
 .SH "NAME"
 \fBnpm-run-script\fR \-\- Run arbitrary package scripts
index d77173c..79218c5 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs 0.3.8
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-SEARCH" "3" "December 2012" "" ""
+.TH "NPM\-SEARCH" "3" "January 2013" "" ""
 .
 .SH "NAME"
 \fBnpm-search\fR \-\- Search for packages
index fb1bb7b..8e2ea94 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs 0.3.8
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-SHRINKWRAP" "3" "December 2012" "" ""
+.TH "NPM\-SHRINKWRAP" "3" "January 2013" "" ""
 .
 .SH "NAME"
 \fBnpm-shrinkwrap\fR \-\- programmatically generate package shrinkwrap file
index 1e47f08..172f928 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs 0.3.8
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-START" "3" "December 2012" "" ""
+.TH "NPM\-START" "3" "January 2013" "" ""
 .
 .SH "NAME"
 \fBnpm-start\fR \-\- Start a package
index 5a7f2a8..943f439 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs 0.3.8
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-STOP" "3" "December 2012" "" ""
+.TH "NPM\-STOP" "3" "January 2013" "" ""
 .
 .SH "NAME"
 \fBnpm-stop\fR \-\- Stop a package
index 1e2273a..22d95ff 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs 0.3.8
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-SUBMODULE" "3" "December 2012" "" ""
+.TH "NPM\-SUBMODULE" "3" "January 2013" "" ""
 .
 .SH "NAME"
 \fBnpm-submodule\fR \-\- Add a package as a git submodule
index 0ec1eb0..5b5a13b 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs 0.3.8
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-TAG" "3" "December 2012" "" ""
+.TH "NPM\-TAG" "3" "January 2013" "" ""
 .
 .SH "NAME"
 \fBnpm-tag\fR \-\- Tag a published version
index 030f934..590de2a 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs 0.3.8
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-TEST" "3" "December 2012" "" ""
+.TH "NPM\-TEST" "3" "January 2013" "" ""
 .
 .SH "NAME"
 \fBnpm-test\fR \-\- Test a package
index 8d3284c..cb51cc1 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs 0.3.8
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-UNINSTALL" "3" "December 2012" "" ""
+.TH "NPM\-UNINSTALL" "3" "January 2013" "" ""
 .
 .SH "NAME"
 \fBnpm-uninstall\fR \-\- uninstall a package programmatically
index a907be3..c2a868b 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs 0.3.8
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-UNPUBLISH" "3" "December 2012" "" ""
+.TH "NPM\-UNPUBLISH" "3" "January 2013" "" ""
 .
 .SH "NAME"
 \fBnpm-unpublish\fR \-\- Remove a package from the registry
index 5c56380..96885b7 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs 0.3.8
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-UPDATE" "3" "December 2012" "" ""
+.TH "NPM\-UPDATE" "3" "January 2013" "" ""
 .
 .SH "NAME"
 \fBnpm-update\fR \-\- Update a package
index d72f64a..06d46cb 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs 0.3.8
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-VERSION" "3" "December 2012" "" ""
+.TH "NPM\-VERSION" "3" "January 2013" "" ""
 .
 .SH "NAME"
 \fBnpm-version\fR \-\- Bump a package version
index 23e8906..dc70c52 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs 0.3.8
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-VIEW" "3" "December 2012" "" ""
+.TH "NPM\-VIEW" "3" "January 2013" "" ""
 .
 .SH "NAME"
 \fBnpm-view\fR \-\- View registry info
index 99f4d5a..07c89b6 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs 0.3.8
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-WHOAMI" "3" "December 2012" "" ""
+.TH "NPM\-WHOAMI" "3" "January 2013" "" ""
 .
 .SH "NAME"
 \fBnpm-whoami\fR \-\- Display npm username
index 4ed0c9c..6811462 100644 (file)
@@ -36,12 +36,15 @@ FileWriter.prototype._create = function () {
   me._stream = fs.createWriteStream(me._path, so)
 
   me._stream.on("open", function (fd) {
+    // console.error("FW open", me._buffer, me._path)
     me.ready = true
     me._buffer.forEach(function (c) {
       if (c === EOF) me._stream.end()
       else me._stream.write(c)
     })
     me.emit("ready")
+    // give this a kick just in case it needs it.
+    me.emit("drain")
   })
 
   me._stream.on("drain", function () { me.emit("drain") })
@@ -58,6 +61,8 @@ FileWriter.prototype.write = function (c) {
   me._bytesWritten += c.length
 
   if (!me.ready) {
+    if (!Buffer.isBuffer(c) && typeof c !== 'string')
+      throw new Error('invalid write data')
     me._buffer.push(c)
     return false
   }
index 2c78fc6..b047663 100644 (file)
@@ -71,7 +71,7 @@ ProxyWriter.prototype._addProxy = function (proxy) {
   var calls = me._buffer
   calls.forEach(function (c) {
     // console.error("~~ ~~ proxy buffered call", c[0], c[1])
-    proxy[c[0]].call(proxy, c[1])
+    proxy[c[0]].apply(proxy, c[1])
   })
   me._buffer.length = 0
   if (me._needsDrain) me.emit("drain")
@@ -102,7 +102,7 @@ ProxyWriter.prototype.write = function (c) {
 ProxyWriter.prototype.end = function (c) {
   // console.error("~~ proxy end")
   if (!this._proxy) {
-    this._buffer.push(["end", c])
+    this._buffer.push(["end", [c]])
     return false
   }
   return this._proxy.end(c)
index e15551b..1d3faaf 100644 (file)
@@ -6,7 +6,7 @@
   },
   "name": "fstream",
   "description": "Advanced file system stream things",
-  "version": "0.1.20",
+  "version": "0.1.21",
   "repository": {
     "type": "git",
     "url": "git://github.com/isaacs/fstream.git"
@@ -30,6 +30,6 @@
   "license": "BSD",
   "readme": "Like FS streams, but with stat on them, and supporting directories and\nsymbolic links, as well as normal files.  Also, you can use this to set\nthe stats on a file, even if you don't change its contents, or to create\na symlink, etc.\n\nSo, for example, you can \"write\" a directory, and it'll call `mkdir`.  You\ncan specify a uid and gid, and it'll call `chown`.  You can specify a\n`mtime` and `atime`, and it'll call `utimes`.  You can call it a symlink\nand provide a `linkpath` and it'll call `symlink`.\n\nNote that it won't automatically resolve symbolic links.  So, if you\ncall `fstream.Reader('/some/symlink')` then you'll get an object\nthat stats and then ends immediately (since it has no data).  To follow\nsymbolic links, do this: `fstream.Reader({path:'/some/symlink', follow:\ntrue })`.\n\nThere are various checks to make sure that the bytes emitted are the\nsame as the intended size, if the size is set.\n\n## Examples\n\n```javascript\nfstream\n  .Writer({ path: \"path/to/file\"\n          , mode: 0755\n          , size: 6\n          })\n  .write(\"hello\\n\")\n  .end()\n```\n\nThis will create the directories if they're missing, and then write\n`hello\\n` into the file, chmod it to 0755, and assert that 6 bytes have\nbeen written when it's done.\n\n```javascript\nfstream\n  .Writer({ path: \"path/to/file\"\n          , mode: 0755\n          , size: 6\n          , flags: \"a\"\n          })\n  .write(\"hello\\n\")\n  .end()\n```\n\nYou can pass flags in, if you want to append to a file.\n\n```javascript\nfstream\n  .Writer({ path: \"path/to/symlink\"\n          , linkpath: \"./file\"\n          , SymbolicLink: true\n          , mode: \"0755\" // octal strings supported\n          })\n  .end()\n```\n\nIf isSymbolicLink is a function, it'll be called, and if it returns\ntrue, then it'll treat it as a symlink.  If it's not a function, then\nany truish value will make a symlink, or you can set `type:\n'SymbolicLink'`, which does the same thing.\n\nNote that the linkpath is relative to the symbolic link location, not\nthe parent dir or cwd.\n\n```javascript\nfstream\n  .Reader(\"path/to/dir\")\n  .pipe(fstream.Writer(\"path/to/other/dir\"))\n```\n\nThis will do like `cp -Rp path/to/dir path/to/other/dir`.  If the other\ndir exists and isn't a directory, then it'll emit an error.  It'll also\nset the uid, gid, mode, etc. to be identical.  In this way, it's more\nlike `rsync -a` than simply a copy.\n",
   "readmeFilename": "README.md",
-  "_id": "fstream@0.1.20",
-  "_from": "fstream@~0.1.17"
+  "_id": "fstream@0.1.21",
+  "_from": "fstream@latest"
 }
index 9e4c2bb..8f049b4 100644 (file)
@@ -12,6 +12,7 @@ var fs = require('graceful-fs')
   , log = require('npmlog')
   , which = require('which')
   , mkdirp = require('mkdirp')
+  , exec = require('child_process').exec
   , win = process.platform == 'win32'
 
 exports.usage = 'Invokes `' + (win ? 'msbuild' : 'make') + '` and builds the module'
@@ -99,7 +100,7 @@ function build (gyp, argv, callback) {
       if (err) {
         if (win && /not found/.test(err.message)) {
           // On windows and no 'msbuild' found. Let's guess where it is
-          guessMsbuild()
+          findMsbuild()
         } else {
           // Some other error or 'make' not found on Unix, report that to the user
           callback(err)
@@ -112,28 +113,50 @@ function build (gyp, argv, callback) {
   }
 
   /**
-   * Guess the location of the "msbuild.exe" file on Windows.
+   * Search for the location of "msbuild.exe" file on Windows.
    */
 
-  function guessMsbuild () {
+  function findMsbuild () {
     log.verbose('could not find "msbuild.exe". guessing location')
-    // This is basically just hard-coded. If this causes problems
-    // then we'll think of something more clever.
-    var windir = process.env.WINDIR || process.env.SYSTEMROOT || 'C:\\WINDOWS'
-      , frameworkDir = path.resolve(windir, 'Microsoft.NET', 'Framework')
-      , versionDir = path.resolve(frameworkDir, 'v4.0.30319') // This is probably the most brittle part...
-      , msbuild = path.resolve(versionDir, 'msbuild.exe')
-    fs.stat(msbuild, function (err, stat) {
+    var notfoundErr = new Error('Can\'t find "msbuild.exe". Do you have Microsoft Visual Studio C++ 2008+ installed?')
+    exec('reg query HKLM\\Software\\Microsoft\\MSBuild\\ToolsVersions /s /f MSBuildToolsPath /e /t REG_SZ', function (err, stdout, stderr) {
+      var reVers = /Software\\Microsoft\\MSBuild\\ToolsVersions\\([^\r]+)\r\n\s+MSBuildToolsPath\s+REG_SZ\s+([^\r]+)/gi
+        , msbuilds = []
+        , r
+        , msbuildPath
       if (err) {
-        if (err.code == 'ENOENT') {
-          callback(new Error('Can\'t find "msbuild.exe". Do you have Microsoft Visual Studio C++ 2010 installed?'))
-        } else {
-          callback(err)
+        return callback(notfoundErr)
+      }
+      while (r = reVers.exec(stdout)) {
+        if (parseFloat(r[1], 10) >= 3.5) {
+          msbuilds.push({
+            version: parseFloat(r[1], 10),
+            path: r[2]
+          })
         }
-        return
       }
-      command = msbuild
-      copyNodeLib()
+      msbuilds.sort(function (x, y) {
+        return (x.version < y.version ? -1 : 1)
+      })
+      ;(function verifyMsbuild () {
+        msbuildPath = path.resolve(msbuilds.pop().path, 'msbuild.exe')
+        fs.stat(msbuildPath, function (err, stat) {
+          if (err) {
+            if (err.code == 'ENOENT') {
+              if (msbuilds.length) {
+                return verifyMsbuild()
+              } else {
+                callback(notfoundErr)
+              }
+            } else {
+              callback(err)
+            }
+            return
+          }
+          command = msbuildPath
+          copyNodeLib()
+        })
+      })()
     })
   }
 
index 08b6902..82de1e6 100644 (file)
@@ -91,11 +91,11 @@ function configure (gyp, argv, callback) {
   }
 
   function checkPythonVersion () {
-    execFile(python, ['-c', 'import platform; print platform.python_version();'], function (err, stdout) {
+    execFile(python, ['-c', 'import platform; print(platform.python_version());'], function (err, stdout) {
       if (err) {
         return callback(err)
       }
-      log.verbose('check python version', '`%s -c "import platform; print platform.python_version();"` returned: %j', python, stdout)
+      log.verbose('check python version', '`%s -c "import platform; print(platform.python_version());"` returned: %j', python, stdout)
       var version = stdout.trim()
       if (~version.indexOf('+')) {
         log.silly('stripping "+" sign(s) from version')
index d7b3b7e..ffa6076 100644 (file)
@@ -60,7 +60,7 @@ function install (gyp, argv, callback) {
   }
 
   // 0.x.y-pre versions are not published yet and cannot be installed. Bail.
-  if (version[5] === '-pre') {
+  if (version[5] && version[5].match(/\-pre$/)) {
     log.verbose('detected "pre" node version', versionStr)
     if (gyp.opts.nodedir) {
       log.verbose('--nodedir flag was passed; skipping install', gyp.opts.nodedir)
index b5cb0e5..811a533 100644 (file)
@@ -10,7 +10,7 @@
     "bindings",
     "gyp"
   ],
-  "version": "0.8.1",
+  "version": "0.8.2",
   "installVersion": 9,
   "author": {
     "name": "Nathan Rajlich",
@@ -46,6 +46,9 @@
   },
   "readme": "node-gyp\n=========\n### Node.js native addon build tool\n\n`node-gyp` is a cross-platform command-line tool written in Node.js for compiling\nnative addon modules for Node.js, which takes away the pain of dealing with the\nvarious differences in build platforms. It is the replacement to the `node-waf`\nprogram which is removed for node `v0.8`. If you have a native addon for node that\nstill has a `wscript` file, then you should definitely add a `binding.gyp` file\nto support the latest versions of node.\n\nMultiple target versions of node are supported (i.e. `0.6`, `0.7`,..., `1.0`,\netc.), regardless of what version of node is actually installed on your system\n(`node-gyp` downloads the necessary development files for the target version).\n\n#### Features:\n\n * Easy to use, consistent interface\n * Same commands to build your module on every platform\n * Supports multiple target versions of Node\n\n\nInstallation\n------------\n\nYou can install with `npm`:\n\n``` bash\n$ npm install -g node-gyp\n```\n\nYou will also need to install:\n\n  * On Unix:\n    * `python`\n    * `make`\n    * A proper C/C++ compiler toolchain, like GCC\n  * On Windows:\n    * [Python][windows-python] ([`v2.7.3`][windows-python-v2.7.3] recommended, `v3.x.x` is __*not*__ supported)\n    * Windows XP/Vista/7:\n      * Microsoft Visual Studio C++ 2010 ([Express][msvc2010] version works well)\n      * For 64-bit builds of node and native modules you will _**also**_ need the [Windows 7 64-bit SDK][win7sdk]\n      * If you get errors that the 64-bit compilers are not installed you may also need the [compiler update for the Windows SDK 7.1]\n    * Windows 8:\n      * Microsoft Visual Studio C++ 2012 for Windows Desktop ([Express][msvc2012] version works well)\n\nHow to Use\n----------\n\nTo compile your native addon, first go to its root directory:\n\n``` bash\n$ cd my_node_addon\n```\n\nThe next step is to generate the appropriate project build files for the current\nplatform. Use `configure` for that:\n\n``` bash\n$ node-gyp configure\n```\n\n__Note__: The `configure` step looks for the `binding.gyp` file in the current\ndirectory to processs. See below for instructions on creating the `binding.gyp` file.\n\nNow you will have either a `Makefile` (on Unix platforms) or a `vcxproj` file\n(on Windows) in the `build/` directory. Next invoke the `build` command:\n\n``` bash\n$ node-gyp build\n```\n\nNow you have your compiled `.node` bindings file! The compiled bindings end up\nin `build/Debug/` or `build/Release/`, depending on the build mode. At this point\nyou can require the `.node` file with Node and run your tests!\n\n__Note:__ To create a _Debug_ build of the bindings file, pass the `--debug` (or\n`-d`) switch when running the either `configure` or `build` command.\n\n\nThe \"binding.gyp\" file\n----------------------\n\nPreviously when node had `node-waf` you had to write a `wscript` file. The\nreplacement for that is the `binding.gyp` file, which describes the configuration\nto build your module in a JSON-like format. This file gets placed in the root of\nyour package, alongside the `package.json` file.\n\nA barebones `gyp` file appropriate for building a node addon looks like:\n\n``` json\n{\n  \"targets\": [\n    {\n      \"target_name\": \"binding\",\n      \"sources\": [ \"src/binding.cc\" ]\n    }\n  ]\n}\n```\n\nSome additional resources for writing `gyp` files:\n\n * [\"Hello World\" node addon example](https://github.com/joyent/node/tree/master/test/addons/hello-world)\n * [gyp user documentation](http://code.google.com/p/gyp/wiki/GypUserDocumentation)\n * [gyp input format reference](http://code.google.com/p/gyp/wiki/InputFormatReference)\n * [*\"binding.gyp\" files out in the wild* wiki page](https://github.com/TooTallNate/node-gyp/wiki/%22binding.gyp%22-files-out-in-the-wild)\n\n\nCommands\n--------\n\n`node-gyp` responds to the following commands:\n\n| **Command**   | **Description**\n|:--------------|:---------------------------------------------------------------\n| `build`       | Invokes `make`/`msbuild.exe` and builds the native addon\n| `clean`       | Removes any the `build` dir if it exists\n| `configure`   | Generates project build files for the current platform\n| `rebuild`     | Runs \"clean\", \"configure\" and \"build\" all in a row\n| `install`     | Installs node development header files for the given version\n| `list`        | Lists the currently installed node development file versions\n| `remove`      | Removes the node development header files for the given version\n\n\nLicense\n-------\n\n(The MIT License)\n\nCopyright (c) 2012 Nathan Rajlich &lt;nathan@tootallnate.net&gt;\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n\n[windows-python]: http://www.python.org/getit/windows\n[windows-python-v2.7.3]: http://www.python.org/download/releases/2.7.3#download\n[msvc2010]: http://go.microsoft.com/?linkid=9709949\n[msvc2012]: http://go.microsoft.com/?linkid=9816758\n[win7sdk]: http://www.microsoft.com/en-us/download/details.aspx?id=8279\n[compiler update for the Windows SDK 7.1]: http://www.microsoft.com/en-us/download/details.aspx?id=4422\n",
   "readmeFilename": "README.md",
-  "_id": "node-gyp@0.8.1",
-  "_from": "node-gyp@latest"
+  "_id": "node-gyp@0.8.2",
+  "dist": {
+    "shasum": "d1a72a944a16a97b91ed3ea2f2ec6e7c0826c294"
+  },
+  "_from": "node-gyp@~0.8.1"
 }
index a964c4f..2193009 100644 (file)
@@ -76,7 +76,7 @@ The following range styles are supported:
 * `<1.2.3` Less than
 * `1.2.3 - 2.3.4` := `>=1.2.3 <=2.3.4`
 * `~1.2.3` := `>=1.2.3 <1.3.0`
-* `~1.2` := `>=1.2.0 <2.0.0`
+* `~1.2` := `>=1.2.0 <1.3.0`
 * `~1` := `>=1.0.0 <2.0.0`
 * `1.2.x` := `>=1.2.0 <1.3.0`
 * `1.x` := `>=1.0.0 <2.0.0`
index f8abc45..7056071 100644 (file)
@@ -1,6 +1,6 @@
 {
   "name": "semver",
-  "version": "1.1.1",
+  "version": "1.1.2",
   "description": "The semantic version parser used by npm.",
   "main": "semver.js",
   "scripts": {
@@ -20,8 +20,8 @@
   "bin": {
     "semver": "./bin/semver"
   },
-  "readme": "semver(1) -- The semantic versioner for npm\n===========================================\n\n## Usage\n\n    $ npm install semver\n\n    semver.valid('1.2.3') // '1.2.3'\n    semver.valid('a.b.c') // null\n    semver.clean('  =v1.2.3   ') // '1.2.3'\n    semver.satisfies('1.2.3', '1.x || >=2.5.0 || 5.0.0 - 7.2.3') // true\n    semver.gt('1.2.3', '9.8.7') // false\n    semver.lt('1.2.3', '9.8.7') // true\n\nAs a command-line utility:\n\n    $ semver -h\n\n    Usage: semver -v <version> [-r <range>]\n    Test if version(s) satisfy the supplied range(s),\n    and sort them.\n\n    Multiple versions or ranges may be supplied.\n\n    Program exits successfully if any valid version satisfies\n    all supplied ranges, and prints all satisfying versions.\n\n    If no versions are valid, or ranges are not satisfied,\n    then exits failure.\n\n    Versions are printed in ascending order, so supplying\n    multiple versions to the utility will just sort them.\n\n## Versions\n\nA version is the following things, in this order:\n\n* a number (Major)\n* a period\n* a number (minor)\n* a period\n* a number (patch)\n* OPTIONAL: a hyphen, followed by a number (build)\n* OPTIONAL: a collection of pretty much any non-whitespace characters\n  (tag)\n\nA leading `\"=\"` or `\"v\"` character is stripped off and ignored.\n\n## Comparisons\n\nThe ordering of versions is done using the following algorithm, given\ntwo versions and asked to find the greater of the two:\n\n* If the majors are numerically different, then take the one\n  with a bigger major number. `2.3.4 > 1.3.4`\n* If the minors are numerically different, then take the one\n  with the bigger minor number. `2.3.4 > 2.2.4`\n* If the patches are numerically different, then take the one with the\n  bigger patch number. `2.3.4 > 2.3.3`\n* If only one of them has a build number, then take the one with the\n  build number.  `2.3.4-0 > 2.3.4`\n* If they both have build numbers, and the build numbers are numerically\n  different, then take the one with the bigger build number.\n  `2.3.4-10 > 2.3.4-9`\n* If only one of them has a tag, then take the one without the tag.\n  `2.3.4 > 2.3.4-beta`\n* If they both have tags, then take the one with the lexicographically\n  larger tag.  `2.3.4-beta > 2.3.4-alpha`\n* At this point, they're equal.\n\n## Ranges\n\nThe following range styles are supported:\n\n* `>1.2.3` Greater than a specific version.\n* `<1.2.3` Less than\n* `1.2.3 - 2.3.4` := `>=1.2.3 <=2.3.4`\n* `~1.2.3` := `>=1.2.3 <1.3.0`\n* `~1.2` := `>=1.2.0 <2.0.0`\n* `~1` := `>=1.0.0 <2.0.0`\n* `1.2.x` := `>=1.2.0 <1.3.0`\n* `1.x` := `>=1.0.0 <2.0.0`\n\nRanges can be joined with either a space (which implies \"and\") or a\n`||` (which implies \"or\").\n\n## Functions\n\n* valid(v): Return the parsed version, or null if it's not valid.\n* inc(v, release): Return the version incremented by the release type\n  (major, minor, patch, or build), or null if it's not valid.\n\n### Comparison\n\n* gt(v1, v2): `v1 > v2`\n* gte(v1, v2): `v1 >= v2`\n* lt(v1, v2): `v1 < v2`\n* lte(v1, v2): `v1 <= v2`\n* eq(v1, v2): `v1 == v2` This is true if they're logically equivalent,\n  even if they're not the exact same string.  You already know how to\n  compare strings.\n* neq(v1, v2): `v1 != v2` The opposite of eq.\n* cmp(v1, comparator, v2): Pass in a comparison string, and it'll call\n  the corresponding function above.  `\"===\"` and `\"!==\"` do simple\n  string comparison, but are included for completeness.  Throws if an\n  invalid comparison string is provided.\n* compare(v1, v2): Return 0 if v1 == v2, or 1 if v1 is greater, or -1 if\n  v2 is greater.  Sorts in ascending order if passed to Array.sort().\n* rcompare(v1, v2): The reverse of compare.  Sorts an array of versions\n  in descending order when passed to Array.sort().\n\n\n### Ranges\n\n* validRange(range): Return the valid range or null if it's not valid\n* satisfies(version, range): Return true if the version satisfies the\n  range.\n* maxSatisfying(versions, range): Return the highest version in the list\n  that satisfies the range, or null if none of them do.\n",
+  "readme": "semver(1) -- The semantic versioner for npm\n===========================================\n\n## Usage\n\n    $ npm install semver\n\n    semver.valid('1.2.3') // '1.2.3'\n    semver.valid('a.b.c') // null\n    semver.clean('  =v1.2.3   ') // '1.2.3'\n    semver.satisfies('1.2.3', '1.x || >=2.5.0 || 5.0.0 - 7.2.3') // true\n    semver.gt('1.2.3', '9.8.7') // false\n    semver.lt('1.2.3', '9.8.7') // true\n\nAs a command-line utility:\n\n    $ semver -h\n\n    Usage: semver -v <version> [-r <range>]\n    Test if version(s) satisfy the supplied range(s),\n    and sort them.\n\n    Multiple versions or ranges may be supplied.\n\n    Program exits successfully if any valid version satisfies\n    all supplied ranges, and prints all satisfying versions.\n\n    If no versions are valid, or ranges are not satisfied,\n    then exits failure.\n\n    Versions are printed in ascending order, so supplying\n    multiple versions to the utility will just sort them.\n\n## Versions\n\nA version is the following things, in this order:\n\n* a number (Major)\n* a period\n* a number (minor)\n* a period\n* a number (patch)\n* OPTIONAL: a hyphen, followed by a number (build)\n* OPTIONAL: a collection of pretty much any non-whitespace characters\n  (tag)\n\nA leading `\"=\"` or `\"v\"` character is stripped off and ignored.\n\n## Comparisons\n\nThe ordering of versions is done using the following algorithm, given\ntwo versions and asked to find the greater of the two:\n\n* If the majors are numerically different, then take the one\n  with a bigger major number. `2.3.4 > 1.3.4`\n* If the minors are numerically different, then take the one\n  with the bigger minor number. `2.3.4 > 2.2.4`\n* If the patches are numerically different, then take the one with the\n  bigger patch number. `2.3.4 > 2.3.3`\n* If only one of them has a build number, then take the one with the\n  build number.  `2.3.4-0 > 2.3.4`\n* If they both have build numbers, and the build numbers are numerically\n  different, then take the one with the bigger build number.\n  `2.3.4-10 > 2.3.4-9`\n* If only one of them has a tag, then take the one without the tag.\n  `2.3.4 > 2.3.4-beta`\n* If they both have tags, then take the one with the lexicographically\n  larger tag.  `2.3.4-beta > 2.3.4-alpha`\n* At this point, they're equal.\n\n## Ranges\n\nThe following range styles are supported:\n\n* `>1.2.3` Greater than a specific version.\n* `<1.2.3` Less than\n* `1.2.3 - 2.3.4` := `>=1.2.3 <=2.3.4`\n* `~1.2.3` := `>=1.2.3 <1.3.0`\n* `~1.2` := `>=1.2.0 <1.3.0`\n* `~1` := `>=1.0.0 <2.0.0`\n* `1.2.x` := `>=1.2.0 <1.3.0`\n* `1.x` := `>=1.0.0 <2.0.0`\n\nRanges can be joined with either a space (which implies \"and\") or a\n`||` (which implies \"or\").\n\n## Functions\n\n* valid(v): Return the parsed version, or null if it's not valid.\n* inc(v, release): Return the version incremented by the release type\n  (major, minor, patch, or build), or null if it's not valid.\n\n### Comparison\n\n* gt(v1, v2): `v1 > v2`\n* gte(v1, v2): `v1 >= v2`\n* lt(v1, v2): `v1 < v2`\n* lte(v1, v2): `v1 <= v2`\n* eq(v1, v2): `v1 == v2` This is true if they're logically equivalent,\n  even if they're not the exact same string.  You already know how to\n  compare strings.\n* neq(v1, v2): `v1 != v2` The opposite of eq.\n* cmp(v1, comparator, v2): Pass in a comparison string, and it'll call\n  the corresponding function above.  `\"===\"` and `\"!==\"` do simple\n  string comparison, but are included for completeness.  Throws if an\n  invalid comparison string is provided.\n* compare(v1, v2): Return 0 if v1 == v2, or 1 if v1 is greater, or -1 if\n  v2 is greater.  Sorts in ascending order if passed to Array.sort().\n* rcompare(v1, v2): The reverse of compare.  Sorts an array of versions\n  in descending order when passed to Array.sort().\n\n\n### Ranges\n\n* validRange(range): Return the valid range or null if it's not valid\n* satisfies(version, range): Return true if the version satisfies the\n  range.\n* maxSatisfying(versions, range): Return the highest version in the list\n  that satisfies the range, or null if none of them do.\n",
   "readmeFilename": "README.md",
-  "_id": "semver@1.1.1",
-  "_from": "semver@~1.1.0"
+  "_id": "semver@1.1.2",
+  "_from": "semver@latest"
 }
index a0a144e..a645da5 100644 (file)
@@ -1,5 +1,5 @@
 {
-  "version": "1.1.70",
+  "version": "1.2.0",
   "name": "npm",
   "publishConfig": {
     "proprietary-attribs": false
@@ -34,7 +34,7 @@
   "main": "./lib/npm.js",
   "bin": "./bin/npm-cli.js",
   "dependencies": {
-    "semver": "~1.1.0",
+    "semver": "~1.1.2",
     "ini": "~1.0.5",
     "slide": "1",
     "abbrev": "1",
diff --git a/deps/npm/test/packages/npm-test-peer-deps-invalid/README b/deps/npm/test/packages/npm-test-peer-deps-invalid/README
new file mode 100644 (file)
index 0000000..8848f07
--- /dev/null
@@ -0,0 +1 @@
+just an npm test
diff --git a/deps/npm/test/packages/npm-test-peer-deps-invalid/npm-ls.json b/deps/npm/test/packages/npm-test-peer-deps-invalid/npm-ls.json
new file mode 100644 (file)
index 0000000..6b113ad
--- /dev/null
@@ -0,0 +1,22 @@
+{
+  "name": "npm-test-peer-deps-invalid",
+  "version": "0.0.0",
+  "dependencies": {
+    "npm-test-peer-deps-file": {
+      "version": "1.2.3",
+      "from": "https://raw.github.com/gist/3971128/3f6aa37b4fa1186c2f47da9b77dcc4ec496e3483/index.js",
+      "dependencies": {
+       "opener": {
+         "version": "1.3.0"
+       }
+      }
+    },
+    "npm-test-peer-deps-file-invalid": {
+      "version": "1.2.3",
+      "from": "https://gist.github.com/raw/4303335/861f8d3213061826ab31591840c3cb0ac737f4fc/index.js"
+    },
+    "dict": {
+      "peerInvalid": true
+    }
+  }
+}
diff --git a/deps/npm/test/packages/npm-test-peer-deps-invalid/package.json b/deps/npm/test/packages/npm-test-peer-deps-invalid/package.json
new file mode 100644 (file)
index 0000000..2fd6104
--- /dev/null
@@ -0,0 +1,12 @@
+{
+  "author": "Domenic Denicola <domenic@domenicdenicola.com> (http://domenicdenicola.com/)",
+  "name": "npm-test-peer-deps-invalid",
+  "version": "0.0.0",
+  "dependencies": {
+    "npm-test-peer-deps-file": "https://raw.github.com/gist/3971128/3f6aa37b4fa1186c2f47da9b77dcc4ec496e3483/index.js",
+    "npm-test-peer-deps-file-invalid": "https://gist.github.com/raw/4303335/861f8d3213061826ab31591840c3cb0ac737f4fc/index.js"
+  },
+  "scripts": {
+    "test": "node test.js"
+  }
+}
diff --git a/deps/npm/test/packages/npm-test-peer-deps-invalid/test.js b/deps/npm/test/packages/npm-test-peer-deps-invalid/test.js
new file mode 100644 (file)
index 0000000..e452114
--- /dev/null
@@ -0,0 +1,31 @@
+var path = require("path")
+var assert = require("assert")
+
+process.env.npm_config_prefix = process.cwd()
+delete process.env.npm_config_global
+delete process.env.npm_config_depth
+
+var npm = process.env.npm_execpath
+
+require("child_process").exec(npm + " ls --json", {
+    env: process.env, cwd: process.cwd() },
+    function (err, stdout, stderr) {
+
+  var actual = JSON.parse(stdout).dependencies
+  var expected = require("./npm-ls.json").dependencies
+
+  // Delete the "problems" entry because it contains system-specific path info,
+  // so we can't compare it accurately and thus have deleted it from
+  // ./npm-ls.json.
+  delete actual.dict.problems
+
+  // It's undefined which peerDependency will get installed first, so
+  // this will be either version 1.1.0 or version 1.0.0
+  var dictVer = actual.dict.version
+  delete actual.dict.version
+  assert(dictVer === "1.1.0" || dictVer === "1.0.0")
+  assert.deepEqual(actual, expected)
+
+  assert.ok(err)
+  assert(/peer invalid/.test(err.message))
+})
diff --git a/deps/npm/test/packages/npm-test-peer-deps/README b/deps/npm/test/packages/npm-test-peer-deps/README
new file mode 100644 (file)
index 0000000..8848f07
--- /dev/null
@@ -0,0 +1 @@
+just an npm test
diff --git a/deps/npm/test/packages/npm-test-peer-deps/npm-ls.json b/deps/npm/test/packages/npm-test-peer-deps/npm-ls.json
new file mode 100644 (file)
index 0000000..05dda41
--- /dev/null
@@ -0,0 +1,18 @@
+{
+  "name": "npm-test-peer-deps",
+  "version": "0.0.0",
+  "dependencies": {
+    "npm-test-peer-deps-file": {
+      "version": "1.2.3",
+      "from": "https://raw.github.com/gist/3971128/3f6aa37b4fa1186c2f47da9b77dcc4ec496e3483/index.js",
+      "dependencies": {
+        "opener": {
+          "version": "1.3.0"
+        }
+      }
+    },
+    "dict": {
+      "version": "1.1.0"
+    }
+  }
+}
diff --git a/deps/npm/test/packages/npm-test-peer-deps/package.json b/deps/npm/test/packages/npm-test-peer-deps/package.json
new file mode 100644 (file)
index 0000000..a132fe1
--- /dev/null
@@ -0,0 +1,11 @@
+{
+  "author": "Domenic Denicola <domenic@domenicdenicola.com> (http://domenicdenicola.com/)",
+  "name": "npm-test-peer-deps",
+  "version": "0.0.0",
+  "dependencies": {
+    "npm-test-peer-deps-file": "https://raw.github.com/gist/3971128/3f6aa37b4fa1186c2f47da9b77dcc4ec496e3483/index.js"
+  },
+  "scripts": {
+    "test": "node test.js"
+  }
+}
diff --git a/deps/npm/test/packages/npm-test-peer-deps/test.js b/deps/npm/test/packages/npm-test-peer-deps/test.js
new file mode 100644 (file)
index 0000000..9b316f2
--- /dev/null
@@ -0,0 +1,20 @@
+var path = require("path")
+var assert = require("assert")
+
+process.env.npm_config_prefix = process.cwd()
+delete process.env.npm_config_global
+delete process.env.npm_config_depth
+
+var npm = process.env.npm_execpath
+
+require("child_process").exec(npm + " ls --json", {
+    env: process.env, cwd: process.cwd() },
+    function (err, stdout, stderr) {
+
+  if (err) throw err
+
+  var actual = JSON.parse(stdout).dependencies
+  var expected = require("./npm-ls.json").dependencies
+
+  assert.deepEqual(actual, expected)
+})