|  | 
|  | 1 | +### v4.1.1 (2016-12-16) | 
|  | 2 | + | 
|  | 3 | +This fixes a bug in the metrics reporting where, if you had enabled it then | 
|  | 4 | +installs would create a metrics reporting process, that would create a | 
|  | 5 | +metrics reporting process, that would… well, you get the idea.  The only | 
|  | 6 | +way to actually kill these processes is to turn off your networking, then | 
|  | 7 | +on MacOS/Linux kill them with `kill -9`. Alternatively you can just reboot. | 
|  | 8 | + | 
|  | 9 | +Anyway, this is a quick release to fix that bug: | 
|  | 10 | + | 
|  | 11 | +* [`51c393f`](https://github.com/npm/npm/commit/51c393feff5f4908c8a9fb02baef505b1f2259be) | 
|  | 12 | +  [#15237](https://github.com/npm/npm/pull/15237) | 
|  | 13 | +  Don't launch a metrics sender process if we're runnning from a metrics | 
|  | 14 | +  sender process. | 
|  | 15 | +  ([@iarna](https://github.com/iarna)) | 
|  | 16 | + | 
|  | 17 | +### v4.1.0 (2016-12-15) | 
|  | 18 | + | 
|  | 19 | +I'm really excited about `npm@4.1.0`. I know, I know, I'm kinda overexcited | 
|  | 20 | +in my changelogs, but this one is GREAT. We've got a WHOLE NEW subcommand, I | 
|  | 21 | +mean, when was the last time you saw that? YEARS! And we have the beginnings | 
|  | 22 | +of usage metrics reporting. Then there's a fix for a really subtle bug that | 
|  | 23 | +resulted in `shasum` errors. And then we also have a few more bug fixes and | 
|  | 24 | +other improvements. | 
|  | 25 | + | 
|  | 26 | +#### ANONYMOUS METRIC REPORTING | 
|  | 27 | + | 
|  | 28 | +We're adding the ability for you all to help us track the quality of your | 
|  | 29 | +experiences using `npm`. Metrics will be sent if you run: | 
|  | 30 | + | 
|  | 31 | +``` | 
|  | 32 | +npm config set send-metrics true | 
|  | 33 | +``` | 
|  | 34 | + | 
|  | 35 | +Then `npm` will report to `registry.npmjs.org` the number of successful and | 
|  | 36 | +failed installations you've had. The data contains no identifying | 
|  | 37 | +information and npm will not attempt to correlate things like IP address | 
|  | 38 | +with the metrics being submitted. | 
|  | 39 | + | 
|  | 40 | +Currently we only track number of successful and failed installations. In | 
|  | 41 | +the future we would like to find additional metrics to help us better | 
|  | 42 | +quantify the quality of the `npm` experience. | 
|  | 43 | + | 
|  | 44 | +* [`190a658`](https://github.com/npm/npm/commit/190a658c4222f6aa904cbc640fc394a5c875e4db) | 
|  | 45 | +  [#15084](https://github.com/npm/npm/pull/15084) | 
|  | 46 | +  Add facility for recording and reporting success metrics. | 
|  | 47 | +  ([@iarna](https://github.com/iarna)) | 
|  | 48 | +* [`87afc8b`](https://github.com/npm/npm/commit/87afc8b466f553fb49746c932c259173de48d0a4) | 
|  | 49 | +  [npm/npm-registry-client#147](https://github.com/npm/npm-registry-client/pull/148) | 
|  | 50 | +  `npm-registry-client@7.4.5`: | 
|  | 51 | +  Add support for sending anonymous CLI metrics. | 
|  | 52 | +  ([@iarna](https://github.com/iarna), | 
|  | 53 | +  [@sisidovski](https://github.com/sisidovski)) | 
|  | 54 | + | 
|  | 55 | +### NPM DOCTOR | 
|  | 56 | + | 
|  | 57 | +<pre> | 
|  | 58 | +<u>Check</u>                               <u>Value</u>                        <u>Recommendation</u> | 
|  | 59 | +npm ping                            ok | 
|  | 60 | +npm -v                              v4.0.5 | 
|  | 61 | +node -v                             v4.6.1                       Use node v6.9.2 | 
|  | 62 | +npm config get registry             https://registry.npmjs.org/ | 
|  | 63 | +which git                           /Users/rebecca/bin/git | 
|  | 64 | +Perms check on cached files         ok | 
|  | 65 | +Perms check on global node_modules  ok | 
|  | 66 | +Perms check on local node_modules   ok | 
|  | 67 | +Checksum cached files               ok | 
|  | 68 | +</pre> | 
|  | 69 | + | 
|  | 70 | +It's a rare day that we add a new command to `npm`, so I'm excited to | 
|  | 71 | +present to you `npm doctor`. It checks for a number of common problems and | 
|  | 72 | +provides some recommended solutions. It was put together through the hard | 
|  | 73 | +work of [@watilde](https://github.com/watilde). | 
|  | 74 | + | 
|  | 75 | +* [`2359505`](https://github.com/npm/npm/commit/23595055669f76c9fe8f5f1cf4a705c2e794f0dc) | 
|  | 76 | +  [`0209ee5`](https://github.com/npm/npm/commit/0209ee50448441695fbf9699019d34178b69ba73) | 
|  | 77 | +  [#14582](https://github.com/npm/npm/pull/14582) | 
|  | 78 | +  Add new `npm doctor` to give your project environment a health check. | 
|  | 79 | +  ([@watilde](https://github.com/watilde)) | 
|  | 80 | + | 
|  | 81 | +#### FIX MAJOR SOURCE OF SHASUM ERRORS | 
|  | 82 | + | 
|  | 83 | +If you've been getting intermittent shasum errors then you'll be pleased to | 
|  | 84 | +know that we've tracked down at least one source of them, if not THE source | 
|  | 85 | +of them. | 
|  | 86 | + | 
|  | 87 | +* [`87afc8b`](https://github.com/npm/npm/commit/87afc8b466f553fb49746c932c259173de48d0a4) | 
|  | 88 | +  [#14626](https://github.com/npm/npm/issues/14626) | 
|  | 89 | +  [npm/npm-registry-client#148](https://github.com/npm/npm-registry-client/pull/148) | 
|  | 90 | +  `npm-registry-client@7.4.5`: | 
|  | 91 | +  Fix a bug where an `ECONNRESET` while fetching a package file would result | 
|  | 92 | +  in a partial download that would be reported as a "shasum mismatch". It | 
|  | 93 | +  now throws away the partial download and retries it. | 
|  | 94 | +  ([@iarna](https://github.com/iarna)) | 
|  | 95 | + | 
|  | 96 | +#### FILE URLS AND NODE.JS 7 | 
|  | 97 | + | 
|  | 98 | +When `npm` was formatting `file` URLs we took advantage of `url.format` to | 
|  | 99 | +construct them. Node.js 7 changed the behavior in such a way that our use of | 
|  | 100 | +`url.format` stopped producing URLs that we could make use of. | 
|  | 101 | + | 
|  | 102 | +The reasons for this have to do with the `file` URL specification and how | 
|  | 103 | +invalid (according to the specification) URLs are handled. How this changed | 
|  | 104 | +is most easily explained with a table: | 
|  | 105 | + | 
|  | 106 | +<table> | 
|  | 107 | +<tr><th></th><th>URL</th><th>Node.js <= 6</th><th><tt>npm</tt>'s understanding</th><th>Node.js 7</th><th><tt>npm</tt>'s understanding</th></tr> | 
|  | 108 | +<tr><td>VALID</td><td><tt>file:///abc/def</tt></td><td><tt>file:///abc/def</tt></td><td><tt>/abc/def</tt></td><td><tt>file:///abc/def</tt></td><td><tt>/abc/def</tt></td></tr> | 
|  | 109 | +<tr><td>invalid</td><td><tt>file:/abc/def</tt></td><td><tt>file:/abc/def</tt></td><td><tt>/abc/def</tt></td><td><tt>file:///abc/def</tt></td><td><tt>/abc/def</tt></td></tr> | 
|  | 110 | +<tr><td>invalid</td><td><tt>file:abc/def</tt></td><td><tt>file:abc/def</tt></td><td><tt>$CWD/abc/def</tt></td><td><tt>file://abc/def</tt></td><td><tt>/def</tt> on the <tt>abc</tt> host</td></tr> | 
|  | 111 | +<tr><td>invalid</td><td><tt>file:../abc/def</tt></td><td><tt>file:../abc/def</tt></td><td><tt>$CWD/../abc/def</tt></td><td><tt>file://../abc/def</tt></td><td><tt>/abc/def</tt> on the <tt>..</tt> host</td></tr> | 
|  | 112 | +</table> | 
|  | 113 | + | 
|  | 114 | +So the result was that passing a `file` URL that npm had received that used | 
|  | 115 | +through Node.js 7's `url.format` changed its meaning as far as `npm` was | 
|  | 116 | +concerned. As those kinds of URLs are, per the specification, invalid, how | 
|  | 117 | +they should be handled is undefined and so the change in Node.js wasn't a | 
|  | 118 | +bug per se. | 
|  | 119 | + | 
|  | 120 | +Our solution is to stop using `url.format` when constructing this kind of | 
|  | 121 | +URL. | 
|  | 122 | + | 
|  | 123 | +* [`173935b`](https://github.com/npm/npm/commit/173935b4298e09c4fdcb8f3a44b06134d5aff181) | 
|  | 124 | +  [#15114](https://github.com/npm/npm/issues/15114) | 
|  | 125 | +  Stop using `url.format` for relative local dep paths. | 
|  | 126 | +  ([@zkat](https://github.com/zkat)) | 
|  | 127 | + | 
|  | 128 | +#### EXTRANEOUS LIFECYCLE SCRIPT EXECUTION WHEN REMOVING | 
|  | 129 | + | 
|  | 130 | +* [`afb1dfd`](https://github.com/npm/npm/commit/afb1dfd944e57add25a05770c0d52d983dc4e96c) | 
|  | 131 | +  [#15090](https://github.com/npm/npm/pull/15090) | 
|  | 132 | +  Skip top level lifecycles when uninstalling. | 
|  | 133 | +  ([@iarna](https://github.com/iarna)) | 
|  | 134 | + | 
|  | 135 | +#### REFACTORING AND INTERNALS | 
|  | 136 | + | 
|  | 137 | +* [`c9b279a`](https://github.com/npm/npm/commit/c9b279aca0fcb8d0e483e534c7f9a7250e2a9392) | 
|  | 138 | +  [#15205](https://github.com/npm/npm/pull/15205) | 
|  | 139 | +  [#15196](https://github.com/npm/npm/pull/15196) | 
|  | 140 | +  Only have one function that determines which version of a package to use | 
|  | 141 | +  given a specifier and a list of versions. | 
|  | 142 | +  ([@iarna](https://github.com/iarna), | 
|  | 143 | +  [@zkat](https://github.com/zkat)) | 
|  | 144 | + | 
|  | 145 | +* [`981ce63`](https://github.com/npm/npm/commit/981ce6395e7892dde2591b44e484e191f8625431) | 
|  | 146 | +  [#15090](https://github.com/npm/npm/pull/15090) | 
|  | 147 | +  Rewrite prune to use modern npm plumbing. | 
|  | 148 | +  ([@iarna](https://github.com/iarna)) | 
|  | 149 | + | 
|  | 150 | +* [`bc4b739`](https://github.com/npm/npm/commit/bc4b73911f58a11b4a2d28b49e24b4dd7365f95b) | 
|  | 151 | +  [#15089](https://github.com/npm/npm/pull/15089) | 
|  | 152 | +  Rename functions and variables in the module that computes what changes to | 
|  | 153 | +  make to your installation. | 
|  | 154 | +  ([@iarna](https://github.com/iarna)) | 
|  | 155 | + | 
|  | 156 | +* [`2449f74`](https://github.com/npm/npm/commit/2449f74a202b3efdb1b2f5a83356a78ea9ecbe35) | 
|  | 157 | +  [#15089](https://github.com/npm/npm/pull/15089) | 
|  | 158 | +  When computing changes to make to your installation, use a function to add | 
|  | 159 | +  new actions to take instead of just pushing on a list. | 
|  | 160 | +  ([@iarna](https://github.com/iarna)) | 
|  | 161 | + | 
|  | 162 | +#### IMPROVED LOGGING | 
|  | 163 | + | 
|  | 164 | +* [`335933a`](https://github.com/npm/npm/commit/335933a05396258eead139d27eea3f7668ccdfab) | 
|  | 165 | +  [#15089](https://github.com/npm/npm/pull/15089) | 
|  | 166 | +  Log when we remove obsolete dependencies in the tree. | 
|  | 167 | +  ([@iarna](https://github.com/iarna)) | 
|  | 168 | + | 
|  | 169 | +#### DOCUMENTATION | 
|  | 170 | + | 
|  | 171 | +* [`33ca4e6`](https://github.com/npm/npm/commit/33ca4e6db3c1878cbc40d5e862ab49bb0e82cfb2) | 
|  | 172 | +  [#15157](https://github.com/npm/npm/pull/15157) | 
|  | 173 | +  Update `npm cache` docs to use more consistent language | 
|  | 174 | +  ([@JonahMoses](https://github.com/JonahMoses)) | 
|  | 175 | + | 
|  | 176 | +#### DEPENDENCY UPDATES | 
|  | 177 | + | 
|  | 178 | +* [`c2d22fa`](https://github.com/npm/npm/commit/c2d22faf916e8260136a1cc95913ca474421c0d3) | 
|  | 179 | +  [#15215](https://github.com/npm/npm/pull/15215) | 
|  | 180 | +  `nopt@4.0.1`: | 
|  | 181 | +  The breaking change is a small tweak to how empty string values are | 
|  | 182 | +  handled. See the brand-new | 
|  | 183 | +  [CHANGELOG.md for nopt](https://github.com/npm/nopt/blob/v4.0.1/CHANGELOG.md) for further | 
|  | 184 | +  details about what's changed in this release! | 
|  | 185 | +  ([@adius](https://github.com/adius), | 
|  | 186 | +  [@samjonester](https://github.com/samjonester), | 
|  | 187 | +  [@elidoran](https://github.com/elidoran), | 
|  | 188 | +  [@helio](https://github.com/helio), | 
|  | 189 | +  [@silkentrance](https://github.com/silkentrance), | 
|  | 190 | +  [@othiym23](https://github.com/othiym23)) | 
|  | 191 | +* [`54d949b`](https://github.com/npm/npm/commit/54d949b05adefffeb7b5b10229c5fe0ccb929ac3) | 
|  | 192 | +  [npm/lockfile#24](https://github.com/npm/lockfile/pull/24) | 
|  | 193 | +  `lockfile@1.0.3`: | 
|  | 194 | +  Handled case where callback was not passed in by the user. | 
|  | 195 | +  ([@ORESoftware](https://github.com/ORESoftware)) | 
|  | 196 | +* [`54acc03`](https://github.com/npm/npm/commit/54acc0389b39850c0725d0868cb5e61317b57503) | 
|  | 197 | +  `npmlog@4.0.2`: | 
|  | 198 | +  Documentation update. | 
|  | 199 | +  ([@helio-frota](https://github.com/helio-frota)) | 
|  | 200 | +* [`57f4bc1`](https://github.com/npm/npm/commit/57f4bc1150322294c1ea0a287ad0a8e457c151e6) | 
|  | 201 | +  `osenv@0.1.4`: | 
|  | 202 | +  Test changes. | 
|  | 203 | +  ([@isaacs](https://github.com/isaacs)) | 
|  | 204 | +* [`bea1a2d`](https://github.com/npm/npm/commit/bea1a2d0db566560e13ecc1d5f42e55811269c88) | 
|  | 205 | +  `retry@0.10.1`: | 
|  | 206 | +  No changes. | 
|  | 207 | +  ([@tim-kos](https://github.com/tim-kos)) | 
|  | 208 | +* [`6749e39`](https://github.com/npm/npm/commit/6749e395f868109afd97f79d36507e6567dd48fb) | 
|  | 209 | +  [kapouer/marked-man#9](https://github.com/kapouer/marked-man/pull/9) | 
|  | 210 | +  `marked-man@0.2.0`: | 
|  | 211 | +  Add table support. | 
|  | 212 | +  ([@gholk](https://github.com/gholk)) | 
|  | 213 | + | 
| 1 | 214 | ### v4.0.5 (2016-12-01) | 
| 2 | 215 | 
 | 
| 3 | 216 | It's that time of year! December is upon us, which means y'all are just going to | 
| @@ -49,13 +262,13 @@ On to the actual changes! | 
| 49 | 262 |   `EPERM` errors are Windows are now handled more gracefully. Windows users that | 
| 50 | 263 |   tended to see these errors due to, say, an antivirus-induced race condition, | 
| 51 | 264 |   should see them much more rarely, if at all. | 
| 52 |  | -  ([@Kat Marchán](https://github.com/Kat Marchán)) | 
|  | 265 | +  ([@zkatr](https://github.com/zkat)) | 
| 53 | 266 | * [`85b0174`](https://github.com/npm/npm/commit/85b0174ba9842e8e89f3c33d009e4b4a9e877c7d) | 
| 54 | 267 |   `request@2.79.0` | 
| 55 |  | -  ([@Kat Marchán](https://github.com/Kat Marchán)) | 
|  | 268 | +  ([@zkat](https://github.com/zkat)) | 
| 56 | 269 | * [`9664d36`](https://github.com/npm/npm/commit/9664d36653503247737630440bc2ff657de965c3) | 
| 57 | 270 |   `tap@8.0.1` | 
| 58 |  | -  ([@Kat Marchán](https://github.com/Kat Marchán)) | 
|  | 271 | +  ([@zkat](https://github.com/zkat)) | 
| 59 | 272 | 
 | 
| 60 | 273 | #### MISCELLANEOUS | 
| 61 | 274 | 
 | 
| @@ -596,6 +809,7 @@ sending `Npm-Scope` and `Npm-In-CI` headers in outgoing requests. | 
| 596 | 809 | 
 | 
| 597 | 810 | * [`846f61c`](https://github.com/npm/npm/commit/846f61c1dd4a033f77aa736ab01c27ae6724fe1c) | 
| 598 | 811 |   [npm/npm-registry-client#145](https://github.com/npm/npm-registry-client/pull/145) | 
|  | 812 | +  [npm/npm-registry-client#147](https://github.com/npm/npm-registry-client/pull/147) | 
| 599 | 813 |   `npm-registry-client@7.3.0`: | 
| 600 | 814 |   * Allow npm to add headers to outgoing requests. | 
| 601 | 815 |   * Add `Npm-In-CI` header that reports whether we're running in CI. | 
|  | 
0 commit comments