1### v3.10.10 (2016-11-04)
2
3See the discussion on [#14042](https://github.com/npm/npm/issues/14042) for
4more context on this release, which is intended to address a serious regression
5in shrinkwrap behavior in the version of the CLI currently bundled with Node.js
66 LTS "Boron". You should never install this version directly; instead update
7to `npm@4`, which has everything in this release and more.
8
9#### REGRESSION FIX
10
11* [`9aebe98`](https://github.com/npm/npm/commit/9aebe982114ea2107f46baa1dcb11713b4aaad04)
12  [#14117](https://github.com/npm/npm/pull/14117)
13  Fixes a bug where installing a shrinkwrapped package would fail if the
14  platform failed to install an optional dependency included in the shrinkwrap.
15  ([@watilde](https://github.com/watilde))
16
17#### UPDATE SUPPORT MATRIX
18
19With the advent of the second official Node.js LTS release, Node 6.x
20'Boron', the Node.js project has now officially dropped versions 0.10
21and 0.12 out of the maintenance phase of LTS. (Also, Node 5 was never
22part of LTS, and will see no further support now that Node 7 has been
23released.) As a small team with limited resources, the npm CLI team is
24following suit and dropping those versions of Node from its CI test
25matrix.
26
27* [`c82ecfd`](https://github.com/npm/npm/commit/c82ecfdbe0b5f318a175714a8753efe4dfd3e4b3)
28  [#14503](https://github.com/npm/npm/pull/14503)
29  Node 6 is LTS; 5.x, 0.10, and 0.12 are unsupported.
30  ([@othiym23](https://github.com/othiym23))
31
32### v3.10.9 (2016-10-06)
33
34Hi everyone! This is the last of our monthly releases. We're going to give
35an every-two-weeks schedule a try starting with our next release. We'll
36reevaluate in a quarter, but we suspect that will be what we'll stick with.
37You might be wondering _why_ we've been fiddling with the release cadence? Well,
38we've been trying to tune it to to minimize the overhead for our little team.
39
40This is ALSO the ULTIMATE release of `npm` version 3. That's right, in
41just two weeks' time (October 20th for you fans of calendar time), our dear
42`npm` will be hitting the big 4.0.
43
44**DON'T PANIC**
45
46This is gonna be a much, MUCH smaller major version than 3.x was. Maybe even
47smaller than 2.x was. I can't tell you everything that'll be in there just
48yet, but at the very least it's going to have what's in our
49[4.x milestone](https://github.com/npm/npm/pulls?q=is%3Aopen+is%3Apr+milestone%3A4.x),
50PLUS, the first steps in
51[making `prepublish` work](https://github.com/npm/npm/issues/10074) the way
52people expect it to.
53
54**NOW ABOUT THIS RELEASE**
55
56This release sees a whole slew of bug fixes. Notably a bunch of lifecycle
57fixes and a really important shrinkwrap fix.
58
59#### LIFECYCLE FIXES
60
61* [`d388f90`](https://github.com/npm/npm/commit/d388f90732981633b3cdb4fc7fb0fababd4e64ab)
62  [#13942](https://github.com/npm/npm/pull/13942)
63  Fix current working directory while running shrinkwrap lifecycle scripts.
64  Previously if you ran a shrinkwrap from another lifecycle script AND
65  `node_modules` existed (and if you're running `npm shrinkwrap` it probably
66  should) then `npm` would run the shrinkwrap lifecycle from the
67  `node_modules` folder instead of the package folder.
68  ([@evocateur](https://github.com/evocateur))
69  ([@iarna](https://github.com/iarna))
70* [`c3b6cdf`](https://github.com/npm/npm/commit/c3b6cdfedcdb4d9e7712be5245d9b274828d88d1)
71  [#13964](https://github.com/npm/npm/pull/13964)
72  Fix bug where the `uninstall` lifecycles weren't being run when you
73  reinstalled/updated an existing module.
74  ([@iarna](https://github.com/iarna))
75* [`72bb89c`](https://github.com/npm/npm/commit/72bb89c1aa9811a18cbd766f3da73da76eb920c6)
76  [#13344](https://github.com/npm/npm/pull/13344)
77  When running lifecycles use `TMPDIR` if it's writable and fall back to the
78  current working directory if not. Previously we just assumed `TMPDIR`
79  wouldn't be writable (as we might have been running as `nobody` and
80  `nobody` on some systems can't write to `TMPDIR`).
81  ([@aaronjensen](https://github.com/aaronjensen))
82
83#### SHRINKWRAP GIT & TAGGED DEPENDENCY FIX
84
85* [`3b5eee0`](https://github.com/npm/npm/commit/3b5eee0d31737d1c2518ed95dcc7aaaaa93c253c)
86  [#13941](https://github.com/npm/npm/pull/13941)
87  Fix git and tagged dependency matching with shrinkwraps.  Previously git
88  and tag (ie `foo@latest`) dependencies installed from a shrinkwrap would
89  always be flagged as invalid.
90  ([@iarna](https://github.com/iarna))
91
92#### BUG FIXES
93
94* [`bf3bd1e`](https://github.com/npm/npm/commit/bf3bd1e4347ee2c5de08d23558c4444749178c8b)
95  [#14143](https://github.com/npm/npm/pull/14143)
96  Fix bug in `npm version` where `npm-shrinkwrap.json` wouldn't be updated
97  if you ran `npm version` from outside of your project root.
98  ([@lholmquist](https://github.com/lholmquist))
99* [`1089878`](https://github.com/npm/npm/commit/1089878f58977559414c8a9addfc69a9c68905b0)
100  [#13613](https://github.com/npm/npm/pull/13613)
101  Log 'skipping action' as 'verbose' instead of 'warn'. This removes a lot of
102  clutter when there are links in your `node_modules`. The long term plan is
103  to entirely blind `npm` to what's inside links, which will make this code
104  go away entirely.
105  ([@timoxley](https://github.com/timoxley))
106* [`952f1e1`](https://github.com/npm/npm/commit/952f1e109a070ab4066179f6104ba9394300e342)
107  [#13999](https://github.com/npm/npm/pull/13999)
108  Fix a bug where setting `bin` to `null` in your `package.json` would result
109  in `npm` crashing.
110  ([@IonicaBizau](https://github.com/IonicaBizau))
111* [`fcf8b11`](https://github.com/npm/npm/commit/fcf8b11fb7fcf8902f6a887c3d5f0aef2897dde0)
112  [#14032](https://github.com/npm/npm/pull/14032)
113  When using `npm view`, if you specified a version that didn't exist it
114  would previously print `undefined` (even if you asked for JSON output). It
115  now prints nothing in this situation. This brings `npm@3`'s behavior in
116  line with `npm@2`.
117  ([@roblg](https://github.com/roblg))
118* [`93c689f`](https://github.com/npm/npm/commit/93c689ff44c6042a2dcde7fe0d74d2264237d666)
119  [#14032](https://github.com/npm/npm/pull/14032)
120  When using `npm view --json` with a version range that matches multiple
121  versions we now return a list of all of the metadata for all of those
122  versions. Previously we picked one and only returned that. This brings
123  `npm@3`'s behavior in line with `npm@2`.
124  ([@roblg](https://github.com/roblg))
125* [`2411728`](https://github.com/npm/npm/commit/24117289e09c373b845150c45e4793d98fe7cf4b)
126  [#14045](https://github.com/npm/npm/pull/14045)
127  Fix a Windows-only bug in the `git` tests. The tests had rather particular
128  ideas about what arguments would be passed to `git` and on Windows they
129  got this wrong.
130  ([@watilde](https://github.com/watilde))
131
132#### DOCUMENTATION & MISC
133
134* [`30772cc`](https://github.com/npm/npm/commit/30772cc5f80923bf21c003fbe53e5fed9d3a5d97)
135  [#13904](https://github.com/npm/npm/pull/13904)
136  Update `package.json` example to include GitHub branches.
137  ([@stevokk](https://github.com/stevokk))
138* [`f66876f`](https://github.com/npm/npm/commit/f66876f75c204fb78028cf2ff7979f80355bd06c)
139  [#14010](https://github.com/npm/npm/pull/14010)
140  Update the GitHub issue template to reflect Apple's change in name of its
141  desktop operating system.
142  ([@AlexChesters](https://github.com/AlexChesters))
143
144#### DEPENDENCY UPDATES
145
146* [`b3f9bf1`](https://github.com/npm/npm/commit/b3f9bf1ada3f93e6775f5c232350030db6635d0c)
147  [#13918](https://github.com/npm/npm/issues/13918)
148  `graceful-fs@4.1.9`:
149  Fix the _uid must be an unsigned int_ bug that's been around forever but that
150  `npm` started tickling in v3.10.8.
151  ([@addaleax](https://github.com/addaleax))
152  Also fixes wrapper to `fs.readdir` to actually pass through (rather than
153  drop) optional arguments.
154  ([@isaacs](https://github.com/isaacs))
155* [`9402ead`](https://github.com/npm/npm/commit/9402ead67e3be9b431ade637fbfac86204ee96fe)
156  [isaacs/node-glob#293](https://github.com/isaacs/node-glob/pull/293)
157  `glob@7.1.0`:
158  Add `absolute` option for `match` event.
159  ([@phated](https://github.com/phated))
160* [`58b83db`](https://github.com/npm/npm/commit/58b83db327dd87bf7cb5a7d503303537718f2f30)
161  `asap@2.0.5`
162  ([@kriskowal](https://github.com/kriskowal))
163* [`5707e6e`](https://github.com/npm/npm/commit/5707e6e55b220439c3f83e77daf4c70d72eb46f0)
164  `sorted-object@2.0.1`
165  ([@domenic](https://github.com/domenic))
166* [`9d20910`](https://github.com/npm/npm/commit/9d209107ce49a7424c50459284280cd2e6e215d1)
167  `request@2.75.0`
168  ([@simov](https://github.com/simov))
169* [`dea4848`](https://github.com/npm/npm/commit/dea48487a9d03492edc68670d05776d32d9ee8cf)
170  `path-is-inside@1.0.2`
171  ([@domenic](https://github.com/domenic))
172* [`b3f3db5`](https://github.com/npm/npm/commit/b3f3db52e864d607b6d9b18920e2f58acc4b1616)
173  `opener@1.4.2`
174  ([@dominic](https://github.com/dominic))
175* [`6bb5f95`](https://github.com/npm/npm/commit/6bb5f953888bbaaeeb624d623c2a9746d1c243a0)
176  `lockfile@1.0.2`
177  ([@isaacs](https://github.com/isaacs))
178* [`13f7c0a`](https://github.com/npm/npm/commit/13f7c0a73212284b53a2d96882fc298afbf9609c)
179  `config-chain@1.1.11`
180  ([@dominictarr](https://github.com/dominictarr))
181
182### v3.10.8 (2016-09-08)
183
184Monthly releases are so big! Just look at all this stuff!
185
186Our quarter of monthly releases is almost over. The next one, in October, might
187very well be our last one as we move to trying something different and learning
188lessons from our little experiment.
189
190You may also want to keep an eye our for `npm@4` next month, since we're
191planning on finally releasing it then and including a (small) number of breaking
192changes we've been meaning to do for a long time. Don't worry, though: `npm@3`
193will still be around for a bit and will keep getting better and better, and is
194most likely going to be the version that `node@6` uses once it goes to LTS.
195
196As some of us have mentioned before, npm is likely to start doing more regular
197semver-major bumps, while keeping those bumps significantly smaller than the
198huge effort that was `npm@3` -- we're not very likely to do a world-shaking
199thing like that for a while, if ever.
200
201All that said, let's move on to the patches included in v3.10.8!
202
203#### SHRINKWRAP LEVEL UP
204
205The most notable part of this release is a series of commits meant to make `npm
206shrinkwrap` more consistent. By itself, shrinkwrap seems like a fairly
207straightforward thing to implement, but things get complicated when it starts
208interacting with `devDependencies`, `optionalDependencies`, and
209`bundledDependencies`. These commits address some corner cases related to these.
210
211* [`a7eca32`](https://github.com/npm/npm/commit/a7eca3246fbbcbb05434cb6677f65d14c945d74f)
212  [#10073](https://github.com/npm/npm/pull/10073)
213  Record if a dependency is only used as a devDependency and exclude it from the
214  shrinkwrap file.
215  ([@bengl](https://github.com/bengl))
216* [`1eabcd1`](https://github.com/npm/npm/commit/1eabcd16bf2590364ca20831096350073539bf3a)
217  [#10073](https://github.com/npm/npm/pull/10073)
218  Record if a dependency is optional to shrinkwrap.
219  ([@bengl](https://github.com/bengl))
220* [`03efc89`](https://github.com/npm/npm/commit/03efc89522c99ee0fa37d8f4a99bc3b44255ef98)
221  [#13692](https://github.com/npm/npm/pull/13692/)
222  We were doing a weird thing where we used a `package.json` field `installable`
223  to check to see if we'd checked for platform compatibility, and if not did
224  so. But this was the only place that was ever done so there was no reason to
225  implement it in such an obfuscated manner.
226  Instead it now just directly checks and then records that its done so on the
227  node object with `knownInstallable`. This is useful to know because modules
228  expanded via shrinkwrap don't go through this– `inflateShrinkwrap` does not
229  currently have any rollback semantics and so checking this sort of thing there
230  is unhelpful.
231  ([@iarna](https://github.com/iarna))
232* [`ff87938`](https://github.com/npm/npm/commit/ff879382fda21dac7216a5f666287b3a7e74a947)
233  [#11735](https://github.com/npm/npm/issues/11735)
234  Running `npm install --save-dev` will now update shrinkwrap file, but only
235  if there already are devDependencies in it.
236  ([@szimek](https://github.com/szimek))
237* [`c00ca3a`](https://github.com/npm/npm/commit/c00ca3aef836709eeaeade91c5305bc2fbda2e8a)
238  [#13394](https://github.com/npm/npm/issues/13394)
239  Check installability of modules from shrinkwrap, since modules that came into
240  the tree vie shrinkwrap won't already have this information recorded in
241  advance.
242  ([@iarna](https://github.com/iarna))
243
244#### INSTALLER ERROR REPORTING LEVEL UP
245
246As part of the shrinkwrap push, there were also a lot of error-reporting
247improvements. Some to add more detail to error objects, others to fix bugs and
248inconsistencies.
249
250* [`2cdd713`](https://github.com/npm/npm/commit/2cdd7132abddcc7f826a355c14348ce9a5897ffe)
251  Consistently set code on `ETARGET` when fetching package metadata if no
252  compatible version is found.
253  ([@iarna](https://github.com/iarna))
254* [`cabcd17`](https://github.com/npm/npm/commit/cabcd173f2923cb5b77e7be0e42eea2339a24727)
255  [#13692](https://github.com/npm/npm/pull/13692/)
256  Include installer warning details at the `verbose` log level.
257  ([@iarna](https://github.com/iarna))
258* [`95a4044`](https://github.com/npm/npm/commit/95a4044cbae93d19d0da0f3cd04ea8fa620295d9)
259  [`dbb14c2`](https://github.com/npm/npm/commit/dbb14c241d982596f1cdaee251658f5716989fd2)
260  [`9994383`](https://github.com/npm/npm/commit/9994383959798f80749093301ec43a8403566bb6)
261  [`7417000`](https://github.com/npm/npm/commit/74170003db0c53def9b798cb6fe3fe7fc3e06482)
262  [`f45f85d`](https://github.com/npm/npm/commit/f45f85dac800372d63dfa8653afccbf5bcae7295)
263  [`e79cc1b`](https://github.com/npm/npm/commit/e79cc1b11440f0d122c4744d5eff98def9553f4a)
264  [`146ee39`](https://github.com/npm/npm/commit/146ee394b1f7a33cf409a30b835a85d939acb438)
265  [#13692](https://github.com/npm/npm/pull/13692/)
266  Improve various bits of error reporting, adding more error information and
267  some related refactoring.
268  ([@iarna](https://github.com/iarna))
269
270#### MISCELLANEOUS BUGS LEVEL UP
271
272* [`116b6c6`](https://github.com/npm/npm/commit/116b6c60a174ea0cc49e4d62717e4e26175b6534)
273  [#13456](https://github.com/npm/npm/issues/13456)
274  In lifecycle scripts, any `node_modules/.bin` existing in the hierarchy
275  should be turned into an entry in the PATH environment variable.
276  However, prior to this commit, it was splitting based on the string
277  `node_modules`, rather than restricting it to only path portions like
278  `/node_modules/` or `\node_modules\`. So, a path containing an entry
279  like `my_node_modules` would be improperly split.
280  ([@isaacs](https://github.com/isaacs))
281* [`0a28dd0`](https://github.com/npm/npm/commit/0a28dd0104e5b4a8cc0cb038bd213e6a50827fe8)
282  [npm/fstream-npm#23](https://github.com/npm/fstream-npm/pull/23)
283  `fstream-npm@1.2.0`:
284  Always ignore `*.orig` files, which are generated by git when using `git
285  mergetool`, by default.
286  ([@zkat](https://github.com/zkat))
287* [`a3a2fb9`](https://github.com/npm/npm/commit/a3a2fb97adc87c2aa9b2b8957861b30efafc7ad0)
288  [#13708](https://github.com/npm/npm/pull/13708)
289  Always ignore `*.orig` files, which are generated by git when using `git
290  mergetool`, by default.
291  ([@boneskull](https://github.com/boneskull))
292
293#### TOOLING LEVEL UP
294
295* [`e1d7e6c`](https://github.com/npm/npm/commit/e1d7e6ce551cbc42026cdcadcb37ea515059c972)
296  Add helper for generating test skeletons.
297  ([@iarna](https://github.com/iarna))
298* [`4400b35`](https://github.com/npm/npm/commit/4400b356bca9175935edad1469c608c909bc01bf)
299  Fix fixture creation and cleanup in `maketest`.
300  ([@iarna](https://github.com/iarna))
301
302#### DOCUMENTATION LEVEL UP
303
304* [`8eb9460`](https://github.com/npm/npm/commit/8eb94601fe895b97cbcf8c6134e6b371c5371a1e)
305  [#13717](https://github.com/npm/npm/pull/13717)
306  Document that `npm link` will link the files specified in the `bin` field of
307  `package.json` to `{prefix}/bin/{name}`.
308  ([@legodude17](https://github.com/legodude17))
309* [`a66e5e9`](https://github.com/npm/npm/commit/a66e5e9c388878fe03fb29014c3b95d28bedd3c1)
310  [#13682](https://github.com/npm/npm/pull/13682)
311  Minor grammar fix in documentation for `npm scripts`.
312  ([@Ajedi32](https://github.com/Ajedi32))
313* [`74b8043`](https://github.com/npm/npm/commit/74b80437ffdfcf8172f6ed4f39bfb021608dd9dd)
314  [#13655](https://github.com/npm/npm/pull/13655)
315  Document line comment syntax for `.npmrc`.
316  ([@mdjasper](https://github.com/mdjasper))
317* [`b352a84`](https://github.com/npm/npm/commit/b352a84c2c7ad15e9c669af75f65cdaa964f86c0)
318  [#12438](https://github.com/npm/npm/issues/12438)
319  Remind folks to use `#!/usr/bin/env node` in their `bin` scripts to make files
320  executable directly.
321  ([@mxstbr](https://github.com/mxstbr))
322* [`b82fd83`](https://github.com/npm/npm/commit/b82fd838edbfff5d2833a62f6d8ae8ea2df5a1f2)
323  [#13493](https://github.com/npm/npm/pull/13493)
324  Document that the user config file can itself be configured either through the
325  `$NPM_CONFIG_USERCONFIG` environment variable, or `--userconfig` command line
326  flag.
327  ([@jasonkarns](https://github.com/jasonkarns))
328* [`8a02699`](https://github.com/npm/npm/commit/8a026992a03d90e563a97c70e90926862120693b)
329  [#13911](https://github.com/npm/npm/pull/13911)
330  Minor documentation reword and cleanup.
331  ([@othiym23](https://github.com/othiym23))
332
333#### DEPENDENCY LEVEL UP
334
335* [`2818fb0`](https://github.com/npm/npm/commit/2818fb0f6081d68a91f0905945ad102f26c6cf85)
336  `glob@7.0.6`
337  ([@isaacs](https://github.com/isaacs))
338* [`d88ec81`](https://github.com/npm/npm/commit/d88ec81ad33eb2268fcd517d35346a561bc59aff)
339  `graceful-fs@4.1.6`
340  ([@francescoinfante](https://github.com/francescoinfante))
341* [`4727f86`](https://github.com/npm/npm/commit/4727f8646daca7b3e3c1c95860e02acf583b9dae)
342  `lodash.clonedeep@4.5.0`
343  ([@jdalton](https://github.com/jdalton))
344* [`c347678`](https://github.com/npm/npm/commit/c3476780ef4483425e4ae1d095a5884b46b8db86)
345  `lodash.union@4.6.0`
346  ([@jdalton](https://github.com/jdalton))
347* [`530bd4d`](https://github.com/npm/npm/commit/530bd4d2ae6f704f624e4f7bf64f911f37e2b7f8)
348  `lodash.uniq@4.5.0`
349  ([@jdalton](https://github.com/jdalton))
350* [`483d56a`](https://github.com/npm/npm/commit/483d56ae8137eca0c0f7acd5d1c88ca6d5118a6a)
351  `lodash.without@4.4.0`
352  ([@jdalton](https://github.com/jdalton))
353* [`6c934df`](https://github.com/npm/npm/commit/6c934df6e74bacd0ed40767b319936837a43b586)
354  `inherits@2.0.3`
355  ([@isaacs](https://github.com/isaacs))
356* [`a65ed7c`](https://github.com/npm/npm/commit/a65ed7cbd3c950383a14461a4b2c87b67ef773b9)
357  `npm-registry-client@7.2.1`:
358  * [npm/npm-registry-client#142](https://github.com/npm/npm-registry-client/pull/142) Fix `EventEmitter` warning spam from error handlers on socket. ([@addaleax](https://github.com/addaleax))
359  * [npm/npm-registry-client#131](https://github.com/npm/npm-registry-client/pull/131) Adds support for streaming request bodies. ([@aredridel](https://github.com/aredridel))
360  * Fixes [#13656](https://github.com/npm/npm/issues/13656).
361  * Dependency updates.
362  * Documentation improvements.
363  ([@othiym23](https://github.com/othiym23))
364* [`2b88d62`](https://github.com/npm/npm/commit/2b88d62e6a730716b27052c0911c094d01830a60)
365  [npm/npmlog#34](https://github.com/npm/npmlog/pull/34)
366  `npmlog@4.0.0`:
367  Allows creating log levels that are empty strings or 0
368  ([@rwaldron](https://github.com/rwaldron))
369* [`242babb`](https://github.com/npm/npm/commit/242babbd02274ee2d212ae143992c20f47ef0066)
370  `once@1.4.0`
371  ([@zkochan](https://github.com/zkochan))
372* [`6d8ba2b`](https://github.com/npm/npm/commit/6d8ba2b4918e2295211130af68ee8a67099139e0)
373  `readable-stream@2.1.5`
374  ([@calvinmetcalf](https://github.com/calvinmetcalf))
375* [`855c099`](https://github.com/npm/npm/commit/855c099482a8d93b7f0646bd7bcf8a31f81868e0)
376  `retry@0.10.0`
377  ([@tim-kos](https://github.com/tim-kos))
378* [`80540c5`](https://github.com/npm/npm/commit/80540c52b252615ae8a6271b3df870eabfea935e)
379  `semver@5.3.0`:
380  * Add `minSatisfying`
381  * Add `prerelease(v)`
382  ([@isaacs](https://github.com/isaacs))
383* [`8aaac52`](https://github.com/npm/npm/commit/8aaac52ffae8e689fae265712913b1e2a36b1aa6)
384  `which@1.2.1`
385  ([@isaacs](https://github.com/isaacs))
386* [`85108a2`](https://github.com/npm/npm/commit/85108a29108ab0a57997572dc14f87eb706890ba)
387  `write-file-atomic@1.2.0`:
388  Preserve chmod and chown from the overwritten file
389  ([@iarna](https://github.com/iarna))
390* [`291a377`](https://github.com/npm/npm/commit/291a377f32f5073102a8ede61a27e6a9b37154c2)
391  Update npm documentation to reflect documentation for `semver@5.3.0`.
392  ([@zkat](https://github.com/zkat))
393
394### v3.10.7 (2016-08-11)
395
396Hi all, today's our first release coming out of the new monthly release
397cadence. See below for details. We're all recovered from conferences now
398and raring to go! We've got some pretty keen bug fixes and a bunch of
399documentation and dependency updates. It's hard to narrow it down to just a
400few, but of note are scoped packages in bundled dependencies, the
401`preinstall` lifecycle fix, the shrinkwrap and Git dependencies fix and the
402fix to a crasher involving cycles in development dependencies.
403
404#### NEW RELEASE CADENCE
405
406Releasing npm has been, for the most part, a very prominent part of our
407weekly process process. As part of our efforts to find the most effective
408ways to allocate our team's resources, we decided last month that we would
409try and slow our releases down to a monthly cadence, and see if we found
410ourselves with as much extra time and attention as we expected to have.
411Process experiments are useful for finding more effective ways to do our
412work, and we're at least going to keep doing this for a whole quarter, and
413then measure how well it worked out. It's entirely likely that we'll switch
414back to a more frequent cadence, specially if we find that the value that
415weekly cadence was providing the community is not worth sacrificing for a
416bit of extra time. Does this affect you significantly? Let us know!
417
418#### SCOPED PACKAGES IN BUNDLED DEPENDENCIES
419
420Prior to this release and
421[v2.15.10](https://github.com/npm/npm/releases/v2.15.10), npm had ignored
422scoped modules found in `bundleDependencies`.
423
424* [`29cf56d`](https://github.com/npm/npm/commit/29cf56dbae8e3dd16c24876f998051623842116a)
425  [#8614](https://github.com/npm/npm/issues/8614)
426  Include scoped packages in bundled dependencies.
427  ([@forivall](https://github.com/forivall))
428
429#### `preinstall` LIFECYCLE IN CURRENT PROJECT
430
431* [`b7f13bc`](https://github.com/npm/npm/commit/b7f13bc80b89b025be0c53d81b90ec8f2cebfab7)
432  [#13259](https://github.com/npm/npm/pull/13259)
433  Run top level preinstall before installing dependencies
434  ([@palmerj3](https://github.com/palmerj3))
435
436#### BETTER SHRINKWRAP WITH GIT DEPENDENCIES
437
438* [`0f7e319`](https://github.com/npm/npm/commit/0f7e3197bcec7a328b603efdffd3681bbc40f585)
439  [#12718](https://github.com/npm/npm/issues/12718.)
440  Update outdated git dependencies found in shrinkwraps. Previously, if the
441  module version was the same then no update would be completed even if the
442  committish had changed.
443  ([@kossnocorp](https://github.com/kossnocorp))
444
445
446#### CYCLES IN DEVELOPMENT DEPENDENCIES NO LONGER CRASH
447
448* [`1691de6`](https://github.com/npm/npm/commit/1691de668d34cd92ab3de08bf3a06085388f2f07)
449  [#13327](https://github.com/npm/npm/issues/13327)
450  Fix bug where cycles found in development dependencies could result in
451  infinite recursion that resulted in crashes.
452  ([@iarna](https://github.com/iarna))
453
454#### IMPROVE "NOT UPDATING LINKED MODULE" WARNINGS
455
456* [`1619871`](https://github.com/npm/npm/commit/1619871ac0cc8839dc9962c78e736095976c1eb4)
457  [#12893](https://github.com/npm/npm/pull/12893)
458  Only warn about symlink update if version number differs
459  The update-linked action outputs a warning that it needs to update the
460  linked package, but can't, There is no need for the package to be updated if
461  it is already at the correct version.  This change does a check before
462  logging the warning.
463  ([@DaveEmmerson](https://github.com/DaveEmmerson))
464
465#### MORE BUG FIXES
466
467* [`8f8d1b3`](https://github.com/npm/npm/commit/8f8d1b33a78c79aff9de73df362abaa7f05751d2)
468  [#11398](https://github.com/npm/npm/issues/11398)
469  Fix bug where `package.json` files that contained a `type` property could
470  cause crashes. `type` is not a `package.json` property that npm makes use
471  of and having it should be (and now is) harmless.
472  ([@zkat](https://github.com/zkat))
473* [`e7fa6c6`](https://github.com/npm/npm/commit/e7fa6c6a2c1de2a214479daa8c6901eebb350381)
474  [#13353](https://github.com/npm/npm/issues/13353)
475  Add GIT_EXEC_PATH to Git environment whitelist.
476  ([@mhart](https://github.com/mhart))
477* [`c23af21`](https://github.com/npm/npm/commit/c23af21d4cedd7fedcb4168672044db76ad054a8)
478  [#13626](https://github.com/npm/npm/pull/13626)
479  Use HTTPS issues URL in the error message for type validation errors.
480  ([@watilde](https://github.com/watilde))
481
482#### INCLUDE `npm login` IN COMMAND SUMMARY
483
484* [`ab0c4b1`](https://github.com/npm/npm/commit/ab0c4b137b05762e75e0913038b606f087b58aa0)
485  [#13581](https://github.com/npm/npm/issues/13581)
486  The `login` command has long been an alias for `adduser`.
487  At the same time, there is an expectation not just of that
488  particular word being something to look for, but of there being
489  clear symmetry with `logout`.
490  So it was a bit confusing when `login` didn't show up in
491  `npm help` on a technicality. This seems like an acceptable
492  exception to the rule that says "no aliases in `npm help`".
493  ([@zkat](https://github.com/zkat))
494
495#### DOCUMENTATION
496
497* [`e2d7e78`](https://github.com/npm/npm/commit/e2d7e7820a7875ed96e0382dc1e91b8df4e83746)
498  [#13319](https://github.com/npm/npm/pull/13319)
499  As Node.js 0.8 is no longer supported, remove mention of it from the README.
500  ([@watilde](https://github.com/watilde))
501* [`c565d89`](https://github.com/npm/npm/commit/c565d893a38efb6006e841450503329c9e58f100)
502  [#13349](https://github.com/npm/npm/pull/13349)
503  Updated the scripts documentation to explain the different between `version` and `preversion`.
504  ([@christophehurpeau](https://github.com/christophehurpeau))
505* [`fa8f87f`](https://github.com/npm/npm/commit/fa8f87f1ec92e543dd975156c4b184eb3e0b80cb)
506  [#10167](https://github.com/npm/npm/pull/10167)
507  Clarify in scope documentation that npm@2 is required for scoped packages.
508  ([@danpaz](https://github.com/danpaz))
509
510#### DEPENDENCIES
511
512* [`124427e`](https://github.com/npm/npm/commit/124427eabbfd200aa145114e389e19692559ff1e)
513  [#8614](https://github.com/npm/npm/issues/8614)
514  `fstream-npm@1.1.1`:
515  Fixes bug with inclusion of scoped bundled dependencies.
516  ([@forivall](https://github.com/forivall))
517* [`7e0cdff`](https://github.com/npm/npm/commit/7e0cdff04714709f6dc056b19422d3f937502f1c)
518  [#13497](https://github.com/npm/npm/pull/13497)
519  `graceful-fs@4.1.5`:
520  `graceful-fs` had a [bug fix](https://github.com/isaacs/node-graceful-fs/pull/71) which
521  fixes a problem ([nodejs/node#7846](https://github.com/nodejs/node/pull/7846)) exposed
522  by recent changes to Node.js.
523  ([@thefourtheye](https://github.com/thefourtheye))
524* [`9b88cb8`](https://github.com/npm/npm/commit/9b88cb89f138443f324094685f4de073f33ecef0)
525  [#9984](https://github.com/npm/npm/issues/9984)
526  `request@2.74.0`:
527  Update request library to at least 2.73 to fix a bug where `npm install` would crash with
528  _Cannot read property 'emit' of null._
529
530  Update `request` dependency `tough-cookie` to `2.3.0` to
531  to address [https://nodesecurity.io/advisories/130](https://nodesecurity.io/advisories/130).
532  Versions 0.9.7 through 2.2.2 contain a vulnerable regular expression that,
533  under certain conditions involving long strings of semicolons in the
534  "Set-Cookie" header, causes the event loop to block for excessive amounts of
535  time.
536  ([@zarenner](https://github.com/zarenner))
537  ([@stash-sfdc](https://github.com/stash-sfdc))
538* [`bf78ce5`](https://github.com/npm/npm/commit/bf78ce5ef5d2d6e95177193cca5362dd27bff968)
539  [#13387](https://github.com/npm/npm/issues/13387)
540  `minimatch@3.0.3`:
541  Handle extremely long and terrible patterns more gracefully.
542  There were some magic numbers that assumed that every extglob pattern starts
543  and ends with a specific number of characters in the regular expression.
544  Since !(||) patterns are a little bit more complicated, this led to creating
545  an invalid regular expression and throwing.
546  ([@isaacs](https://github.com/isaacs))
547* [`803e538`](https://github.com/npm/npm/commit/803e538efaae4b56a764029742adcf6761e8398b)
548  [isaacs/rimraf#111](https://github.com/isaacs/rimraf/issues/111)
549  `rimraf@2.5.4`: Clarify assertions: cb is required, options are not.
550  ([@isaacs](https://github.com/isaacs))
551* [`a9f84ef`](https://github.com/npm/npm/commit/a9f84ef61b4c719b646bf9cda00577ef16e3a113)
552  `lodash.without@4.2.0`
553  ([@jdalton](https://github.com/jdalton))
554* [`f59ff1c`](https://github.com/npm/npm/commit/f59ff1c2701f1bfd21bfdb97b4571823b614f694)
555  `lodash.uniq@4.4.0`
556  ([@jdalton](https://github.com/jdalton))
557* [`8cc027e`](https://github.com/npm/npm/commit/8cc027e5e81623260a49b31fe406ce483258b203)
558  `lodash.union@4.5.0`
559  ([@jdalton](https://github.com/jdalton))
560* [`0a6c1e4`](https://github.com/npm/npm/commit/0a6c1e4302a153fb055f495043ed33afd8324193)
561  `lodash.without@4.3.0`
562  ([@jdalton](https://github.com/jdalton))
563* [`4ab0181`](https://github.com/npm/npm/commit/4ab0181fca2eda18888b865ef691b83d30fb0c33)
564  `lodash.clonedeep@4.4.1`
565  ([@jdalton](https://github.com/jdalton))
566
567### v3.10.6 (2016-07-07)
568
569This week we have a bunch of bug fixes for ya!  A shrinkwrap regression
570introduced in 3.10.0, better lifecycle `PATH` behavior, improvements when
571working with registries other than `registry.npmjs.org` and a fix for
572hopefully the last _don't print a progress bar over my interactive thingy_
573bug.
574
575#### SHRINKWRAP AND DEV DEPENDENCIES
576
577The rewrite in 3.10.0 triggered a bug where dependencies of devDependencies
578would be included in your shrinkwrap even if you didn't request
579devDependencies.
580
581* [`2484529`](https://github.com/npm/npm/commit/2484529ab56a42e5d6f13c48006f39a596d9e327)
582  [#13308](https://github.com/npm/npm/pull/13308)
583  Fix bug where deps of devDependencies would be incorrectly included in
584  shrinkwraps.
585  ([@iarna](https://github.com/iarna))
586
587#### BETTER PATH LIFECYCLE BEHAVIOR
588
589We've been around the details on this one a few times in recent months and
590hopefully this will bring is to where we want to be.
591
592* [`81051a9`](https://github.com/npm/npm/commit/81051a90eee66a843f76eb8cccedbb1d0a5c1f47)
593  [#12968](https://github.com/npm/npm/pull/12968)
594  When running lifecycle scripts, only prepend directory containing the node
595  binary to PATH if not already in PATH.
596  ([@segrey](https://github.com/segrey))
597
598#### BETTER INTERACTIONS WITH THIRD PARTY REGISTRIES
599
600* [`071193c`](https://github.com/npm/npm/commit/071193c8e193767dd1656cb27556cb3751d77a3b)
601  [#10869](https://github.com/npm/npm/pull/10869)
602  If the registry returns a list of versions some of which are invalid, skip
603  those when picking a version to install.  This can't happen with
604  registry.npmjs.org as it will normalize versions published with it, but it
605  can happen with other registries.
606  ([@gregersrygg](https://github.com/gregersrygg))
607
608#### ONE LAST TOO-MUCH-PROGRESS CORNER
609
610* [`1244cc1`](https://github.com/npm/npm/commit/1244cc16dc5a0536acf26816a1deeb8e221d67eb)
611  [#13305](https://github.com/npm/npm/pull/13305)
612  Disable progress bar in `npm edit` and `npm config edit`.
613  ([@watilde](https://github.com/watilde))
614
615#### HTML DOCS IMPROVEMENTS
616
617* [`58da923`](https://github.com/npm/npm/commit/58da9234ae72a5474b997f890a1155ee9785e6f1)
618  [#13225](https://github.com/npm/npm/issues/13225)
619  Fix HTML character set declaration in generated HTML documentation.
620  ([@KenanY](https://github.com/KenanY))
621* [`d1f0bf4`](https://github.com/npm/npm/commit/d1f0bf4303566f8690502034f82bbb449850958d)
622  [#13250](https://github.com/npm/npm/pull/13250)
623  Optimize png images using zopflipng.
624  ([@PeterDaveHello](https://github.com/PeterDaveHello))
625
626#### DEPENDENCY UPDATES (THAT MATTER)
627
628* [`c7567e5`](https://github.com/npm/npm/commit/c7567e58618b63f97884afa104d2f560c9272dd5)
629  [npm/npm-user-validate#9](https://github.com/npm/npm-user-validate/pull/9)
630  `npm-user-validate@0.1.5`:
631  Lower the username length limits to 214 from 576 to match `registry.npmjs.org`'s limits.
632  ([@aredridel](https://github.com/aredridel))
633* [`22802c9`](https://github.com/npm/npm/commit/22802c9db3cf990c905e8f61304db9b5571d7964)
634  [#isaacs/rimraf](https://github.com/npm/npm/issues/isaacs/rimraf)
635  `rimraf@2.5.3`:
636  Fixes EPERM errors when running `lstat` on read-only directories.
637  ([@isaacs](https://github.com/isaacs))
638* [`ce6406f`](https://github.com/npm/npm/commit/ce6406f4b6c4dffbb5cd8a3c049f6663a5665522)
639  `glob@7.0.5`:
640  Forces the use of `minimatch` to 3.0.2, which improved handling of long and
641  complicated patterns.
642  ([@isaacs](https://github.com/isaacs))
643
644
645### v3.10.5 (2016-07-05)
646
647This is a fix to this week's testing release to correct the update of
648`node-gyp` which somehow got mangled.
649
650* [`ca97ce2`](https://github.com/npm/npm/commit/ca97ce2e8d8ba44c445b39ffa40daf397d5601b3)
651  [#13256](https://github.com/npm/npm/issues/13256)
652  Fresh reinstall of `node-gyp@3.4.0`.
653  ([@zkat](https://github.com/zkat))
654
655### v3.10.4 (2016-06-30)
656
657Hey y'all! This release includes a bunch of fixes we've been working on as we
658continue on our `big-bug` push. There's still [a lot of it left to
659do](https://github.com/npm/npm/labels/big-bug), but once this is done, things
660should just generally be more stable, installs should be more reliable and
661correct, and we'll be able to move on to more future work. We'll keep doing our
662best! ��
663
664#### RACES AS WACKY AS [REDLINE](https://en.wikipedia.org/wiki/Redline_\(2009_film\))
665
666Races are notoriously hard to squash, and tend to be some of the more common
667recurring bugs we see on the CLI. [@julianduque](https://github.com/julianduque)
668did some pretty awesome [sleuthing
669work](https://github.com/npm/npm/issues/12669) to track down a cache race and
670helpfully submitted a patch. There were some related races in the same area that
671also got fixed at around the same time, mostly affecting Windows users.
672
673* [`2a37c97`](https://github.com/npm/npm/commit/2a37c97121483db2b6f817fe85c2a5a77b76080e)
674  [#12669](https://github.com/npm/npm/issues/12669)
675  [#13023](https://github.com/npm/npm/pull/13023)
676  The CLI is pretty aggressive about correcting permissions across the cache
677  whenever it writes to it. This aggressiveness caused a couple of races where
678  temporary cache files would get picked up by `fs.readdir`, and removed before
679  `chownr` was called on them, causing `ENOENT` errors. While the solution might
680  seem a bit hamfisted, it's actually perfectly safe and appropriate in this
681  case to just ignore those resulting `ENOENT` errors.
682  ([@julianduque](https://github.com/julianduque))
683* [`ea018b9`](https://github.com/npm/npm/commit/ea018b9e3856d1798d199ae3ebce4ed07eea511b)
684  [#13023](https://github.com/npm/npm/pull/13023)
685  If a user were to have SUDO_UID and SUDO_GID, they'd be able to get into a
686  pretty weird state. This fixes that corner case.
687  ([@zkat](https://github.com/zkat))
688* [`703ca3a`](https://github.com/npm/npm/commit/703ca3abbf4f1cb4dff08be32acd2142d5493482)
689  [#13023](https://github.com/npm/npm/pull/13023)
690  A missing `return` was causing `chownr` to be called on Windows, even though
691  that's literally pointless, and causing crashes in the process, instead of
692  short-circuiting. This was entirely dependent on which callback happened to be
693  called first, and in some cases, the failing one would win the race. This
694  should prevent this from happening in the future.
695  ([@zkat](https://github.com/zkat))
696* [`69267f4`](https://github.com/npm/npm/commit/69267f4fbd1467ce576f173909ced361f8fe2a9d)
697  [#13023](https://github.com/npm/npm/pull/13023)
698  Added tests to verify `correct-mkdir` race patch.
699  ([@zkat](https://github.com/zkat))
700* [`e5f50ea`](https://github.com/npm/npm/commit/e5f50ea9f84fe8cac6978d18f7efdf43834928e7)
701  [#13023](https://github.com/npm/npm/pull/13023)
702  Added tests to verify `addLocal` race patch.
703  ([@zkat](https://github.com/zkat))
704
705#### SHRINKWRAP IS COMPLICATED BUT IT'S BETTER NOW
706
707[@iarna](https://github.com/iarna) did some heroic hacking to refactor a bunch
708of `shrinkwrap`-related bits and fixed some resolution and pathing issues that
709were biting users. The code around that stuff got more readable/maintainable in
710the process, too!
711
712* [`346bba1`](https://github.com/npm/npm/commit/346bba1e1fee9cc814b07c56f598a73be5c21686)
713  [#13214](https://github.com/npm/npm/pull/13214)
714  Resolve local dependencies in `npm-shrinkwrap.json` relative to the top of the
715  tree.
716  ([@iarna](https://github.com/iarna))
717* [`4a67fdb`](https://github.com/npm/npm/commit/4a67fdbd0f160deb6644a9c4c5b587357db04d2d)
718  [#13213](https://github.com/npm/npm/pull/13213)
719  If you run `npm install modulename` it should, if a `npm-shrinkwrap.json` is
720  present, use the version found there.  If not, it'll use the version found in
721  your `package.json`, and failing *that*, use `latest`.
722  This fixes a case where the first check was being bypassed because version
723  resolution was being done prior to loading the shrinkwrap, and so checks to
724  match the shrinkwrap version couldn't succeed.
725  ([@iarna](https://github.com/iarna))
726* [`afa2133`](https://github.com/npm/npm/commit/afa2133a5d8ac4f6f44cdc6083d89ad7f946f5bb)
727  [#13214](https://github.com/npm/npm/pull/13214)
728  Refactor shrinkwrap specifier lookup into shared function.
729  ([@iarna](https://github.com/iarna))
730* [`2820b56`](https://github.com/npm/npm/commit/2820b56a43e1cc1e12079a4c886f6c14fe8c4f10)
731  [#13214](https://github.com/npm/npm/pull/13214)
732  Refactor operations in `inflate-shrinkwrap.js` into separate functions for
733  added clarity.
734  ([@iarna](https://github.com/iarna))
735* [`ee5bfb3`](https://github.com/npm/npm/commit/ee5bfb3e56ee7ae582bec9f741f32b224c279947)
736  Fix Windows path issue in a shrinkwrap test.
737  ([@zkat](https://github.com/zkat))
738
739#### OTHER BUGFIXES
740
741* [`a11a7b2`](https://github.com/npm/npm/commit/a11a7b2e7df9478ac9101b06eead4a74c41a648d)
742  [#13212](https://github.com/npm/npm/pull/13212)
743  Resolve local paths passed in through the command line relative to current
744  directory, instead of relative to the `package.json`.
745  ([@iarna](https://github.com/iarna))
746
747#### DEPENDENCY UPDATES
748
749* [`900a5b7`](https://github.com/npm/npm/commit/900a5b7f18b277786397faac05853c030263feb8)
750  [#13199](https://github.com/npm/npm/pull/13199)
751  [`node-gyp@3.4.0`](https://github.com/nodejs/node-gyp/blob/master/CHANGELOG.md):
752  AIX, Visual Studio 2015, and logging improvements. Oh my~!
753  ([@rvagg](https://github.com/rvagg))
754
755#### DOCUMENTATION FIXES
756
757* [`c6942a7`](https://github.com/npm/npm/commit/c6942a7d6acb2b8c73206353bbec03380a056af4)
758  [#13134](https://github.com/npm/npm/pull/13134)
759  Fixed a few typos in `CHANGELOG.md`.
760  ([@watilde](https://github.com/watilde))
761* [`e63d913`](https://github.com/npm/npm/commit/e63d913127731ece56dcd69c7c0182af21be58f8)
762  [#13156](https://github.com/npm/npm/pull/13156)
763  Fix old reference to `doc/install` in a source comment.
764  ([@sheerun](https://github.com/sheerun))
765* [`099d23c`](https://github.com/npm/npm/commit/099d23cc8f38b524dc19a25857b2ebeca13c49d6)
766  [#13113](https://github.com/npm/npm/issues/13113)
767  [#13189](https://github.com/npm/npm/pull/13189)
768  Fixes a link to `npm-tag(3)` that was breaking to instead point to
769  `npm-dist-tag(1)`, as reported by [@SimenB](https://github.com/SimenB)
770  ([@macdonst](https://github.com/macdonst))
771
772### v3.10.3 (2016-06-23)
773
774Given that we had not one, but two updates to our RC this past week, it
775should come as no surprise that this week's full release is a bit
776lighter. We have some documentation patches and a couple of bug fixes via
777dependency updates.
778
779If you haven't yet checked out last week's release,
780[v3.10.0](https://github.com/npm/npm/releases/tag/v3.10.0)
781and the two follow up releases
782[v3.10.1](https://github.com/npm/npm/releases/tag/v3.10.1)
783and
784[v3.10.2](https://github.com/npm/npm/releases/tag/v3.10.2),
785you really should do so. They're the most important releases we've had in
786quite a while, fixing a bunch of critical bugs (including an issue
787impacting publishing with Node.js 6.x) and of course, bringing in the new
788and improved progress bar.
789
790#### BUM SYMLINKS BURN NO MORE
791
792There's been a bug lurking where broken symlinks in your `node_modules`
793folder could cause all manner of mischief, from crashes to empty `npm ls`
794results. The intrepid [@watilde](https://github.com/watilde) tracked this
795down for us.
796
797This addresses the root cause of the outdated crasher we protected
798against earlier this week in
799[#13115](https://github.com/npm/npm/issues/13115).
800
801This also fixes [#9564](https://github.com/npm/npm/issues/9564), the
802problem where a bad symlink in your global modules would result in an
803empty result when you ran `npm ls -g`.
804
805This ALSO likely fixes numerous "Missing argument #1" errors. (But surely
806not all of them as that's actually just a generic arity and
807type-validation failure.)
808
809* [`ca92ac4`](https://github.com/npm/npm/commit/ca92ac455b841a708dd89262ff88d503b125d717)
810  [npm/read-package-tree#6](https://github.com/npm/read-package-tree/pull/6)
811  `read-package-tree@5.1.5`:
812  Make bad symlinks be non-fatal errors when reading the tree off disk.
813  ([@watilde](https://github.com/watilde))
814
815#### BETTER UNICODE DETECTION
816
817* [`6c3f7f0`](https://github.com/npm/npm/commit/6c3f7f043f09fc2aa19ffd3f956787635fa6f4d0)
818  `has-unicode@2.0.1`:
819  Fix unicode detection on a number of Linux distributions.
820  ([@Darkhogg](https://github.com/Darkhogg)) ([@gagern](https://github.com/gagern))
821
822
823#### DOCUMENTATION FIXES
824
825* [`b9243ee`](https://github.com/npm/npm/commit/b9243ee60a3d60505c2502dc8633811b42c8aaea)
826  [#13127](https://github.com/npm/npm/pull/13127)
827  Remove extra backtick from `npm ls` documentation.
828  ([@shvaikalesh](https://github.com/shvaikalesh))
829* [`e05c0c2`](https://github.com/npm/npm/commit/e05c0c243cc702f9c392c001f668a90b57eaeb0e)
830  [iarna/has-unicode#3](https://github.com/iarna/has-unicode/pull/3)
831  [iarna/has-unicode#4](https://github.com/iarna/has-unicode/pull/4)
832  [#13084](https://github.com/npm/npm/pull/13084)
833  Correct changelog entry for shrinkwrap lifecycle order.
834  ([@SimenB](https://github.com/SimenB))
835* [`823994f`](https://github.com/npm/npm/commit/823994f100a0e59e1dd109e312811f971968ec75)
836  [#13080](https://github.com/npm/npm/pull/13080)
837  Describe using `npm pack` to see a dry run of publication results in
838  the `npm publish` documentation.
839  ([@laughinghan](https://github.com/laughinghan))
840
841#### DEPENDENCY UPDATES
842
843* [`e44d2db`](https://github.com/npm/npm/commit/e44d2db1ad0d860ca08e99c81135bd399fb733b1)
844  `aproba@1.0.4`: Documentation updates and minor refactoring.
845  ([@iarna](https://github.com/iarna))
846
847### v3.10.2 (2016-06-17):
848
849This is a quick hotfix release with two small bug fixes.  First, there was
850an issue where the new progress bar would overwrite interactive prompts,
851that is, those found in `npm login` and `npm init`.  Second, if the
852directory you were running `npm outdated` on was a bad link or otherwise had
853unrecoverable errors then npm would crash instead of printing the error.
854
855* [`fbefb86`](https://github.com/npm/npm/commit/fbefb8675b26320b295f481b4872ce99f0180807)
856  [`7779e9f`](https://github.com/npm/npm/commit/7779e9fb9430f6547532c67f2471864d62bbd5bc)
857  [#13105](https://github.com/npm/npm/issues/13105)
858  Disable progress bar in `adduser` and `init`.
859* [`6a33b2c`](https://github.com/npm/npm/commit/6a33b2c13f637a41e25cd0339925bc430b50358a)
860  [#13115](https://github.com/npm/npm/issues/13115)
861  Ensure that errors reading the package tree for `outdated` does not result
862  in crashes.
863  ([@iarna](https://github.com/iarna))
864
865### v3.10.1 (2016-06-17):
866
867There are two very important bug fixes and one long-awaited (and significant!)
868deprecation in this hotfix release. [Hold on.](http://butt.holdings/)
869
870#### *WHOA*
871
872When Node.js 6.0.0 was released, the CLI team noticed an alarming upsurge in
873bugs related to important files (like `README.md`) not being included in
874published packages. The new bugs looked much like
875[#5082](https://github.com/npm/npm/issues/5082), which had been around in one
876form or another since April, 2014. #5082 used to be a very rare (and obnoxious)
877bug that the CLI team hadn't had much luck reproducing, and we'd basically
878marked it down as a race condition that arose on machines using slow and / or
879rotating-media-based hard drives.
880
881Under 6.0.0, the behavior was reliable enough to be nearly deterministic, and
882made it very difficult for publishers using `.npmignore` files in combination
883with `"files"` stanzas in `package.json` to get their packages onto the
884registry without one or more files missing from the packed tarball. The entire
885saga is contained within [the issue](https://github.com/npm/npm/issues/5082),
886but the summary is that an improvement to the performance of
887[`fs.realpath()`](https://nodejs.org/api/fs.html#fs_fs_realpath_path_options_callback)
888made it much more likely that the packing code would lose the race.
889
890Fixing this has proven to be very difficult, in part because the code used by
891npm to produce package tarballs is more complicated than, strictly speaking, it
892needs to be. [**@evanlucas**](https://github.com/evanlucas) contributed [a
893patch](https://github.com/npm/fstream/pull/50) that passed the tests in a
894[special test suite](https://github.com/othiym23/eliminate-5082) that I
895([**@othiym23**](https://github.com/othiym23)) created (with help from
896[**@addaleax**](https://github.com/addaleax)), but only _after_ we'd released
897the fixed version of that package did we learn that it actually made the
898problem _worse_ in other situations in npm proper. Eventually,
899[**@rvagg**](https://github.com/rvagg) put together a more durable fix that
900appears to completely address the errant behavior under Node.js 6.0.0. That's
901the patch included in this release. Everybody should chip in for redback
902insurance for Rod and his family; he's done the community a huge favor.
903
904Does this mean the long (2+ year) saga of #5082 is now over? At this point, I'm
905going to quote from my latest summary on the issue:
906
907> The CLI team (mostly me, with input from the rest of the team) has decided that
908> the overall complexity of the interaction between `fstream`, `fstream-ignore`,
909> `fstream-npm`, and `node-tar` has grown more convoluted than the team is
910> comfortable (maybe even capable of) supporting.
911>
912> - While I believe that @rvagg's (very targeted) fix addresses _this_ issue, I
913>   would be shocked if there aren't other race conditions in npm's packing
914>   logic. I've already identified a couple other places in the code that are
915>   most likely race conditions, even if they're harder to trigger than the
916>   current one.
917> - The way that dependency bundling is integrated leads to a situation in
918>   which a bunch of logic is duplicated between `fstream-npm` and
919>   `lib/utils/tar.js` in npm itself, and the way `fstream`'s extension
920>   mechanism works makes this difficult to clean up. This caused a nasty
921>   regression ([#13088](https://github.com/npm/fstream/pull/50), see below) as
922>   of ~`npm@3.8.7` where the dependencies of `bundledDependencies` were no
923>   longer being included in the built package tarballs.
924> - The interaction between `.npmignore`, `.gitignore`, and `files` is hopelessly
925>   complicated, scattered in many places throughout the code. We've been
926>   discussing [making the ignores and includes logic clearer and more
927>   predictable](https://github.com/npm/npm/wiki/Files-and-Ignores), and the
928>   current code fights our efforts to clean that up.
929>
930> So, our intention is still to replace `fstream`, `fstream-ignore`, and
931> `fstream-npm` with something much simpler and purpose-built. There's no real
932> reason to have a stream abstraction here when a simple recursive-descent
933> filesystem visitor and a synchronous function that can answer whether a given
934> path should be included in the packed tarball would do the job adequately.
935>
936> What's not yet clear is whether we'll need to replace `node-tar` in the
937> process. `node-tar` is a very robust implementation of tar (it handles, like,
938> everything), and it also includes some very important tweaks to prevent several
939> classes of security exploits involving maliciously crafted packages. However,
940> its packing API involves passing in an `fstream` instance, so we'd either need
941> to produce something that follows enough of `fstream`'s contract for `node-tar`
942> to keep working, or swap `node-tar` out for something like `tar-stream` (and
943> then ensuring that our use of `tar-stream` is secure, which could involve
944> security patches for either npm or `tar-stream`).
945
946The testing and review of `fstream@1.0.10` that the team has done leads us to
947believe that this bug is fixed, but I'm feeling more than a little paranoid
948about fstream now, so it's important that people keep a close eye on their
949publishes for a while and let us know immediately if they notice any
950irregularities.
951
952* [`8802f6c`](https://github.com/npm/npm/commit/8802f6c152ea35cb9e5269c077c3a2f9df411afc)
953  [#5082](https://github.com/npm/npm/issues/5082) `fstream@1.0.10`: Ensure that
954  entries are collected after a paused stream resumes.
955  ([@rvagg](https://github.com/rvagg))
956* [`c189723`](https://github.com/npm/npm/commit/c189723110497a17dac3b0596f2916deeed93ee7)
957  [#5082](https://github.com/npm/npm/issues/5082) Remove the warning introduced
958  in `npm@3.10.0`, because it should no longer be necessary.
959  ([@othiym23](https://github.com/othiym23))
960
961#### *ERK*
962
963Because the interaction between `fstream`, `fstream-ignore`, `fsream-npm`, and
964`node-tar` is so complex, it's proven difficult to add support for npm features
965like `bundledDependencies` without duplicating some logic within npm's code
966base. While [fixing a completely unrelated
967bug](https://github.com/npm/npm/issues/9642), we "cleaned up" some of this
968seemingly duplicated code, and in the process removed the code that ensured
969that the dependencies of `bundledDependencies` are themselves bundled. We've
970brought that code back into the code base (without reopening #9642), and added
971a test to ensure that this regression can't recur.
972
973* [`1b6ceca`](https://github.com/npm/npm/commit/1b6ceca32fc81ca7cc7ac2eb7d11f687e6f87f26)
974  [#13088](https://github.com/npm/npm/issues/13088) Partially restore npm's own
975  version of the `fstream-npm` function `applyIgnores` to ensure that the
976  dependencies of `bundledDependencies` are included in published packages.
977  ([@iarna](https://github.com/iarna))
978
979#### GOODBYE, FAITHFUL FRIEND
980
981At NodeConf Adventure 2016 (RIP in peace, Mikeal Rogers's NodeConf!), the CLI
982team had an opportunity to talk to representatives from some of the larger
983companies that we knew were still using Node.js 0.8 in production. After asking
984them whether they were still using 0.8, we got back blank stares and questions
985like, "0.8? You mean, from four years ago?" After establishing that being able
986to run npm in their legacy environments was no longer necessary, the CLI team
987made the decision to drop support for 0.8. (Faithful observers of our [team
988meetings](https://github.com/npm/npm/issues?utf8=%E2%9C%93&q=is%3Aissue+npm+cli+team+meeting+)
989will have known this was the plan for NodeConf since the beginning of 2016.)
990
991In practice, this means only what's in the commit below: we've removed 0.8 from
992our continuous integration test matrix below, and will no longer be habitually
993testing changes under Node 0.8.  We may also give ourselves permission to use
994`setImmediate()` in test code. However, since the project still supports
995Node.js 0.10 and 0.12, it's unlikely that patches that rely on ES 2015
996functionality will land anytime soon.
997
998Looking forward, the team's current plan is to drop support for Node.js 0.10
999when its LTS maintenance window expires in October, 2016, and 0.12 when its
1000maintenance / LTS window ends at the end of 2016. We will also drop support for
1001Node.js 5.x when Node.js 6 becomes LTS and Node.js 7 is released, also in the
1002October-December 2016 timeframe.
1003
1004(Confused about Node.js's LTS policy? [Don't
1005be!](https://github.com/nodejs/LTS) If you look at [this
1006diagram](https://github.com/nodejs/LTS/blob/ce364a94b0e0619eba570cd57be396573e1ef889/schedule.png),
1007it should make all of the preceding clear.)
1008
1009If, in practice, this doesn't work with distribution packagers or other
1010community stakeholders responsible for packaging and distributing Node.js and
1011npm, please reach out to us. Aligning the npm CLI's LTS policy with Node's
1012helps everybody minimize the amount of work they need to do, and since all of
1013our teams are small and very busy, this is somewhere between a necessity and
1014non-negotiable.
1015
1016* [`d6afd5f`](https://github.com/npm/npm/commit/d6afd5ffb1b19e5d94aeee666afcb8adaced58db)
1017  Remove 0.8 from the Node.js testing matrix, and reorder to match real-world
1018  priority, with comments. ([@othiym23](https://github.com/othiym23))
1019
1020### v3.10.0 (2016-06-16):
1021
1022Do we have a release for you!  We have our first new lifecycle since
1023`version`, a new progress bar and a bunch of bug fixes.
1024[I'm](https://github.com/iarna) really excited about this release, let me
1025tell you!!
1026
1027#### DANGER: PUBLISHING ON NODE 6.0.0
1028
1029Publishing and packing are buggy under Node versions greater than 6.0.0.
1030Please use Node.js LTS (4.4.x) to publish packages.  See
1031[#5082](https://github.com/npm/npm/issues/5082) for details and current
1032status.
1033
1034* [`4e52cef`](https://github.com/npm/npm/commit/4e52cef3d4170c8abab98149666ec599f8363233)
1035  [#13077](https://github.com/npm/npm/pull/13077)
1036  Warn when using Node 6+.
1037  ([@othiym23](https://github.com/othiym23))
1038
1039#### NEW LIFECYCLE SCRIPT: `shrinkwrap`
1040
1041* [`e8c80f2`](https://github.com/npm/npm/commit/e8c80f20bfd5d1618e85dbab41660d6f3e5ce405)
1042  [#10744](https://github.com/npm/npm/issues/10744)
1043  You can now add `preshrinkwrap`, `shrinkwrap` and `postshrinkwrap` to your `package.json`
1044  scripts section. They are run when you run `npm shrinkwrap` or `npm install --save` with
1045  an `npm-shrinkwrap.json` present in your module directory.
1046
1047  `preshrinkwrap` and `shrinkwrap` is run prior to generating the new `npm-shrinkwrap.json`
1048  and `postshrinkwrap` is run after.
1049  ([@SimenB](https://github.com/SimenB))
1050
1051#### NEW PROGRESS BAR
1052
1053![Install with new progress bar](http://shared.by.re-becca.org/misc-images/new-gauge-color.gif)
1054
1055We have a new progress bar and a bunch of related improvements!
1056
1057##### BLOCKING BLOCKING
1058
1059**!!WARNING!!** As a part of this change we now explicitly set
1060`process.stdout` and `process.stderr` to be _blocking_ if they are ttys,
1061using [set-blocking](https://www.npmjs.com/package/set-blocking). This is
1062necessary to ensure that we can fully erase the progress bar before we start
1063writing other things out to the console.
1064
1065Prior to Node.js 6.0.0, they were already blocking on Windows, and MacOS.
1066Meanwhile, on Linux they were always non-blocking but had large (64kb)
1067buffers, which largely made this a non-issue there.  Starting with Node.js
10686.0.0 they became non-blocking on MacOS and that caused some unexpected
1069issues (see [nodejs/node#6456](https://github.com/nodejs/node/issues/6456)).
1070
1071If you are a Linux user, it's plausible that this might have a performance
1072impact if your terminal can't keep up with output rate.  If you experience
1073this, we want to know! Please [file an
1074issue](https://github.com/npm/npm/issues/new) at our issue tracker.
1075
1076##### BETTER LAYOUT
1077
1078Let's start by talking about what goes into the new progress bar:
1079
1080```
1081⸨░░░░░░░░░░⠂⠂⠂⠂⠂⠂⠂⠂⸩ ⠹ loadExtraneous: verb afterAdd /Users/rebecca/.npm/null/0.0.0/package/package.json written
1082 ↑‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾  ↑ ‾‾‾‾‾‾‾‾‾↑‾‾‾‾   ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾↑‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
1083 percent complete     spinner    current thing we're doing     most recent log line
1084```
1085
1086The _spinner_ is intended as an activity indicator–it moves whenever
1087npm sends something to its logs.  It also spins at a constant speed while
1088waiting on the network.
1089
1090The _current thing we're doing_ relates to how we track how much work has
1091been done.  It's the name of the unit of work we most recently started or
1092completed some of.  Sometimes these names are more obvious than others and
1093that's something we'll look at improving over time.
1094
1095And finally, the _most recent log line_ is exactly that, it's the most
1096recent line that you would have seen if you were running with
1097`--loglevel=silly` or were watching the `npm-debug.log`.  These are written
1098to be useful to the npm developers above all else, so they may sometimes be
1099a little cryptic.
1100
1101* [`6789978`](https://github.com/npm/npm/commit/6789978ab0713f67928177a9109fed43953ccbda)
1102  [#13075](https://github.com/npm/npm/pull/13075)
1103  `npmlog@3.1.2`: Update to the latest npmlog, which includes the new and
1104  improved progress bar layout.
1105  ([@iarna](https://github.com/iarna))
1106
1107##### MORE PERFORMANT
1108
1109The underlying code for the progress bar was rewritten, in part with
1110performance in mind.  Previously whenever you updated the progress bar it
1111would check an internal variable for how long it had been since the last
1112update and if it had been long enough, it would print out what you gave it.
1113With the new progress bar we do updates at a fixed interval (with
1114`setInterval`) and "updating" the progress bar just updates some variables
1115that will be used when the next tick of the progress bar happens. Currently
1116progress bar updates happen every 50ms, although that's open to tuning.
1117
1118##### WIDE(R) COMPATIBILITY
1119
1120I spent a lot of time working our Unicode support.  There were a few issues
1121that plagued us:
1122
1123Previously one of the characters we used was _ambiguous width_ which means
1124that it was possible to configure your terminal to display it as _full
1125width_.  If you did this, the output would be broken because we assumed it
1126was a _half width_ character. We no longer use any of these characters.
1127
1128Previously, we defaulted to using Unicode on Windows.  This isn't a safe
1129assumption, however, as folks in non-US locales often use other code pages
1130for their terminals.  Windows doesn't provide* any facility available to
1131Node.js for determining the current code page, so we no longer try to use
1132Unicode on Windows.
1133
1134_\* The facilities it does provide are a command line tool and a windows
1135system call.  The former isn't satisfactory for speed reasons and the latter
1136can't be accessed from a JS-only Node.js program._
1137
1138##### FOR THE FUTURE: THEMES
1139
1140The new version of the progress bar library supports plugable themes. Adding
1141support to npm shouldn't be too difficult. The built in themes are:
1142
1143* `ASCII` – The fallback theme which is always available.
1144* `colorASCII` – Inverts the color of the completed portion of the progress
1145  bar.  The default on Windows and usually on Linux.  (Color support is
1146  determined by looking at the `TERM` environment variable.)
1147* `brailleSpinner` – A braille based spinner and other unicode enhancements. MacOS only.
1148* `colorBrailleSpinner` – The default on MacOS, a combination of the above two.
1149
1150##### LESS GARBLED OUTPUT
1151
1152As a part of landing this I've also taken the opportunity to more
1153systematically disable the progress bar prior to printing to `stdout` or
1154running external commands (in particular: git).  This should ensure that the
1155progress bar doesn't get left on screen after something else prints
1156something.  We also are now much more zealous about erasing the progress bar
1157on exit, so if you `Ctrl-C` out of an install we'll still cleanup the
1158progress bar.
1159
1160* [`63f153c`](https://github.com/npm/npm/commit/63f153c743f9354376bfb9dad42bd028a320fd1f)
1161  [#13075](https://github.com/npm/npm/pull/13075)
1162  Consistently make sure that the progress bar is hidden before we try to
1163  write to stdout.
1164  ([@iarna](https://github.com/iarna))
1165* [`8da79fa`](https://github.com/npm/npm/commit/8da79fa60de4972dca406887623d4e430d1609a1)
1166  [#13075](https://github.com/npm/npm/pull/13075)
1167  Be more methodical about disabling progress bars before running external
1168  commands.
1169  ([@iarna](https://github.com/iarna))
1170
1171#### REPLACE `process.nextTick` WITH `asap` ASAP
1172
1173* [`5873b56`](https://github.com/npm/npm/commit/5873b56cb315437dfe97e747811c0b9c297bfd38)
1174  [`254ad7e`](https://github.com/npm/npm/commit/254ad7e38f978b81046d242297fe8b122bfb5852)
1175  [#12754](https://github.com/npm/npm/issues/12754)
1176  Use `asap` in preference over `process.nextTick` to avoid recursion warnings.
1177  Under the hood `asap` uses `setImmediate` when available and falls back to
1178  `process.nextTick` when it's not.  Versions of node that don't support
1179  `setImmediate` have a version of `process.nextTick` that actually behaves
1180  like the current `setImmediate`.
1181  ([@lxe](https://github.com/lxe))
1182
1183#### FIXES AND REFACTORING
1184
1185Sometimes the installer would get it into its head that it could move or
1186remove things that it really shouldn't have.  While the reproducers for this were
1187often a bit complicated (the core reproducer involved five symlinks(!)), it turns
1188out this is an easy scenario to end up in if your project has a bunch of small
1189modules and you're linking them while developing them.
1190
1191Fixing this ended up involving doing an important and overdue rewrite of how
1192the installer keeps track of (and interrogates) the relationships between
1193modules.  This likely fixes other related bugs, and in the coming weeks
1194we'll verify and close them as we find them.  There are a whole slew of
1195commits related to this rewrite, and if you'd like to learn more check
1196out the PR where I describe what I did in detail: [#12775](https://github.com/npm/npm/pull/12775)
1197
1198* [`8f3e111`](https://github.com/npm/npm/commit/8f3e111fdd2ce7824864f77b04e5206bdaf961a1)
1199  [`c0b0ed1`](https://github.com/npm/npm/commit/c0b0ed1e9945c01b2e68bf22af3fe4005aa4bcd4)
1200  [#10800](https://github.com/npm/npm/issues/10800)
1201  Remove install pruning stage–this was obsoleted by making the installer keep
1202  itself up to date as it goes along. This is NOT related to `npm prune`.
1203  ([@iarna](https://github.com/iarna))
1204
1205#### MAKE OUTDATED MORE WIDELY LEGIBLE
1206
1207* [`21c60e9`](https://github.com/npm/npm/commit/21c60e9bb56d47da17b79681f2142b3dcf4c804b)
1208  [#12843](https://github.com/npm/npm/pull/12843)
1209  In `npm outdated, stop coloring the _Location_ and _Package Type_ columns.
1210  Previously they were colored dark gray, which was hard to read for some
1211  users.
1212  ([@tribou](https://github.com/tribou))
1213
1214#### DOCUMENTATION UPDATE
1215
1216* [`eb0a72e`](https://github.com/npm/npm/commit/eb0a72eb95862c1d0d41a259d138ab601d538793)
1217  [#12983](https://github.com/npm/npm/pull/12983)
1218  Describe how to run the lifecycle scripts of dependencies. How you do
1219  this changed with `npm` v2.
1220  ([@Tapppi](https://github.com/Tapppi))
1221
1222### DEPENDENCY UPDATES
1223
1224* [`da743dc`](https://github.com/npm/npm/commit/da743dc2153fed8baca3dada611b188f53ab5931)
1225  `which@1.2.10`:
1226  Fix bug where unnecessary special case path handling for Windows could
1227  produce unexpected results on Unix systems.
1228  ([@isaacs](https://github.com/isaacs))
1229* [`4533bd5`](https://github.com/npm/npm/commit/4533bd501d54aeedfec3884f4fd54e8c2edd6020)
1230  `npm-user-validate@0.1.4`:
1231  Validate the length of usernames.
1232  ([@aredridel](https://github.com/aredridel))
1233* [`4a18922`](https://github.com/npm/npm/commit/4a18922e56f9dc902fbb4daa8f5fafa4a1b89376)
1234  `glob@7.0.4`:
1235  Fixes issues with Node 6 and "long or excessively symlink-looping paths".
1236  ([@isaacs](https://github.com/isaacs))
1237* [`257fe11`](https://github.com/npm/npm/commit/257fe11052987e5cfec2abdf52392dd95a6c6ef3)
1238  `npm-package-arg@4.2.0`:
1239  Add `escapedName` to the result.  It is suitable for passing through to a
1240  registry without further processing.
1241  ([@nexdrew](https://github.com/nexdrew))
1242* [`dda3ca7`](https://github.com/npm/npm/commit/dda3ca70f74879106589ef29e167c8b91ef5aa4c)
1243  `wrappy@1.0.2`
1244  ([@zkat](https://github.com/zkat))
1245* [`25f1db5`](https://github.com/npm/npm/commit/25f1db504d0fd8c97211835f0027027fe95e0ef3)
1246  `readable-stream@2.1.4`
1247  ([@calvinmetcalf](https://github.com/calvinmetcalf))
1248* [`9d64fe6`](https://github.com/npm/npm/commit/9d64fe676ebc6949c687ffb85bd93eca3137fc0d)
1249  `abbrev@1.0.9`
1250  ([@isaacs](https://github.com/isaacs))
1251
1252### v3.9.6 (2016-06-02):
1253
1254#### SMALL OUTPUT TWEAK
1255
1256* [`0bdc9d1`](https://github.com/npm/npm/commit/0bdc9d13b73df07e63a58470ea001fda490e5869)
1257  [#12879](https://github.com/npm/npm/pull/12879)
1258  The usage output for npm commands was somehow under the impression that
1259  the singular form of `aliases` is `aliase`. This has been corrected to show
1260  `alias` instead.
1261  ([@intelliot](https://github.com/intelliot))
1262
1263#### DOC UPDATES
1264
1265* [`f771b49`](https://github.com/npm/npm/commit/f771b49f5d65bbef540c231fbfcca71cacdce4db)
1266  [#12933](https://github.com/npm/npm/pull/12933)
1267  Add `config.gypi` to list of files that are always ignored in the
1268  `package.json` manpage.
1269  ([@Jokero](https://github.com/Jokero))
1270
1271#### DEPENDENCY UPDATES
1272
1273* [`61c1d9c`](https://github.com/npm/npm/commit/61c1d9cd4b2296bd41d55a5c58e35ca5f028b9bc)
1274  [#12926](https://github.com/npm/npm/pull/12926)
1275  Removed unused dependency `lodash.isarray`.
1276  ([@mmalecki](https://github.com/mmalecki))
1277* [`168ed28`](https://github.com/npm/npm/commit/168ed2834b2c6db8bb39f81baadc0bf275807328)
1278  [#12926](https://github.com/npm/npm/pull/12926)
1279  Removed unused dependency `lodash.keys`.
1280  ([@mmalecki](https://github.com/mmalecki))
1281
1282### v3.9.5 (2016-05-27):
1283
1284Just a quick point release. We had an issue where I (Kat) included the
1285`.nyc_output/` directory in `npm@3.9.3` and `npm@3.9.4`. The issue got reported
1286right after that second release
1287([`#12873`](https://github.com/npm/npm/issues/12873)), and now there's this
1288small point release that's there to fix the issue sooner.
1289
1290* [`f96aea0`](https://github.com/npm/npm/commit/f96aea085be981cdb59bd09f16da40717426f981)
1291  [#12878](https://github.com/npm/npm/pull/12878)
1292  Ignore `.nyc_output` to avoid an accidental publish or commit filled with
1293  code coverage data.
1294  ([@TheAlphaNerd](https://github.com/TheAlphaNerd))
1295
1296### v3.9.4 (2016-05-26):
1297
1298Hey all! It's that time again!
1299
1300This week continues our current `big-bug` squashing push, although there's none
1301that are ready to release quite yet -- we're working on it!
1302
1303It's also worth noting that we're entering the main part of conference season,
1304so you can probably expect a bit of a dev slowdown as a lot of us wombats attend
1305or speak at the various conferences. Remember [npm.camp](npm.camp) is happening
1306in 2 months and the lineup is looking pretty great! Tickets are still on sale.
1307Come hang out with us! WOO FUN! ����
1308
1309#### BUGFIX
1310
1311* [`cac0038`](https://github.com/npm/npm/commit/cac0038868b18295f9f299e762e20034f32a3e11)
1312  [#12845](https://github.com/npm/npm/pull/12845)
1313  Progress bar during tarball packing now prints `pack:packagename` instead of
1314  `pack:[object Object]`.
1315  ([@iarna](https://github.com/iarna))
1316
1317#### DOC UPDATES
1318
1319* [`0b81622`](https://github.com/npm/npm/commit/0b816225c743c9203db5d92fb4dd3a9293833298)
1320  [#12840](https://github.com/npm/npm/pull/12840)
1321  Remove sexualized language from comment in code.
1322  ([@geek](https://github.com/geek))
1323* [`d6dff24`](https://github.com/npm/npm/commit/d6dff2481cb587c392f22afb893ac3136371a64c)
1324  [#12802](https://github.com/npm/npm/pull/12802)
1325  Small grammar fix in `cli/npm.md`.
1326  ([@andresilveira](https://github.com/andresilveira))
1327* [`cb38e0f`](https://github.com/npm/npm/commit/cb38e0fff82a6c1c110026b95b07a8c32e27ec01)
1328  [#12782](https://github.com/npm/npm/pull/12782)
1329  Documents that `NOTICE` files started getting included after
1330  [npm/fstream-npm#17](https://github.com/npm/fstream-npm/pull/17).
1331  ([@SimenB](https://github.com/SimenB))
1332* [`70a3ae4`](https://github.com/npm/npm/commit/70a3ae4d4ec76b3ec51f00bf5261f1147829f9fe)
1333  [#12776](https://github.com/npm/npm/pull/12776)
1334  `npm run-script` used to have a `<pkg>` argument that allowed you to target
1335  specific packages' scripts. This was removed as one of the breaking changes
1336  for `npm@2`.
1337  This patch removes a mention of that argument, which really doesn't exist
1338  anymore.
1339  ([@fibo](https://github.com/fibo))
1340
1341#### DEP UPDATES
1342
1343* [`4a4470d`](https://github.com/npm/npm/commit/4a4470ddd1d9b0b62cb94f3bff5ab6b8e6db527a)
1344  `aproba@1.0.3`
1345  ([@iarna](https://github.com/iarna))
1346
1347#### TEST IMPROVEMENTS
1348
1349So it turns out, `t.comment` in `tap` is actually pretty nice!
1350There's also a couple other test improvements by Rebecca landing here.
1351
1352* [`9fd04dd`](https://github.com/npm/npm/commit/9fd04dd6be493465d7ac5f14dd9328e66069c1bf)
1353  [#12851](https://github.com/npm/npm/pull/12851)
1354  Rewrite `shrinkwrap-prod-dependency-also` test to use `common.npm`
1355  ([@iarna](https://github.com/iarna))
1356* [`3bc4a8e`](https://github.com/npm/npm/commit/3bc4a8ee58cb0e0adc84b4f135330f2b1e20d992)
1357  [#12851](https://github.com/npm/npm/pull/12851)
1358  Clean up `rm-linked` test.
1359  ([@iarna](https://github.com/iarna))
1360* [`bf7f7f2`](https://github.com/npm/npm/commit/bf7f7f273a794f7573bbbc84b1c216fdcd9e0ef9)
1361  [#12851](https://github.com/npm/npm/pull/12851)
1362  Clean up `outdated-symlink` test.
1363  ([@iarna](https://github.com/iarna))
1364* [`ca0baa4`](https://github.com/npm/npm/commit/ca0baa4dac85b1df4e26ef0c73d39314ca6858ca)
1365  [#12851](https://github.com/npm/npm/pull/12851)
1366  Improve diagnostics for `shrinkwrap-scoped-auth` test.
1367  ([@iarna](https://github.com/iarna))
1368* [`fbec9fd`](https://github.com/npm/npm/commit/fbec9fd5bb0abce589120d14c1f2b03b58cecce1)
1369  [#12851](https://github.com/npm/npm/pull/12851)
1370  Rewrite `shrinkwrap-dev-dependency` test to use `common.npm`.
1371  ([@iarna](https://github.com/iarna))
1372
1373### v3.9.3 (2016-05-19):
1374
1375This week continues our `big-bug` squashing adventure! Things are churning along
1376nicely, and we've gotten a lot of fantastic contributions from the community.
1377Please keep it up!
1378
1379A quick note on last week's release: We had a small `npm shrinkwrap`-related
1380crasher in `npm@3.9.1`, so once this release goes out, `v3.9.2` is going to be
1381`npm@latest`. Please update if you ended up in with that previous version!
1382
1383Remember we have a weekly team meeting, and you can [suggest agenda items in the
1384GitHub issue](https://github.com/npm/npm/issues/12761). Keep an eye out for the
1385`#npmweekly` tag on Twitter, too, and join the conversation! We'll do our best
1386to address questions y'all send us. ✌
1387
1388#### FIXES
1389
1390* [`42d71be`](https://github.com/npm/npm/commit/42d71be2cec674dd9e860ad414f53184f667620d)
1391  [#12685](https://github.com/npm/npm/pull/12685)
1392  When using `npm ls <pkg>` without a semver specifier, `npm ls` would skip
1393  any packages in your tree that matched by name, but had a prerelease version
1394  in their `package.json`. This patch fixes it so `npm ls` does a simple name
1395  match unless you use the `npm ls <pkg>@<version>` format.
1396  ([@zkat](https://github.com/zkat))
1397* [`c698ae6`](https://github.com/npm/npm/commit/c698ae666afc92fbc0fcba3c082cfa9b34a4420d)
1398  [#12685](https://github.com/npm/npm/pull/12685)
1399  Added some tests for more basic `npm ls` functionality.
1400  ([@zkat](https://github.com/zkat))
1401
1402### NOTABLE DEPENDENCY UPDATES
1403
1404* [`3a6fe23`](https://github.com/npm/npm/commit/3a6fe2373c45e80a1f28aaf176d552f6f97cf131)
1405  [npm/fstream-npm#17](https://github.com/npm/fstream-npm/pull/17)
1406  `fstream-npm@1.1.0`:
1407  `fstream-npm` always includes NOTICE files now.
1408  ([@kemitchell](https://github.com/kemitchell))
1409* [`df04e05`](https://github.com/npm/npm/commit/df04e05af1f257a1903372e1baf334c0969fbdbd)
1410  [#10013](https://github.com/npm/npm/issues/10013)
1411  `read-package-tree@5.1.4`:
1412  Fixes an issue where `npm install` would fail if your `node_modules` was
1413  symlinked.
1414  ([@iarna](https://github.com/iarna))
1415* [`584676f`](https://github.com/npm/npm/commit/584676f85eaebcb9d6c4d70d2ad320be8a8d6a74)
1416  [npm/init-package-json#62](https://github.com/npm/init-package-json/pull/62)
1417  `init-package-json@1.9.4`:
1418  Stop using `package` for a variable, which defeats some bundlers and linters.
1419  ([@adius](https://github.com/adius))
1420* [`935a7e3`](https://github.com/npm/npm/commit/935a7e359535e13924934811b77924cbad82619a)
1421  `readable-stream@2.1.3`:
1422  Node 6 build and buffer-related updates.
1423  ([@calvinmetcalf](https://github.com/calvinmetcalf))
1424
1425#### OTHER DEPENDENCY UPDATES
1426
1427* [`4c4609e`](https://github.com/npm/npm/commit/4c4609ea49e77303f9d72af6757620e6b3a9a6a9)
1428  `inflight@1.0.5`
1429  ([@zkat](https://github.com/zkat))
1430* [`7a3030d`](https://github.com/npm/npm/commit/7a3030d3d44ea2136425f72950ba22e6efd441d9)
1431  `hosted-git-info@2.1.5`
1432  ([@zkat](https://github.com/zkat))
1433* [`5ed4b58`](https://github.com/npm/npm/commit/5ed4b58409eeb134bca1c96252682fd7600d9906)
1434  `which@1.2.9`
1435  ([@isaacs](https://github.com/isaacs))
1436
1437### v3.9.2 (2016-05-17)
1438
1439This is a quick patch release.  The previous release, 3.9.1, introduced a
1440bug where npm would crash given a combination of specific package tree on
1441disk and a shrinkwrap.
1442
1443* [`cde367f`](https://github.com/npm/npm/commit/cde367fbb6eebc5db68a44b12a5c7bea158d70db)
1444  [#12724](https://github.com/npm/npm/issues/12724)
1445  Fix crasher when inflating shrinkwraps with packages on disk that were
1446  installed by older npm versions.
1447  ([@iarna](https://github.com/iarna))
1448
1449### v3.9.1 (2016-05-12)
1450
1451HI all!  We have bug fixes to a couple of the hairy corners of `npm`, in the
1452form of shrinkwraps and bundled dependencies. Plus some documentation improvements
1453and our lodash deps bot a bump.
1454
1455This is our first week really focused on getting the
1456[big bugs](https://github.com/npm/npm/issues?q=is%3Aopen+is%3Aissue+label:big-bug)
1457list down.  Our work from this week will be landing next week, and I can't
1458wait to tell you about that! (It's about symlinks!)
1459
1460#### SHRINKWRAP FIX
1461
1462* [`b894413`](https://github.com/npm/npm/commit/b8944139a935680c4a267468bb2d3c3082b5609f)
1463  [#12372](https://github.com/npm/npm/issues/12372)
1464  Changing a nested dependency in an `npm-shrinkwrap.json` and then running `npm install`
1465  would not get up the updated package. This corrects that.
1466  ([@misterbyrne](https://github.com/misterbyrne))
1467
1468#### BUNDLED DEPENDENCIES FIX
1469
1470* [`d0c6d19`](https://github.com/npm/npm/commit/d0c6d194471be8ce3e7b41b744b24f63dd1a3f6f)
1471  [#12476](https://github.com/npm/npm/pull/12476)
1472  Protects against a crasher when a bundled dep is missing a package.json.
1473  ([@dflupu](https://github.com/dflupu))
1474
1475#### DOCS IMPROVEMENTS
1476
1477* [`6699aa5`](https://github.com/npm/npm/commit/6699aa53c0a729cfc921ac1d8107c320e5a5ac95)
1478  [#12585](https://github.com/npm/npm/pull/12585)
1479  Document that engineStrict is quite gone. Not "deprecated" so much as "extirpated".
1480  ([@othiym23](https://github.com/othiym23))
1481* [`7a41a84`](https://github.com/npm/npm/commit/7a41a84b655be3204d2e80848278a510e42c80e7)
1482  [#12636](https://github.com/npm/npm/pull/12636)
1483  Improve `npm-scripts` documentation regarding when `node-gyp` is used.
1484  ([@reconbot](https://github.com/reconbot))
1485* [`4c4b4ba`](https://github.com/npm/npm/commit/4c4b4badf09b9b50cdca85314429a0111bb35cb1)
1486  [#12586](https://github.com/npm/npm/pull/12586)
1487  Correct `package.json` documentation as to when `node-gyp rebuild` called.
1488  This now matches https://docs.npmjs.com/misc/scripts#default-values
1489  ([@reconbot](https://github.com/reconbot))
1490
1491#### DEPENDENCY UPDATES
1492
1493* [`cfa797f`](https://github.com/npm/npm/commit/cfa797fedd34696d45b61e3ae0398407afece880)
1494  `lodash._baseuniq@4.6.0`
1495  ([@jdalton](https://github.com/jdalton))
1496* [`ab6f180`](https://github.com/npm/npm/commit/ab6f1801971b513f9294b4b8902034ab402af02d)
1497  `lodash.keys@4.0.7`
1498  ([@jdalton](https://github.com/jdalton))
1499* [`4b8d8b6`](https://github.com/npm/npm/commit/4b8d8b63e760a8aa03e8bffa974495dfafbfcb06)
1500  `lodash.union@4.4.0`
1501  ([@jdalton](https://github.com/jdalton))
1502* [`46099d3`](https://github.com/npm/npm/commit/46099d34542760098e5d13c7468a405a724ca407)
1503  `lodash.uniq@4.3.0`
1504  ([@jdalton](https://github.com/jdalton))
1505* [`fff89c6`](https://github.com/npm/npm/commit/fff89c6826c86e9e789adcc9c398385539306042)
1506  `lodash.without@4.2.0`
1507  ([@jdalton](https://github.com/jdalton))
1508
1509### v3.9.0 (2016-05-05)
1510
1511Wow!  This is a big release week!  We've completed the fixes that let the
1512test suite pass on Windows, plus more general bug fixes we found while
1513fixing things on Windows.  Plus a warning to help folks work around a common
1514footgun.  PLUS an improvement to how npm works with long cache timeouts.
1515
1516#### INFINITE CACHE A LITTLE BETTER
1517
1518* [`111ae3e`](https://github.com/npm/npm/commit/111ae3ec366ece7ebcf5988f5bc2a7cd70737dfe)
1519  [#8581](https://github.com/npm/npm/issues/8581)
1520  When a package is fetched from the cache which cannot satisfy the version
1521  requirements, an attempt to fetch it from the network is made.  This is
1522  helpful for folks using high values for `--cache-min` who are willing to
1523  accept possibly not-the-most-recent modules in return for less network
1524  traffic.
1525  ([@Zirak](https://github.com/Zirak))
1526
1527#### WARNING: FOOTGUN
1528
1529* [`60b9a05`](https://github.com/npm/npm/commit/60b9a051aa46b8892fe63b3681839a6fd6642bfd)
1530  [#12475](https://github.com/npm/npm/pull/12475)
1531  Options can only start with ASCII dashes.  Ordinarily this isn't a problem
1532  but many web documentation tools "helpfully" convert `--` into an emdash
1533  (–), or `-` into an endash (–).  If you copy and paste from this documentation
1534  your commands won't work the way you expect. This adds a warning that tries
1535  to be a little more descriptive about why your command is failing.
1536  ([@iarna](https://github.com/iarna))
1537
1538#### WINDOWS CI
1539
1540We have [Windows CI](https://ci.appveyor.com/project/npm/npm) setup now! We still have to
1541tweak it a little bit around paths to the git binaries, but it's otherwise ready!
1542
1543* [`bb5d6cb`](https://github.com/npm/npm/commit/bb5d6cbf46b2609243d3b384caadd196e665a797)
1544  [#11444](https://github.com/npm/npm/pull/11444)
1545  Add AppVeyor to CI matrix.
1546  ([@othiym23](https://github.com/othiym23))
1547
1548#### COVERAGE DATA
1549
1550Not only do our tests produce coverage reports after they run now, we also
1551automatically [update Coveralls](https://coveralls.io/github/npm/npm) with
1552results from [Travis CI](travis-ci.org/npm/npm) runs.
1553
1554* [`044cbab`](https://github.com/npm/npm/commit/044cbab0d49adeeb0d9310c64fee6c9759cc7428)
1555  [#11444](https://github.com/npm/npm/pull/11444)
1556  Enable coverage reporting for every test run.
1557  ([@othiym23](https://github.com/othiym23))
1558
1559#### EVERYONE BUGS
1560
1561* [`37c6a51`](https://github.com/npm/npm/commit/37c6a51c71b0feec8f639b3199a8a9172e58deec)
1562  [#12150](https://github.com/npm/npm/pull/12150)
1563  Ensure that 'npm cache ls' outputs real filenames.  Previously it would
1564  sometimes double up the package name in the path it printed.
1565  ([@isaacs](https://github.com/isaacs))
1566* [`d3ce0b2`](https://github.com/npm/npm/commit/d3ce0b253eb519375071aee29db4ee129dbcdf5c)
1567  [#11444](https://github.com/npm/npm/pull/11444)
1568  Fix unbuilding bins for scoped modules.
1569  ([@iarna](https://github.com/iarna))
1570* [`e928a30`](https://github.com/npm/npm/commit/e928a30947477a09245f54e9381f46b97bee32d5)
1571  [#11444](https://github.com/npm/npm/pull/11444)
1572  Make handling of local modules (eg `npm install /path/to/my/module`) more
1573  consistent when saved to a `package.json`. There were bugs previously where
1574  it wouldn't consistently resolve relative paths in the same way.
1575  ([@iarna](https://github.com/iarna))
1576* [`b820ed4`](https://github.com/npm/npm/commit/b820ed4fc04e21577fa66f7c9482b5ab002e7985)
1577  [#11444](https://github.com/npm/npm/pull/11444)
1578  Under certain circumstances the paths produced for linking, either
1579  relative or absolute, would end up basing off the wrong virtual cwd.
1580  This resulted in failures for `npm link` in this situations.
1581  ([@iarna](https://github.com/iarna))
1582
1583#### WINDOWS BUGS
1584
1585* [`7380425`](https://github.com/npm/npm/commit/7380425d810fb8bfc69405a9cbbdec19978a7bee)
1586  [#11444](https://github.com/npm/npm/pull/11444)
1587  Scoped module names were not being correctly inferred from the path on Windows.
1588  ([@zkat](https://github.com/zkat))
1589* [`91fc24f`](https://github.com/npm/npm/commit/91fc24f2763c2e0591093099ffc866c735f27fde)
1590  [#11444](https://github.com/npm/npm/pull/11444)
1591  Explore with a command to run didn't work properly in Windows– it would pop open a new
1592  cmd window and leave it there.
1593  ([@iarna](https://github.com/iarna))
1594
1595#### WINDOWS REFACTORING
1596
1597* [`f07e643`](https://github.com/npm/npm/commit/f07e6430d4ca02f811138f6140a8bad927607a1f)
1598  [#11444](https://github.com/npm/npm/pull/11444)
1599  Move exec path escaping out to its own function.  This turns out to be
1600  tricky to get right because how you escape commands to run on Windows via
1601  cmd is different then how you escape them at other times.  Specifically,
1602  you HAVE to quote each directory segment that has a quote in it, that is:
1603  `C:\"Program Files"\MyApp\MyApp.exe` By contrast, if that were an argument
1604  to a command being run, you CAN'T DO quote it that way, instead you have
1605  to wrap the entire path in quotes, like so: `"C:\Program
1606  Files\MyApp\MyApp.exe"`.
1607  ([@iarna](https://github.com/iarna))
1608* [`2e01d29`](https://github.com/npm/npm/commit/2e01d299f8244134b1aa040cab1b59c72c9df4da)
1609  [#11444](https://github.com/npm/npm/pull/11444)
1610  Create a single function for detecting if we're running on Windows (and
1611  using a Windows shell like cmd) and use this instead of doing it one-off
1612  all over the place.
1613  ([@iarna](https://github.com/iarna))
1614
1615#### FIX WINDOWS TESTS
1616
1617As I said before, our tests are passing on Windows! ��
1618
1619* [`ef0dd74`](https://github.com/npm/npm/commit/ef0dd74583be25c72343ed07d1127e4d0cc02df9)
1620  [#11444](https://github.com/npm/npm/pull/11444)
1621  The fruits of many weeks of labor, fix our tests to pass on Windows.
1622  ([@zkat](https://github.com/zkat))
1623  ([@iarna](https://github.com/iarna))
1624
1625#### DEPENDENCY UPDATES
1626
1627* [`8fccda8`](https://github.com/npm/npm/commit/8fccda8587209659c469ab55c608b0e2d7533530)
1628  [#11444](https://github.com/npm/npm/pull/11444)
1629  `normalize-git-url@3.0.2`:
1630  Fix file URLs on Windows.
1631  ([@zkat](https://github.com/zkat))
1632* [`f53a154`](https://github.com/npm/npm/commit/f53a154df8e0696623e6a71f33e0a7c11a7555aa)
1633  `readable-stream@2.1.2`:
1634  When readable-stream is disabled, reuse result of `require('stream')`
1635  instead of calling it every time.
1636  ([@calvinmetcalf](https://github.com/calvinmetcalf))
1637* [`02841cf`](https://github.com/npm/npm/commit/02841cfb81d6ba86f691ab43d9bbdac29aec27e7)
1638  [#11444](https://github.com/npm/npm/pull/11444)
1639  `realize-package-specifier@3.0.2`:
1640  Resolve local package paths relative to package root, not cwd.
1641  ([@zkat](https://github.com/zkat))
1642  ([@iarna](https://github.com/iarna))
1643* [`247c1c5`](https://github.com/npm/npm/commit/247c1c5ae08c882c9232ca605731039168bae6ed)
1644  [#11444](https://github.com/npm/npm/pull/11444)
1645  `npm-package-arg@4.1.1`:
1646  Fix Windows file URIs with leading slashes.
1647  ([@zkat](https://github.com/zkat))
1648* [`365c72b`](https://github.com/npm/npm/commit/365c72bc3ecd9e45f9649725dd635d5625219d8c)
1649  `which@1.2.8`
1650  ([@isaacs](https://github.com/isaacs))
1651* [`e568caa`](https://github.com/npm/npm/commit/e568caabb8390a924ce1cfa51fc914ee6c1637a2)
1652  `graceful-fs@4.1.4`
1653  ([@isaacs](https://github.com/isaacs))
1654* [`304b974`](https://github.com/npm/npm/commit/304b97434959a58f84383bcccc0357c51a4eb39a)
1655  [#11444](https://github.com/npm/npm/pull/11444)
1656  `standard@6.0.8`
1657  ([@feross](https://github.com/feross))
1658
1659### v3.8.9 (2016-04-28)
1660
1661Our biggest news this week is that we got the
1662[Windows test suite passing](https://github.com/npm/npm/pull/11444)!
1663It'll take a little longer to get it passing in our
1664[Windows CI](https://ci.appveyor.com/project/npm/npm/) but that's coming
1665soon too.
1666
1667That means we'll be shifting gears away from tests to fixing
1668[Big Bugs™](https://github.com/npm/npm/issues?q=is%3Aopen+is%3Aissue+label%3Abig-bug) again.
1669Join us at our [team meeting](https://github.com/npm/npm/issues/12517) next
1670Tuesday to learn more about that.
1671
1672#### BUG FIXES AND REFACTORING
1673
1674* [`60da618`](https://github.com/npm/npm/commit/60da61862885fa904afba7d121860b4282a5b0df)
1675  [#12347](https://github.com/npm/npm/issues/12347)
1676  Fix a bug that could result in shrinkwraps missing the `resolved` field, which is
1677  necessary in producing a fully reproducible build.
1678  ([@sminnee](https://github.com/sminnee))
1679* [`8597ba4`](https://github.com/npm/npm/commit/8597ba432e91245a1000953b612eb01308178bad)
1680  [#12009](https://github.com/npm/npm/issues/12009)
1681  Fix a bug in `npm view <packagename> versions` that resulted in bad output if you
1682  didn't also pass in `--json`.
1683  ([@watilde](https://github.com/watilde))
1684* [`20125f1`](https://github.com/npm/npm/commit/20125f19b96fd05af63f8c0bd243ffb25780279a)
1685  [`a53feac`](https://github.com/npm/npm/commit/a53feac2647f7dc4245f1700dfbdd1aba8745672)
1686  [`6cfbae4`](https://github.com/npm/npm/commit/6cfbae403abc3cf690565b09569f71cdd41a8372)
1687  [#12485](https://github.com/npm/npm/pull/12485)
1688  Refactor how the help summaries for commands are produced, such that we only have
1689  one list of command aliases.
1690  ([@watilde](https://github.com/watilde))
1691* [`2ae210c`](https://github.com/npm/npm/commit/2ae210c76ab6fd15fcf15dc1808b01ca0b94fc9e)
1692  `read-package-json@2.0.4`:
1693  Fix a crash we discovered while fixing up the Windows test suite where if
1694  you had a file in your `node_modules` it would cause a crash on Windows
1695  (but not MacOS/Linux).
1696
1697  This makes the error code you get on Windows match that from MacOS/Linux
1698  if you try to read a `package.json` from a path that includes a file, not
1699  a folder.
1700  ([@zkat](https://github.com/zkat))
1701
1702### v3.8.8 (2016-04-21)
1703
1704Hi all! Long time no see! We've been heads-down working through getting
1705[our test suite passing on Windows](https://github.com/npm/npm/pull/11444).
1706Did you know that we have
1707[Windows CI](https://ci.appveyor.com/project/npm/npm) now running over at
1708Appveyor?  In the meantime, we've got a bunch of dependency updates, some
1709nice documentation improvements and error messages when your `package.json`
1710contains invalid JSON. (Yeah, I thought we did that last one before too!)
1711
1712#### BAD JSON IS BAD
1713
1714* [`769e620`](https://github.com/npm/npm/commit/769e6200722d8060b6769e47354032c51cfa85a1)
1715  [#12406](https://github.com/npm/npm/pull/12406)
1716  Failing to parse the top level `package.json` should be an error.
1717  ([@watilde](https://github.com/watilde))
1718
1719#### DOCUMENTATION
1720
1721* [`7d64301`](https://github.com/npm/npm/commit/7d643018af5051c920cc73f17bfe32b7ff86e108)
1722  [#12415](https://github.com/npm/npm/pull/12415)
1723  Clarify that when configuring client-side certificates for authenticating
1724  to non-npm registries that `cert` and `key` are not filesystem paths and should
1725  actually include the certificate and key data.
1726  ([@rvedotrc](https://github.com/rvedotrc))
1727* [`f8539b8`](https://github.com/npm/npm/commit/f8539b8c986e81771ccc8ced7e716718423d3187)
1728  [#12324](https://github.com/npm/npm/pull/12324)
1729  Describe how `npm run` sets `NODE` and `PATH` in more detail.
1730  Note that `npm run` changes `PATH` to include the current node
1731  interpreter’s directory.
1732  ([@addaleax](https://github.com/addaleax))
1733* [`2b57606`](https://github.com/npm/npm/commit/2b57606852a2c2a03e4c4b7dcda85b807619c2cf)
1734  [#11461](https://github.com/npm/npm/pull/11461)
1735  Clarify the documentation for the package.json homepage field.
1736  ([@stevemao](https://github.com/stevemao))
1737
1738#### TESTS
1739
1740* [`b5a0fbb`](https://github.com/npm/npm/commit/b5a0fbb9e1a2c4fb003dd748264571aa6e3c9e70)
1741  [#12329](https://github.com/npm/npm/pull/12329)
1742  Fix progress config testing to ignore local user configs.
1743  Previously, _any_ local setting would cause the tests to fail as
1744  they were trying to test what the default values for the progress
1745  bar would be in different environments and any explicit setting
1746  overrides those defaults.
1747  ([@iarna](https://github.com/iarna))
1748* [`3d195bc`](https://github.com/npm/npm/commit/3d195bc0a72b40df02a5c56e4f3be44152e8222b)
1749  The lifecycle-signal test could crash on v0.8 due to its use of `Number.parseInt`, which
1750  isn't available in that version of node.  Fortunately `global.parseInt` _is_, so
1751  we just use that instead.
1752  ([@iarna](https://github.com/iarna))
1753
1754#### DEPENDENCY UPDATES
1755
1756* [`05a28e3`](https://github.com/npm/npm/commit/05a28e38586082ac4bbf26ee6f863cc8d07054d6)
1757  `npm-package-arg@4.1.1`:
1758  Under some circumstances `file://` URLs on Windows were not handled correctly.
1759
1760  Also, stop converting local module/tarballs into full paths in this
1761  module.  We do already do that in `realize-package-specifier`, which is
1762  more appropriate as it knows what package we're installing relative to.
1763  ([@zkat](https://github.com/zkat))
1764* [`ada2e93`](https://github.com/npm/npm/commit/ada2e93e8b276000150a9aa93fff69ec366e03d6)
1765  `realize-package-specifier@3.0.3`:
1766  Require the new `npm-package-arg`, plus fix a case where specifiers that were
1767  maybe a tag, maybe a local filename were resolved differently than those that were
1768  definitely a local filename.
1769  ([@zkat](https://github.com/zkat)) ([@iarna](https://github.com/iarna))
1770* [`adc515b`](https://github.com/npm/npm/commit/adc515b22775871386cd62390079fb4bf8e1714a)
1771  `fs-vacuum@1.2.9`:
1772  A fix for AIX where a non-empty directory can cause `fs.rmDir` to fail with `EEXIST` instead of `ENOTEMPTY`
1773  and three new tests
1774  ([@richardlau](https://github.com/richardlau))
1775
1776  Code cleanup, CI & dependency updates.
1777  ([@othiym23](https://github.com/othiym23))
1778* [`ef53a46`](https://github.com/npm/npm/commit/ef53a46906ce872a4541b605dd42a563cc26e614)
1779  `tap@5.7.1`
1780  ([@isaacs](https://github.com/isaacs))
1781* [`df1f2e4`](https://github.com/npm/npm/commit/df1f2e4838b4d7ea2ea2321a95ae868c0ec0a520)
1782  `request@2.72.0`:
1783  Fix crashes when response headers indicate gzipped content but the body is
1784  empty.
1785  Add support for the deflate content encoding.
1786  ([@simov](https://github.com/simov))
1787* [`776c599`](https://github.com/npm/npm/commit/776c599b204632aca9d29fd92ea5c4f099fdea9f)
1788  `readable-stream@2.1.0`:
1789  Adds READABLE_STREAM env var that, if set to `disable`, will make
1790  `readable-stream` use the local native node streams instead.
1791  ([@calvinmetcalf](https://github.com/calvinmetcalf))
1792* [`10d6d55`](https://github.com/npm/npm/commit/10d6d5547354fcf50e930c7932ba4d63c0b6009c)
1793  `normalize-git-url@3.0.2`:
1794  Add support `git+file://` type URLs.
1795  ([@zkat](https://github.com/zkat))
1796* [`75017ae`](https://github.com/npm/npm/commit/75017aeecec69a1efd546df908aa5befc4467f36)
1797  `lodash.union@4.3.0`
1798  ([@jdalton](https://github.com/jdalton))
1799
1800### v3.8.7 (2016-04-07)
1801
1802#### IMPROVED DIAGNOSTICS
1803
1804* [`38cf79f`](https://github.com/npm/npm/commit/38cf79ffa564ef5cb6677b476e06d0e45351592a)
1805  [#12083](https://github.com/npm/npm/pull/12083)
1806  If you `ignore-scripts` to disable lifecycles, this makes npm report when it skips running
1807  a script.
1808  ([@bfred-it](https://github.com/bfred-it))
1809
1810#### IMPROVE AUTO-INCLUDES
1811
1812* [`c615182`](https://github.com/npm/npm/commit/c615182c8b47e418338eb1317b99bb66987cda54)
1813  [#11995](https://github.com/npm/npm/pull/11995)
1814  There were bugs where modules whose names matched the special files that npm always
1815  includes would be included, for example, the `history` package was always included.
1816
1817  With `npm@3` such extraneously bundled modules would not be ordinarily
1818  used, as things in `node_modules` in packages are ignored entirely if the
1819  package isn't marked as bundling modules.
1820
1821  Because of this `npm@3` behavior, the `files-and-ignores` test failed to catch this as
1822  it was testing _install output_ not what got packed. That has also been fixed.
1823  ([@glenjamin](https://github.com/glenjamin))
1824
1825#### DOCUMENTATION UPDATES
1826
1827* [`823d9df`](https://github.com/npm/npm/commit/823d9dfa91d7086a26620f007aee4e3cd77b6153)
1828  [#12107](https://github.com/npm/npm/pull/12107)
1829  In the command summary for `adduser` mention that `login` is an alias.
1830  ([@gnerkus](https://github.com/gnerkus))
1831* [`7aaf47e`](https://github.com/npm/npm/commit/7aaf47e124c45dde72c961638b770ee535fb2776)
1832  [#12244](https://github.com/npm/npm/pull/12244)
1833  Update the README to suggest npm@3 for Windows users. Also add a reference to
1834  [Microsoft's npm upgrade tool](https://github.com/felixrieseberg/npm-windows-upgrade).
1835  ([@felixrieseberg](https://github.com/felixrieseberg))
1836
1837#### DEPENDENCY UPDATES
1838
1839* [`486bbc0`](https://github.com/npm/npm/commit/486bbc0e1b101f847e890e6f1925dc8cb253cf3e)
1840  `request@2.70.0`
1841  ([@simov](https://github.com/simov))
1842* [`b1aff34`](https://github.com/npm/npm/commit/b1aff346fc41f13e3306b437e1831942aacf2f54)
1843  `lodash.keys@4.0.6`
1844  ([@jdalton](https://github.com/jdalton))
1845
1846### v3.8.6 (2016-03-31)
1847
1848Heeeeeey y'all.
1849
1850Kat here! Rebecca's been schmoozing with folks at [Microsoft
1851Build](https://build.microsoft.com/), so I'm doing the `npm@3` release this
1852week.
1853
1854Speaking of Build, it looks like Microsoft is doing some bash thing. This might
1855be really good news for our Windows users once it rolls around. We're keeping an
1856eye out and feeling hopeful. ��
1857
1858As far as the release goes: We're really happy to be getting more and more
1859community contributions! Keep it up! We really appreciate folks trying to help
1860us, and we'll do our best to help point you in the right direction. Even things
1861like documentation are a huge help. And remember -- you get socks for it, too!
1862
1863#### FIXES
1864
1865* [`f8fb4d8`](https://github.com/npm/npm/commit/f8fb4d83923810eb78d075bd200a9376c64c3e3a)
1866  [#12079](https://github.com/npm/npm/pull/12079)
1867  Back in `npm@3.2.2` we included [a patch that made it so `npm install pkg` was
1868  basically `npm install pkg@latest` instead of
1869  `pkg@*`](https://github.com/npm/npm/pull/9170)
1870  This is probably what most users expected, but it also ended up [breaking `npm
1871  deprecate`](https://github.com/npm/npm/pull/9170) when no version was provided
1872  for a package. In that case, we were using `*` to mean "deprecate all
1873  versions" and relying on the `pkg` -> `pkg@*` conversion.
1874  This patch fixes `npm deprecate pkg` to work as it used to by special casing
1875  that particular command's behavior.
1876  ([@polm](https://github.com/polm))
1877* [`458f773`](https://github.com/npm/npm/commit/458f7734f3376aba0b6ff16d34a25892f7717e40)
1878  [#12146](https://github.com/npm/npm/pull/12146)
1879  Adds `make doc-clean` to `prepublish` script, to clear out previously built
1880  docs before publishing a new npm version
1881  ([@watilde](https://github.com/watilde))
1882* [`f0d1521`](https://github.com/npm/npm/commit/f0d1521038e956b2197673f36c464684293ce99d)
1883  [#12146](https://github.com/npm/npm/pull/12146)
1884  Adds `doc-clean` phony target to `make publish`.
1885  ([@watilde](https://github.com/watilde))
1886
1887#### DOC UPDATES
1888
1889* [`ea92ffc`](https://github.com/npm/npm/commit/ea92ffc9dd2a063896353fc52c104e85ec061360)
1890  [#12147](https://github.com/npm/npm/pull/12147)
1891  Document that the current behavior of `engines` is just to warn if the node
1892  platform is incompatible.
1893  ([@reconbot](https://github.com/reconbot))
1894* [`cd1ba44`](https://github.com/npm/npm/commit/cd1ba4423b3ca889c741141b95b0d9472b9f71ea)
1895  [#12143](https://github.com/npm/npm/pull/12143)
1896  Remove `npm faq` command, since the [FAQ was
1897  removed](https://github.com/npm/npm/pull/10547).
1898  ([@watilde](https://github.com/watilde))
1899* [`50a12cb`](https://github.com/npm/npm/commit/50a12cb1f5f158af78d6962ad20ff0a98bc18f18)
1900  [#12143](https://github.com/npm/npm/pull/12143)
1901  Remove references to the FAQ from the docs, since [it was
1902  removed](https://github.com/npm/npm/pull/10547).
1903  ([@watilde](https://github.com/watilde))
1904* [`60051c2`](https://github.com/npm/npm/commit/60051c25e2ab80c667137dfcd04b242eea25980e)
1905  [#12093](https://github.com/npm/npm/pull/12093)
1906  Update `bugs` url in `package.json` to use the `https` URL for Github.
1907  ([@watilde](https://github.com/watilde))
1908* [`af30c37`](https://github.com/npm/npm/commit/af30c374ef22ed1a1c71b14fced7c4b8350e4e82)
1909  [#12075](https://github.com/npm/npm/pull/12075)
1910  Add the `--ignore-scripts` flag to the `npm install` docs.
1911  ([@paulirish](https://github.com/paulirish))
1912* [`632b214`](https://github.com/npm/npm/commit/632b214b2f2450e844410792e5947e46844612ff)
1913  [#12063](https://github.com/npm/npm/pull/12063)
1914  Various minor fixes to the html docs homepage.
1915  ([@watilde](https://github.com/watilde))
1916
1917#### DEP BUMPS
1918
1919* [`3da0171`](https://github.com/npm/npm/commit/3da01716a0e41d6b5adee2b4fc70fcaf08c0eb24)
1920  `lodash.without@4.1.2`
1921  ([@jdalton](https://github.com/jdalton))
1922* [`69ccf6d`](https://github.com/npm/npm/commit/69ccf6dd4caf95cd0628054307487cae1885acd0)
1923  `lodash.uniq@4.2.1`
1924  ([@jdalton](https://github.com/jdalton))
1925* [`b50c41a`](https://github.com/npm/npm/commit/b50c41a9930dc5353a23c5ae2ff87bb99e11d482)
1926  `lodash.union@4.2.1`
1927  ([@jdalton](https://github.com/jdalton))
1928* [`59c1ad7`](https://github.com/npm/npm/commit/59c1ad7b6f243d07618ed5703bd11d787732fc57)
1929  `lodash.clonedeep@4.3.2`
1930  ([@jdalton](https://github.com/jdalton))
1931* [`2b4f797`](https://github.com/npm/npm/commit/2b4f797dba8e7a1376c8335b7223e82d02cd8243)
1932  `lodash._baseuniq@4.5.1`
1933  ([@jdalton](https://github.com/jdalton))
1934
1935### v3.8.5 (2016-03-24)
1936
1937Like my esteemed colleague [@zkat](https://github.com/zkat) said in this
1938week's [LTS release notes](https://github.com/npm/npm/releases/tag/v2.15.2),
1939this week is another small release but we are continuing to work on our
1940[Windows efforts](https://github.com/npm/npm/pull/11444).
1941
1942You may also be interested in reading the [LTS process and
1943policy](https://github.com/npm/npm/wiki/LTS) that
1944[@othiym23](https://github.com/othiym23) put together recently. If you have any
1945feedback, we would love to hear.
1946
1947#### DOCTOR IT HURTS WHEN LINK TO MY LINK
1948
1949Well then, don't do that.
1950
1951* [`0d4a0b1`](https://github.com/npm/npm/commit/0d4a0b1)
1952  [#11442](https://github.com/npm/npm/pull/11442)
1953  Fail if the user asks us to make a link from a module back on to itself.
1954  ([@antialias](https://github.com/antialias))
1955
1956#### ERR MODULE LIST TOO LONG
1957
1958* [`b271ed2`](https://github.com/npm/npm/commit/b271ed2)
1959  [#11983](https://github.com/npm/npm/issues/11983)
1960  Exit early if no arguments were provided to search instead of trying to display all the modules,
1961  running out of memory, and then crashing.
1962  ([@SimenB](https://github.com/SimenB))
1963
1964#### ELIMINATE UNUSED MODULE
1965
1966* [`b8c7cd7`](https://github.com/npm/npm/commit/b8c7cd7)
1967  [#12000](https://github.com/npm/npm/pull/12000)
1968  Stop depending on [`async-some`](https://npmjs.com/package/async-some) as it's no
1969  longer used in npm.
1970  ([@watilde](https://github.com/watilde))
1971
1972#### DOCUMENTATION IMPROVEMENTS
1973
1974* [`fdd6b28`](https://github.com/npm/npm/commit/fdd6b28)
1975  [#11884](https://github.com/npm/npm/pull/11884)
1976  Include `node_modules` in the list of files and directories that npm won't
1977  include in packages ordinarily. (Modules listed in `bundledDependencies` and things
1978  that those modules rely on, ARE included of course.)
1979  ([@Jameskmonger](https://github.com/Jameskmonger))
1980* [`aac15eb`](https://github.com/npm/npm/commit/aac15eb)
1981  [#12006](https://github.com/npm/npm/pull/12006)
1982  Fix typo in npm-orgs documentation, where teams docs went to access docs and vice versa.
1983  ([@yaelz](https://github.com/yaelz))
1984
1985#### FEWER NETWORK TESTS
1986
1987* [`3e41360`](https://github.com/npm/npm/commit/3e41360)
1988  [#11987](https://github.com/npm/npm/pull/11987)
1989  Fix test that was inappropriately hitting the network
1990  ([@yodeyer](https://github.com/yodeyer))
1991
1992### v3.8.4 (2016-03-24)
1993
1994Was erroneously released with just a changelog typo correction and was
1995otherwise the same as 3.8.3.
1996
1997### v3.8.3 (2016-03-17):
1998
1999#### SECURITY ADVISORY: BEARER TOKEN DISCLOSURE
2000
2001This release includes [the fix for a
2002vulnerability](https://github.com/npm/npm/commit/f67ecad59e99a03e5aad8e93cd1a086ae087cb29)
2003that could cause the unintentional leakage of bearer tokens.
2004
2005Here are details on this vulnerability and how it affects you.
2006
2007##### DETAILS
2008
2009Since 2014, npm’s registry has used HTTP bearer tokens to authenticate requests
2010from the npm’s command-line interface. A design flaw meant that the CLI was
2011sending these bearer tokens with _every_ request made by logged-in users,
2012regardless of the destination of their request. (The bearers only should have
2013been included for requests made against a registry or registries used for the
2014current install.)
2015
2016An attacker could exploit this flaw by setting up an HTTP server that could
2017collect authentication information, then use this authentication information to
2018impersonate the users whose tokens they collected. This impersonation would
2019allow them to do anything the compromised users could do, including publishing
2020new versions of packages.
2021
2022With the fixes we’ve released, the CLI will only send bearer tokens with
2023requests made against a registry.
2024
2025##### THINK YOU'RE AT RISK? REGENERATE YOUR TOKENS
2026
2027If you believe that your bearer token may have been leaked, [invalidate your
2028current npm bearer tokens](https://www.npmjs.com/settings/tokens) and rerun
2029`npm login` to generate new tokens. Keep in mind that this may cause continuous
2030integration builds in services like Travis to break, in which case you’ll need
2031to update the tokens in your CI server’s configuration.
2032
2033##### WILL THIS BREAK MY CURRENT SETUP?
2034
2035Maybe.
2036
2037npm’s CLI team believes that the fix won’t break any existing registry setups.
2038Due to the large number of registry software suites out in the wild, though,
2039it’s possible our change will be breaking in some cases.
2040
2041If so, please [file an issue](https://github.com/npm/npm/issues/new) describing
2042the software you’re using and how it broke. Our team will work with you to
2043mitigate the breakage.
2044
2045##### CREDIT & THANKS
2046
2047Thanks to Mitar, Will White & the team at Mapbox, Max Motovilov, and James
2048Taylor for reporting this vulnerability to npm.
2049
2050#### PERFORMANCE IMPROVEMENTS
2051
2052The updated [`are-we-there-yet`](https://npmjs.com/package/are-we-there-yet)
2053changes how it tracks how complete things are to be much more efficient.
2054The summary is that `are-we-there-yet` was refactored to remove an expensive
2055tree walk.
2056
2057The result for you should be faster installs when working with very large trees.
2058
2059Previously `are-we-there-yet` computed this when you asked by passing the request down
2060its tree of progress indicators, totaling up the results. In doing so, it had to walk the
2061entire tree of progress indicators.
2062
2063By contrast, `are-we-there-yet` now updates a running total when a change
2064is made, bubbling that up the tree from whatever branch made progress.  This
2065bubbling was already going on so there was nearly no cost associated with taking advantage of it.
2066
2067* [`32f2bd0`](https://github.com/npm/npm/commit/32f2bd0e26116db253e619d67c4feae1de3ad2c2)
2068  `npmlog@2.0.3`:
2069  Bring in substantial performance improvements from `are-we-there-yet`.
2070  ([@iarna](https://github.com/iarna))
2071
2072#### DUCT TAPE FOR BUGS
2073
2074* [`473d324`](https://github.com/npm/npm/commit/473d3244a8ddfd6b260d0aa0d395b119d595bf97)
2075  [#11947](https://github.com/npm/npm/pull/11947)
2076  Guard against bugs that could cause the installer to crash with errors like:
2077
2078  ```
2079  TypeError: Cannot read property 'target' of null
2080  ```
2081
2082  This doesn't fix the bugs, but it does at least make the installer less
2083  likely to explode.
2084  ([@thefourtheye](https://github.com/thefourtheye))
2085
2086#### DOC FIXES
2087
2088* [`ffa428a`](https://github.com/npm/npm/commit/ffa428a4eee482aa620819bc8df994a76fad7b0c)
2089  [#11880](https://github.com/npm/npm/pull/11880)
2090  Fix typo in `npm install` documentation.
2091  ([@watilde](https://github.com/watilde))
2092
2093#### DEPENDENCY UPDATES
2094
2095* [`7537fe1`](https://github.com/npm/npm/commit/7537fe1748c27e6f1144b279b256cd3376d5c41c)
2096  `sorted-object@2.0.0`:
2097  Create objects with `{}` instead of `Object.create(null)` to make the results
2098  strictly equal to what, say, parsed JSON would provide.
2099  ([@domenic](https://github.com/domenic))
2100* [`8defb0f`](https://github.com/npm/npm/commit/8defb0f7b3ebdbe15c9ef5036052c10eda7e3161)
2101  `readable-stream@2.0.6`:
2102  Fix sync write issue on 0.10.
2103  ([@calvinmetcalf](https://github.com/calvinmetcalf))
2104
2105#### TEST FIXES FOR THE SELF TESTS
2106
2107* [`c3edeab`](https://github.com/npm/npm/commit/c3edeabece4400308264e7cf4bc4448bd2729f55)
2108  [#11912](https://github.com/npm/npm/pull/11912)
2109  Change the self installation test to do its work in `/tmp`.
2110  Previously this was installing into a temp subdir in `test/tap`, which
2111  wouldn't catch the case where a module was installed in the local
2112  `node_modules` folder but not in dependencies, as node would look up
2113  the tree and use the copy from the version of npm being tested.
2114  ([@iarna](https://github.com/iarna))
2115
2116### v3.8.2 (2016-03-10):
2117
2118#### HAVING TROUBLE INSTALLING C MODULES ON ANDROID?
2119
2120This release includes an updated `node-gyp` with fixes for Android.
2121
2122* [`634ecba`](https://github.com/npm/npm/commit/634ecba320fb5a3287e8b7debfd8b931827b9e19)
2123  `node-gyp@3.3.1`:
2124  Fix bug in builds for Android.
2125  ([@bnoordhuis](https://github.com/bnoordhuis))
2126
2127#### NPM LOGOUT CLEANS UP BETTER
2128
2129* [`460ed21`](https://github.com/npm/npm/commit/460ed217876ac78d21477c288f1c06563fb770b4)
2130  [#10529](https://github.com/npm/npm/issues/10529)
2131  If you ran `npm logout` with a scope, while we did invalidate your auth
2132  token, we weren't removing the auth token from your config file. This patch causes
2133  the auth token to be removed.
2134  ([@wyze](https://github.com/wyze))
2135
2136#### HELP MORE HELPFUL
2137
2138* [`d1d0233`](https://github.com/npm/npm/commit/d1d02335d297da2734b538de44d8967bdcd354cf)
2139  [#11003](https://github.com/npm/npm/issues/11003)
2140  Update help to only show command names and their shortcuts. Previously
2141  some typo corrections were shown, along with various alternate
2142  spellings.
2143  ([@watilde](https://github.com/watilde))
2144* [`47928cd`](https://github.com/npm/npm/commit/47928cd6264e1d6d0ef67435b71c66d01bea664a)
2145  [#11003](https://github.com/npm/npm/issues/11003)
2146  Remove "version" typo from the help listing.
2147  ([@doug-wade](https://github.com/doug-wade))
2148
2149#### MORE COMPLETE CONFIG LISTINGS
2150
2151* [`cf5fd40`](https://github.com/npm/npm/commit/cf5fd401494d96325d74a8bb8c326aa0045a714c)
2152  [#11472](https://github.com/npm/npm/issues/11472)
2153  Make `npm config list` include the per-project `.npmrc` in the output.
2154  ([@mjomble](https://github.com/mjomble))
2155
2156#### DEPTH LIMITED PARSEABLE DEP LISTINGS
2157
2158* [`611070f`](https://github.com/npm/npm/commit/611070f0f7a1e185c75cadae46179194084b398f)
2159  [#11495](https://github.com/npm/npm/issues/11495)
2160  Made `npm ls --parseable` honor the `--depth=#` option.
2161  ([@zacdoe](https://github.com/zacdoe))
2162
2163#### PROGRESS FOR THE (NON) UNICODE REVOLUTION
2164
2165* [`ff90382`](https://github.com/npm/npm/commit/ff9038227a1976b5e936442716d9877f43c6c9b4)
2166  [#11781](https://github.com/npm/npm/issues/11781)
2167  Make the progress bars honor the unicode option.
2168  ([@watilde](https://github.com/watilde))
2169
2170#### `npm view --json`, NOW ACTUALLY JSON
2171
2172* [`24ab70a`](https://github.com/npm/npm/commit/24ab70a4ccfeaa005b80252da313bb589510668e)
2173  [#11808](https://github.com/npm/npm/issues/11808)
2174  Make `npm view` produce valid JSON when requested with `--json`.
2175  Previously `npm view` produced some sort of weird hybrid output, with multiple
2176  JSON docs.
2177  ([@doug-wade](https://github.com/doug-wade))
2178
2179#### DOCUMENTATION CHANGES
2180
2181* [`6fb0499`](https://github.com/npm/npm/commit/6fb0499bea868fdc637656d210c94f051481ecd4)
2182  [#11726](https://github.com/npm/npm/issues/11726)
2183  Previously we patched the `npm update` docs to suggest using `--depth
2184  Infinity` instead of `--depth 9999`, but that was a mistake. We forgot
2185  that `npm outdated` (on which `npm update` is built) has a special
2186  case where it treats `Infinity` as `0`. This reverts that patch.
2187  ([@GriffinSchneider](https://github.com/GriffinSchneider))
2188* [`f0bf684`](https://github.com/npm/npm/commit/f0bf684a87ea5eea03432a17f38678fed4960d43)
2189  [#11748](https://github.com/npm/npm/pull/11748)
2190  Document all of the various aliases for commands in the documentation
2191  for those commands.
2192  ([@watilde](https://github.com/watilde))
2193* [`fe04443`](https://github.com/npm/npm/commit/fe04443d8988e2e41bd4047078e06a26d05d380d)
2194  [#10968](https://github.com/npm/npm/issues/10968)
2195  The `npm-scope` document notes that scopes have been available on the
2196  public registry for a while. This adds that you'll need `npm@2` or later
2197  to use them.
2198  ([@doug-wade](https://github.com/doug-wade))
2199* [`3db37a5`](https://github.com/npm/npm/commit/3db37a52b2b2e3193ef250ad2cf96dfd2def2777)
2200  [#11820](https://github.com/npm/npm/pull/11820)
2201  The command `npm link` should be linking package from local folder to
2202  global, and `npm link package-name` should be from global to local. The
2203  description in the documentation was reversed and this fixes that.
2204  ([@rhgb](https://github.com/rhgb))
2205
2206#### GLOB FOR THE GLOB THRONE
2207
2208* [`be55882`](https://github.com/npm/npm/commit/be55882dc4ee5ce0777b4badc9141dab5bf5be4d)
2209  `glob@7.0.3`:
2210  Fix a race condition and some windows edge cases.
2211  ([@isaacs](https://github.com/isaacs))
2212
2213### v3.8.1 (2016-03-03):
2214
2215This week the install summary got better, killing your npm process now
2216also kills the scripts it was running and a rarely used search flag got
2217documented.
2218
2219Our improvements on the test suite on Windows are beginning to pick up
2220steam, you can follow along by
2221[watching the PR](https://github.com/npm/npm/pull/11444).
2222
2223#### BETTER INSTALL SUMMARIES
2224
2225* [`e40d457`](https://github.com/npm/npm/commit/e40d4572cc98db06757df5b8bb6b7dbd0546d3d7)
2226  [#11699](https://github.com/npm/npm/issues/11699)
2227  Ensure that flags like `--production` passed to install don't result in
2228  the summary at the end being incorrectly filtered. That summary is
2229  produced by the same code as `npm ls` and therefore responds to flags
2230  the same way it does. This is undesirable when it's an install summary,
2231  however, as we don't want it to filter anything.
2232
2233  This fixes an issue where `npm install --production <module>` would
2234  result in npm exiting with an error code. The `--production` flag would
2235  make `npm ls` filter out `<module>` as it wasn't saved to the
2236  `package.json` and thus wasn't a production dependency. The install
2237  report is limited to show just the modules installed, so with that
2238  filtered out nothing is available. With nothing available `npm ls`
2239  would set `npm` to exit with an error code.
2240  ([@ixalon](https://github.com/ixalon))
2241* [`99337b4`](https://github.com/npm/npm/commit/99337b469163a4b211b9c6ff1aa9712ae0d601d2)
2242  [#11600](https://github.com/npm/npm/pull/11600)
2243  Make the report of installed modules really only show those modules
2244  that were installed. Previously it selected which modules from your
2245  tree to display based on `name@version` which worked great when your
2246  tree was deduped but would list things it hadn't touched when there
2247  were duplicates.
2248  ([@iarna](https://github.com/iarna))
2249
2250#### SCRIPTS BETTER FOLLOW THE LEADER
2251
2252* [`5454347`](https://github.com/npm/npm/commit/545434766eb3681d3f40b745f9f3187ed63f310a)
2253  [#10868](https://github.com/npm/npm/pull/10868)
2254  When running a lifecycle script, say through `npm start`, killing npm
2255  wouldn't forward that on to the children. It does now.
2256  ([@daniel-pedersen](https://github.com/daniel-pedersen))
2257
2258#### SEARCHING SPECIFIC REGISTRIES
2259
2260* [`6020447`](https://github.com/npm/npm/commit/60204479f76458a9864aa530cda2b3333f95c2b0)
2261  [#11490](https://github.com/npm/npm/pull/11490)
2262  Add docs for using the `--registry` flag with search.
2263  ([@plumlee](https://github.com/plumlee))
2264
2265#### LODASH UPDATES
2266
2267* [`bb14204`](https://github.com/npm/npm/commit/bb14204183dad620a6650452a26cdc64111f8136)
2268  `lodash.without@4.1.1`
2269  ([@jdalton](https://github.com/jdalton))
2270* [`0089059`](https://github.com/npm/npm/commit/0089059c562aee9ad0398e55d2c12c68a6150e79)
2271  `lodash.keys@4.0.5`
2272  ([@jdalton](https://github.com/jdalton))
2273* [`6ee1de4`](https://github.com/npm/npm/commit/6ee1de4474d9683a1f7023067d440780eeb10311)
2274  `lodash.clonedeep@4.3.1`
2275  ([@jdalton](https://github.com/jdalton))
2276
2277### v3.8.0 (2016-02-25):
2278
2279This week brings a quality of life improvement for some Windows users, and
2280an important knob to be tuned for folks experiencing network problems.
2281
2282#### LIMIT CONCURRENT REQUESTS
2283
2284We've long known that `npm`'s tendency to try to request all your
2285dependencies simultaneously upset some network hardware (particular,
2286consumer grade routers & proxies of all sorts). One of the reasons that we're
2287planning to write our own npm specific version of `request` is to be able to
2288more easily control this sort of thing.
2289
2290But fortunately, you don't have to wait for that.
2291[@misterbyrne](https://github.com/misterbyrne) took a look at our existing
2292code and realized it could be added painlessly TODAY.  The new default
2293maximum is `50`, instead of `Infinity`.  If you're having network issues you
2294can try setting that value down to something lower (if you do, please let us
2295know...  the default is subject to tuning).
2296
2297* [`910f9ac`](https://github.com/npm/npm/commit/910f9accf398466b8497952bee9f566ab50ade8c)
2298  [`f7be667`](https://github.com/npm/npm/commit/f7be667548a132ec190ac9d60a31885a7b4fe2b3)
2299  Add a new config option, `maxsockets` and `npm-registry-client@7.1.0` to
2300  take advantage of it.
2301  ([@misterbyrne](https://github.com/misterbyrne))
2302
2303#### WINDOWS GIT BASH
2304
2305We think it's pretty keen too, we were making it really hard to actually
2306upgrade if you were using it. NO MORE!
2307
2308* [`d60351c`](https://github.com/npm/npm/commit/d60351ccae87d71a5f5eac73e3085c6290b52a69)
2309  [#11524](https://github.com/npm/npm/issues/11524)
2310  Prefer locally installed npm in Git Bash -- previous behavior was to use
2311  the global one.  This was done previously for other shells, but not for Git
2312  Bash.
2313  ([@destroyerofbuilds](https://github.com/destroyerofbuilds))
2314
2315#### DOCUMENTATION IMPROVEMENTS
2316
2317* [`b63de3c`](https://github.com/npm/npm/commit/b63de3c97c4c27078944249a4d5bbe1c502c23bc)
2318  [#11636](https://github.com/npm/npm/issues/11636)
2319  Document `--save-bundle` option in main install page.
2320  ([@datyayu](https://github.com/datyayu))
2321* [`3d26453`](https://github.com/npm/npm/commit/3d264532d6d9df60420e985334aebb53c668d32b)
2322  [#11644](https://github.com/npm/npm/pull/11644)
2323  Add `directories.test` to the `package.json` documentation.
2324  ([@lewiscowper](https://github.com/lewiscowper))
2325* [`b64d124`](https://github.com/npm/npm/commit/b64d12432fdad344199b678d700306340d3607eb)
2326  [#11441](https://github.com/npm/npm/pull/11441)
2327  Add a link in documentation to the contribution guidelines.
2328  ([@watilde](https://github.com/watilde))
2329* [`82fc548`](https://github.com/npm/npm/commit/82fc548b0e2abbdc4f7968c20b118c30cca79a24)
2330  [#11441](https://github.com/npm/npm/pull/11441/commits)
2331  Remove mentions of the long defunct Google group.
2332  ([@watilde](https://github.com/watilde))
2333* [`c6ad091`](https://github.com/npm/npm/commit/c6ad09131af2e2766d6034257a8fcaa294184121)
2334  [#11474](https://github.com/npm/npm/pull/11474)
2335  Correct invalid JSON in npm-update docs.
2336  ([@robludwig](https://github.com/robludwig))
2337* [`4906c90`](https://github.com/npm/npm/commit/4906c90ed2668adf59ebee759c7ebb811aa46e57)
2338  Expand on the documentation for `bundlededDependencies`, explaining what they are
2339  and when you might want to use them.
2340  ([@gnerkus](https://github.com/gnerkus))
2341
2342#### DEPENDENCY UPDATES
2343
2344* [`93cdc25`](https://github.com/npm/npm/commit/93cdc25432b71cbc9c25c54ae316770e18f4b01e)
2345  `strip-ansi@3.0.1`:
2346  Non-user visible tests & maintainer doc updates.
2347  ([@jbnicolai](https://github.com/jbnicolai))
2348* [`3b2ccef`](https://github.com/npm/npm/commit/3b2ccef30dc2038b99ba93cd1404a1d01dac8790)
2349  `lodash.keys@4.0.4`
2350  ([@jdalton](https://github.com/jdalton))
2351* [`30e9eb9`](https://github.com/npm/npm/commit/30e9eb97397a8f85081d328ea9aa54c2a7852613)
2352  `lodash._baseuniq@4.5.0`
2353  ([@jdalton](https://github.com/jdalton))
2354
2355
2356### v3.7.5 (2016-02-22):
2357
2358A quick fixup release because when I updated glob, I missed the subdep copies of itself
2359that it installed deeper in the tree. =/
2360
2361This only effected people trying to update to `3.7.4` from `npm@2` or `npm@1`. Updates from
2362`npm@3` worked fine (as it fixes up the missing subdeps during installation).
2363
2364#### OH MY GLOB
2365
2366* [`63fa704`](https://github.com/npm/npm/commit/63fa7044569127e6e29510dc499a865189806076)
2367  [#11633](https://github.com/npm/npm/issues/11633)
2368  When updating the top level `npm` to `glob@7`, the subdeps that
2369  still depended on `glob@6` got new versions installed but they
2370  weren't added to the commit. This adds them back in.
2371  ([@iarna](https://github.com/iarna))
2372
2373### v3.7.4 (2016-02-18):
2374
2375I'm ([@iarna](https://github.com/iarna)) back from vacation in the frozen
2376wastes of Maine!  This release sees a couple of bug fixes, some
2377documentation updates, a bunch of dependency updates and improvements to our
2378test suite.
2379
2380#### FIXES FOR `update`, FIXES FOR `ls`
2381
2382* [`53cdb96`](https://github.com/npm/npm/commit/53cdb96634fc329378b4ea4e767ba9987986a76e)
2383  [#11362](https://github.com/npm/npm/issues/11362)
2384  Make `npm update` stop trying to update linked packages.
2385  ([@rhendric](https://github.com/rhendric))
2386* [`8d90d25`](https://github.com/npm/npm/commit/8d90d25b3da086843ce43911329c9572bd109078)
2387  [#11559](https://github.com/npm/npm/issues/11559)
2388  Only list runtime dependencies when doing `npm ls --production`.
2389  ([@yibn2008](https://github.com/yibn2008))
2390
2391#### @wyze, DOCUMENTATION HERO OF THE PEOPLE, GETS THEIR OWN HEADER
2392
2393* [`b78b301`](https://github.com/npm/npm/commit/b78b30171038ab737eff0b070281277e35af25b4)
2394  [#11416](https://github.com/npm/npm/pull/11416)
2395  Logout docs were using a section copy-pasted from the adduser docs.
2396  ([@wyze](https://github.com/wyze))
2397* [`649e28f`](https://github.com/npm/npm/commit/649e28f50aa323e75202eeedb824434535a0a4a0)
2398  [#11414](https://github.com/npm/npm/pull/11414)
2399  Add colon for consistency.
2400  ([@wyze](https://github.com/wyze))
2401
2402#### WHITTLING AWAY AT PATH LENGTHS
2403
2404So for all of you who don't know -- Node.js does, in fact, support long Windows
2405paths. Unfortunately, depending on the tool and the Windows version, a lot of
2406external tooling does not. This means, for example, that some (all?) versions of
2407Windows Explorer *can literally never delete npm from their system entirely
2408because of deeply-nested npm dependencies*. Which is pretty gnarly.
2409
2410Incidentally, if you run into that in particularly, you can use
2411[rimraf](npm.im/rimraf) to remove such files ��.
2412
2413The latest victim of this issue was the Node.js CI setup for testing on Windows,
2414which uses some tooling or another that croaks on the usual path length limit
2415for that OS: 255 characters.
2416
2417This isn't ordinarily an issue with `npm@3` as it produces mostly flat
2418trees, but you may be surprised to learn that `npm`'s own distribution isn't
2419flat, due to needing to be compatible with `npm@1.2`, which ships with
2420`node@0.8`!
2421
2422We've taken another baby step towards alleviating this in this release by
2423updating a couple of dependencies that were preventing `npmlog` from deduping,
2424and then doing a dedupe on that and `gauge`. Hopefully it helps.
2425
2426* [`f3c32bc`](https://github.com/npm/npm/commit/f3c32bc3127301741d2fa3a26be6f5f127a35908)
2427  [#11528](https://github.com/npm/npm/pull/11528)
2428  `node-gyp@3.3.0`:
2429  Update to a more recent version that uses a version of npmlog compatible
2430  with npm itself.  Also adds: AIX support, new `gyp`, `--cafile` command
2431  line option, and allows configuration of Node.js and io.js mirrors.
2432  ([@rvagg](https://github.com/rvagg))
2433
2434#### INTERNAL TEST IMPROVEMENTS
2435
2436The `npm` core team's time recently has been sunk into `npm`'s many years of
2437tech debt. Specifically, we've been working on improving the test suite.
2438This isn't user visible, but in future should mean a more stable, easier to
2439contribute to `npm`. Ordinarily we don't report these kinds of changes in
2440the change log, but I thought I might share this week as this chunk is
2441bigger than usual.
2442
2443* [`07f020a`](https://github.com/npm/npm/commit/07f020a09e94ae393c67526985444e128ef6f83c)
2444  [#11292](https://github.com/npm/npm/pull/11292)
2445  `tacks@1.0.9`:
2446  Add a package that provides a tool to generate fixtures from folders and, relatedly,
2447  a module that an create and tear down filesystem fixtures easily.
2448  ([@iarna](https://github.com/iarna))
2449* [`0837346`](https://github.com/npm/npm/commit/083734631f9b11b17c08bca8ba8cb736a7b1e3fb)
2450  [#11292](https://github.com/npm/npm/pull/11292)
2451  Remove all the relatively cryptic legacy tests and creates new tap tests
2452  that check the same functionality.  The *legacy* tests were tests that
2453  were originally a shell script that was ported to javascript early in
2454  `npm`'s history.
2455  ([@iarna](https://github.com/iarna))
2456  ([@zkat](https://github.com/zkat))
2457* [`5a701e7`](https://github.com/npm/npm/commit/5a701e71a0130787fb98450f9de92117b4ef88e1)
2458  [#11292](https://github.com/npm/npm/pull/11292)
2459  Test that we don't leak auth info into the environment.
2460  ([@zkat](https://github.com/zkat))
2461* [`502d7d0`](https://github.com/npm/npm/commit/502d7d0628f08b09d8d13538ebccc63de8b3edf5)
2462  [#11292](https://github.com/npm/npm/pull/11292)
2463  Test that env vars properly passed into scripts.
2464  ([@zkat](https://github.com/zkat))
2465* [`420f267`](https://github.com/npm/npm/commit/420f2672ee8c909f18bee10b1fc7d4ad91cf328b)
2466  [#11292](https://github.com/npm/npm/pull/11292)
2467  Test that npm's distribution binary is complete and can be installed and used.
2468  ([@iarna](https://github.com/iarna))
2469* [`b7e99be`](https://github.com/npm/npm/commit/b7e99be1b1086f2d6098c653c1e20791269c9177)
2470  [#11292](https://github.com/npm/npm/pull/11292)
2471  Test that the `package.json` `files` section and `.npmignore` do what
2472  they're supposed to.
2473  ([@zkat](https://github.com/zkat))
2474
2475#### DEPENDENCY UPDATES
2476
2477* [`4611098`](https://github.com/npm/npm/commit/4611098fd8c65d61a0645deb05bf38c81300ffca)
2478  `rimraf@2.5.2`:
2479  Use `glob@7.0.0`.
2480  ([@isaacs](https://github.com/isaacs))
2481* [`41b2772`](https://github.com/npm/npm/commit/41b2772cb83627f3b5b926cf81e150e7148cb124)
2482  `glob@7.0.0`:
2483  Raise error if `options.cwd` is specified, and not a directory.
2484  ([@isaacs](https://github.com/isaacs))
2485* [`c14e74a`](https://github.com/npm/npm/commit/c14e74ab5d17c764f3aa37123a9632fa965f8760)
2486  `gauge@1.2.7`: Update to newer lodash versions, for a smaller tree.
2487  ([@iarna](https://github.com/iarna))
2488* [`d629363`](https://github.com/npm/npm/commit/d6293630ddc25bfa26d19b6be4fd2685976d7358)
2489  `lodash.without@4.1.0`
2490  ([@jdalton](https://github.com/jdalton))
2491* [`3ea4c80`](https://github.com/npm/npm/commit/3ea4c8049ca8df9f64426b1db8a29b9579950134)
2492  `lodash.uniq@4.2.0`
2493  ([@jdalton](https://github.com/jdalton))
2494* [`8ddcc8d`](https://github.com/npm/npm/commit/8ddcc8deb554660a3f7f474fae9758c967d94552)
2495  `lodash.union@4.2.0`
2496  ([@jdalton](https://github.com/jdalton))
2497* [`2b656a6`](https://github.com/npm/npm/commit/2b656a672d351f32ee2af24dcee528356dcd64f4)
2498  `lodash.keys@4.0.3`
2499  ([@jdalton](https://github.com/jdalton))
2500* [`ac171f8`](https://github.com/npm/npm/commit/ac171f8f0318a7dd3c515f3b83502dfa9e87adb8)
2501  `lodash.isarguments@3.0.7`
2502  ([@jdalton](https://github.com/jdalton))
2503* [`bcccd90`](https://github.com/npm/npm/commit/bcccd9057b75d800c799ab15f00924f700415d3e)
2504  `lodash.clonedeep@4.3.0`
2505  ([@jdalton](https://github.com/jdalton))
2506* [`8165bca`](https://github.com/npm/npm/commit/8165bca537d86305a3d08f080f86223a26615aa8)
2507  `lodash._baseuniq@4.4.0`
2508  ([@jdalton](https://github.com/jdalton))
2509
2510### v3.7.3 (2016-02-11):
2511
2512Hey all! We've got a pretty small release this week -- just documentation
2513updates and a couple of dependencies. This release also includes a particular
2514dependency upgrade that makes it so we're exclusively using the latest version
2515of `graceful-fs`, which'll make it so things keep working with future Node.js
2516releases.
2517
2518A certain internal Node.js API was deprecated and slated for future removal from
2519Node Core. This API was critical for versions of `graceful-fs@<4`, before a
2520different approach was used to achieve similar ends. By upgrading this library,
2521and making sure all our dependencies are also updated, we've ensured npm will
2522continue to work once the API is finally removed. Older versions of npm, on the
2523other hand, will simply not work on future versions of Node.js.
2524
2525#### DEPENDENCY UPGRADES
2526
2527* [`29536f4`](https://github.com/npm/npm/commit/29536f42da6c06091c9acbc8952f72daa8a9412c)
2528  `cmd-shim@2.0.2`:
2529  Final straggler using `graceful-fs@<4`.
2530  ([@ForbesLindesay](https://github.com/ForbesLindesay))
2531* [`5f59e74`](https://github.com/npm/npm/commit/5f59e748ef4c066756bb204a452cecd0543c7a2f)
2532  `lodash.uniq@4.1.0`
2533  ([@jdalton](https://github.com/jdalton))
2534* [`987cabe`](https://github.com/npm/npm/commit/987cabe8a18abcb5a685685958bf74c7258a979c)
2535  `lodash.union@4.1.0`
2536  ([@jdalton](https://github.com/jdalton))
2537* [`5c641f0`](https://github.com/npm/npm/commit/5c641f05fdc153c6bb06a89c46fe2a345ce413db)
2538  `lodash.clonedeep@4.1.0`
2539  ([@jdalton](https://github.com/jdalton))
2540
2541#### EVERYONE GETTING SOCKS LIKE IT'S OPRAH'S SHOW
2542
2543* [`9ea5658`](https://github.com/npm/npm/commit/9ea56582ca4d0991dbed44f992c88f08a643cb4b)
2544  [#11410](https://github.com/npm/npm/pull/11410)
2545  Fixed a small spelling error in `npm-config.md`.
2546  ([@pra85](https://github.com/pra85))
2547* [`2a11e56`](https://github.com/npm/npm/commit/2a11e562a14bce18b6ddca6c20d17f97b6a8ec2f)
2548  [#11403](https://github.com/npm/npm/pull/11403)
2549  Removes `--depth Infinity` warning from documentation -- this operation should
2550  actually be totally safe as of `npm@3`. (The warning remains for `npm@2`.)
2551  ([@Aourin](https://github.com/Aourin))
2552* [`42a4727`](https://github.com/npm/npm/commit/42a4727bfb1e21c890b8e2babda55e06ac2bda29)
2553  [#11391](https://github.com/npm/npm/pull/11391)
2554  Fixed versions of `shrinkwrap.json` in examples in documentation for `npm
2555  shrinkwrap`, which did not quite match up.
2556  ([@xcatliu](https://github.com/xcatliu))
2557
2558### v3.7.2 (2016-02-04):
2559
2560This week, the CLI team has been busy working on rewriting tests to support
2561getting coverage reports going and running all of our tests on Windows.
2562Meanwhile, we've got a bunch of dependency updates and one or two other
2563things.
2564
2565#### TESTS WENT INTO HIDING
2566
2567Last week we took a patch from [@substack](https://github.com/substack) to
2568stop the installer from reordering arrays in an installed module's
2569`package.json`...  but somehow I dropped the test when I was rebasing.
2570
2571* [`21b9271`](https://github.com/npm/npm/commit/21b927182514a0ff6d9f34480bfc39f72e3e9f8c)
2572  [#10063](https://github.com/npm/npm/issues/10063)
2573  Restore test that verifies that we don't re-order arrays in a module's
2574  `package.json` on install.
2575  ([@substack](https://github.com/substack))
2576
2577#### DOCUMENTATION FIXES
2578
2579* [`c67521d`](https://github.com/npm/npm/commit/c67521dc6c1e41d39d02c74105e41442851d23bb)
2580  [#11348](https://github.com/npm/npm/pull/11348)
2581  Improve the documentation around which files are ALWAYS included in published packages
2582  and which are ALWAYS excluded.
2583  ([@jscissr](https://github.com/jscissr))
2584* [`7ef6793`](https://github.com/npm/npm/commit/7ef6793cd191cc8d88340f7e1ce9c9e3d6f0b2f4)
2585  [#11348](https://github.com/npm/npm/pull/11348)
2586  The release date on the 3.7.0 changelog entry was wrong.  I honestly don't
2587  know how I keep doing this. =D
2588  ([@rafek](https://github.com/rafek))
2589
2590#### DEPENDENCY UPDATES
2591
2592* [`8a3c80c`](https://github.com/npm/npm/commit/8a3c80c4fd3d82fe937f30bc7cbd3dee51a8a893)
2593  `graceful-fs@4.1.3`:
2594  Fix a bug where close wasn't getting made graceful.
2595  ([@isaacs](https://github.com/isaacs))
2596
2597`lodash` saw updates across most of its modules this week with browser
2598campatibility fixes that don't really impact us.
2599
2600* [`2df342b`](https://github.com/npm/npm/commit/2df342bf30efa99b98016acc8a5dc03e00b58b9c)
2601  `lodash.without@4.0.2`
2602  ([@jdalton](https://github.com/jdalton))
2603* [`86aa91d`](https://github.com/npm/npm/commit/86aa91dce60f6b6a92bb3ba2bf6e6be1f6afc750)
2604  `lodash.uniq@4.0.2`
2605  ([@jdalton](https://github.com/jdalton))
2606* [`0a94bf6`](https://github.com/npm/npm/commit/0a94bf6af0ebd38d080f92257e0cd9bae40b31ff)
2607  `lodash.union@4.0.2`
2608  ([@jdalton](https://github.com/jdalton))
2609* [`b4c9582`](https://github.com/npm/npm/commit/b4c9582b4ef5991f3d155e0c6142ed1c631860af)
2610  `lodash.isarguments@3.0.6`
2611  ([@jdalton](https://github.com/jdalton))
2612* [`efe766c`](https://github.com/npm/npm/commit/efe766c63c0948a4ae4c0d12f2b834629ab86e92)
2613  `lodash.keys@4.0.2`: Minor code cleanup and the above.
2614  ([@jdalton](https://github.com/jdalton))
2615* [`36abb24`](https://github.com/npm/npm/commit/36abb24ef31017adbf325e7f833d5d4b0f03f5d4)
2616  `lodash.clonedeep@4.0.4`:
2617  Add support for cloning prototype objects and the above.
2618  ([@jdalton](https://github.com/jdalton))
2619
2620### v3.7.1 (2016-02-01):
2621
2622Super quick Monday patch on last week's release.
2623
2624If you ever wondered why we release things to the `npm@next` tag for a week
2625before promoting them to `npm@latest`, this is it!
2626
2627#### RELEASE TRAIN VINDICATED (again)
2628
2629* [`adcaf04`](adcaf047811dcc475ab1984fc93fe34540fc03d7)
2630  [#11349](https://github.com/npm/npm/issues/11349)
2631  Revert last weeks change to use JSON clone instead of `lodash.cloneDeep`.
2632  ([@iarna](https://github.com/iarna))
2633
2634### v3.7.0 (2016-01-29):
2635
2636Hi all! This week brings us some important performance improvements,
2637support for git submodules(!) and a bunch of bug fixes.
2638
2639#### PERFORMANCE
2640
2641`gauge`, the module responsible for drawing `npm`'s progress bars, had an
2642embarrassing bug in its debounce implementation that resulted in it, on many
2643systems, actually being _slower_ than if it hadn't been debouncing. This was
2644due to it destroying and then creating a timer object any time it got an
2645update while waiting on its minimum update period to elapse. This only was
2646a measurable slowdown when sending thousands of updates a second, but
2647unfortunately parts of `npm`'s logging do exactly that. This has been patched
2648to eliminate that churn, and our testing shows the progress bar as being
2649eliminated as a source of slow down.
2650
2651Meanwhile, `are-we-there-yet` is the module that tracks just how complete
2652our big asynchronous install process is. [@STRML](https://github.com/STRML)
2653spent some time auditing its source and made a few smaller performance
2654improvements to it. Most impactful was eliminating a bizarre bit of code
2655that was both binding to AND closing over the current object. I don't have
2656any explanation for how that crept in. =D
2657
2658* [`c680fa9`](https://github.com/npm/npm/commit/c680fa9f8135759eb5512f4b86e47fa265733f79)
2659  `npmlog@2.0.2`: New `are-we-there-yet` with performance patches from
2660  [@STRML](https://github.com/STRML). New `gauge` with timer churn
2661  performance patch.
2662  ([@iarna](https://github.com/iarna))
2663
2664We were also using `lodash`'s `cloneDeep` on `package.json` data which is
2665definitely overkill, seeing as `package.json` data has all the restrictions
2666of being `json`. The fix for this is just swapping that out for something
2667that does a pair of `JSON.stringify`/`JSON.parse`, which is distinctly more
2668speedy.
2669
2670* [`1d1ea7e`](https://github.com/npm/npm/commit/1d1ea7eeb958034878eb6573149aeecc686888d3)
2671  [#11306](https://github.com/npm/npm/pull/11306)
2672  Use JSON clone instead of `lodash.cloneDeep`.
2673  ([@STRML](https://github.com/STRML))
2674
2675#### NEW FEATURE: GIT SUBMODULE SUPPORT
2676
2677Long, long requested– the referenced issue is from 2011– we're finally
2678getting rudimentary git submodule support.
2679
2680* [`39dea9c`](https://github.com/npm/npm/commit/39dea9ca4216c6ea628f5ca47d2b34a4b251a1ed)
2681  [#1876](https://github.com/npm/npm/issues/1876)
2682  Add support for git submodules in git remotes. This is a fairly simple
2683  approach, which does not leverage the git caching mechanism to cache
2684  submodules. It also doesn't provide a means to disable automatic
2685  initialization, e.g. via a setting in the `.gitmodules` file.
2686  ([@gagern](https://github.com/gagern))
2687
2688#### ROBUSTNESS
2689
2690* [`5dec02a`](https://github.com/npm/npm/commit/5dec02a3d0e82202c021e27aff9d006283fdc25a)
2691  [#10347](https://github.com/npm/npm/issues/10347)
2692  There is an obscure feature that lets you monkey-patch npm when it starts
2693  up. If the module being required with this feature failed, it would
2694  previously just make `npm` error out– this reduces that to a warning.
2695  ([@evanlucas](https://github.com/evanlucas))
2696
2697#### BUG FIXES
2698
2699* [`9ab8b8d`](https://github.com/npm/npm/commit/9ab8b8d047792612ae7f9a6079745d51d5283a53)
2700  [#10820](https://github.com/npm/npm/issues/10820)
2701  Fix a bug with `npm ls` where if you asked for ONLY production dependencies in output
2702  it would exclude dependencies that were BOTH production AND development dependencies.
2703  ([@davidvgalbraith](https://github.com/davidvgalbraith))
2704* [`6803fed`](https://github.com/npm/npm/commit/6803fedadb8f9b36cd85f7338ecf75d1d183c833)
2705  [#8982](https://github.com/npm/npm/issues/8982)
2706  Fix a bug where, under some circumstances, if you had a path that
2707  contained the name of a package being installed somewhere in it, `npm`
2708  would incorrectly refuse to run lifecycle scripts.
2709  ([@elvanja](https://github.com/elvanja))
2710* [`3eae40b`](https://github.com/npm/npm/commit/3eae40b7a681aa067dfe4fea8c9a76da5b508b48)
2711  [#9253](https://github.com/npm/npm/issues/9253)
2712  Fix a bug where, when running lifecycle scripts, if the Node.js binary you ran
2713  `npm` with wasn't in your `PATH`, `npm` wouldn't use it to run your scripts.
2714  ([@segrey](https://github.com/segrey))
2715* [`61daa6a`](https://github.com/npm/npm/commit/61daa6ae8cbc041d3a0d8a6f8f268b47dd8176eb)
2716  [#11014](https://github.com/npm/npm/issues/11014)
2717  Fix a bug where running `rimraf node_modules/<package>` followed by `npm
2718  rm --save <package>` would fail. `npm` now correctly removes the module
2719  from your `package.json` even though it doesn't exist on disk.
2720  ([@davidvgalbraith](https://github.com/davidvgalbraith))
2721* [`a605586`](https://github.com/npm/npm/commit/a605586df134ee97c95f89c4b4bd6bc73f7aa439)
2722  [#9679](https://github.com/npm/npm/issues/9679)
2723  Fix a bug where `npm install --save git+https://…` would save a `https://`
2724  url to your `package.json` which was a problem because `npm` wouldn't then
2725  know that it was a git repo.
2726  ([@gagern](https://github.com/gagern))
2727* [`bbdc700`](https://github.com/npm/npm/commit/bbdc70024467c365cc4e06b8410947c04b6f145b)
2728  [#10063](https://github.com/npm/npm/issues/10063)
2729  Fix a bug where `npm` would change the order of array properties in the
2730  `package.json` files of dependencies.  `npm` adds a bunch of stuff to
2731  `package.json` files in your `node_modules` folder for debugging and
2732  bookkeeping purposes.  As a part of this process it sorts the object to
2733  reduce file churn when it does updates.  This fixes a bug where the arrays
2734  in the object were also getting sorted.  This wasn't a problem for
2735  properties that `npm` itself maintains, but _is_ a problem for properties
2736  used by other packages.
2737  ([@substack](https://github.com/substack))
2738
2739#### DOCS IMPROVEMENTS
2740
2741* [`2609a29`](https://github.com/npm/npm/commit/2609a2950704f577ac888668e81ba514568fab44)
2742  [#11273](https://github.com/npm/npm/pull/11273)
2743  Include an example of viewing package version history in the `npm view` documentation.
2744  ([@vedatmahir](https://github.com/vedatmahir))
2745* [`719ea9c`](https://github.com/npm/npm/commit/719ea9c45a5c3233f3afde043b89824aad2df0a7)
2746  [#11272](https://github.com/npm/npm/pull/11272)
2747  Fix typographical issue in `npm update` documentation.
2748  ([@jonathanp](https://github.com/jonathanp))
2749* [`cb9df5a`](https://github.com/npm/npm/commit/cb9df5a37091e06071d8704b629e7ebaa41c37fe)
2750  [#11215](https://github.com/npm/npm/pull/11215)
2751  Do not call `SEE LICENSE IN <filename>` an _SPDX expression_, as it's not.
2752  ([@kemitchell](https://github.com/kemitchell))
2753* [`f427934`](https://github.com/npm/npm/commit/f4279346c368da4bca09385f773e8eed1d389e5e)
2754  [#11196](https://github.com/npm/npm/pull/11196)
2755  Correct the `package.json` examples in the `npm update` documentation to actually be
2756  valid JSON and not just JavaScript object literals.
2757  ([@s100](https://github.com/s100))
2758
2759#### DEPENDENCY UPDATES
2760
2761* [`a7b2407`](https://github.com/npm/npm/commit/a7b24074cb59a1ab17c0d8eff1498047e6a123e5)
2762  `retry@0.9.0`: New features and interface agnostic refactoring.
2763  ([@tim-kos](https://github.com/tim-kos))
2764* [`220fc77`](https://github.com/npm/npm/commit/220fc7702ae3e5d601dfefd3e95c14e9b32327de)
2765  `request@2.69.0`:
2766  A bunch of small bug fixes and module updates.
2767  ([@simov](https://github.com/simov))
2768* [`9e5c84f`](https://github.com/npm/npm/commit/9e5c84f1903748897e54f8ff099729ff744eab0f)
2769  `which@1.2.4`:
2770  Update `isexe` and fix bug in `pathExt`, in which files without extensions
2771  would sometimes be preferred to files with extensions on Windows, even though
2772  those without extensions aren't executable.
2773  `pathExt` is a list of extensions that are considered executable (exe, cmd,
2774  bat, com on Windows).
2775  ([@isaacs](https://github.com/isaacs))
2776* [`375b9c4`](https://github.com/npm/npm/commit/375b9c42fe0c6de47ac2f92527354b2ea79b7968)
2777  `rimraf@2.5.1`: Minor doc formatting fixes.
2778  ([@isaacs](https://github.com/isaacs))
2779* [`ef1971e`](https://github.com/npm/npm/commit/ef1971e6270c2bc72e6392b51a8b84f52708f7e7)
2780  `lodash.clonedeep@4.0.2`:
2781  Misc minor code cleanup. No functional changes.
2782  ([@jdalton](https://github.com/jdalton))
2783
2784### v3.6.0 (2016-01-20):
2785
2786Hi all!  This is a bigger release, in part 'cause we didn't have one last
2787week. The most important thing you need to know is that when `npm@3.6.0` replaces
2788`npm@3.5.4` as `next`, `npm@3.5.4` WILL NOT be moved on to `latest`. This is due to
2789a packaging error that tickles bugs in some earlier releases and makes upgrades to it
2790from those versions break the install.
2791
2792#### NEW FEATURES‼
2793
2794* [`ff504d4`](https://github.com/npm/npm/commit/ff504d449ea1fa996cbb02c8078964643c51e5f6)
2795  [#8752](https://github.com/npm/npm/issues/8752)
2796  In `npm outdated`, report symlinked packages as having a wanted & latest
2797  version of `linked`.
2798  ([@halhenke](https://github.com/halhenke))
2799* [`f44d8c9`](https://github.com/npm/npm/commit/f44d8c9a3940f7041f8136f8754a54b13f1f9d60)
2800  [#10775](https://github.com/npm/npm/issues/10775)
2801  Add a success message to `adduser` / `login`.
2802  ([@ekmartin](https://github.com/ekmartin))
2803* [`3109303`](https://github.com/npm/npm/commit/310930395c9bf1577cf085b9742210bfc71bb019)
2804  [#10043](https://github.com/npm/npm/pull/10043)
2805  Warn if you try to use `npm run x` if you don't have a `node_modules` folder, since
2806  whatever you're trying to do _probably_ won't work.
2807  ([@timkrins](https://github.com/timkrins))
2808
2809* [`9ed2849`](https://github.com/npm/npm/commit/9ed2849cd7e8cc97111dca42a940905284afe55d)
2810  [`e9f1ad8`](https://github.com/npm/npm/commit/e9f1ad88ce58ecd111811e11afa52ac19fc8696e)
2811  [`f10d300`](https://github.com/npm/npm/commit/f10d300e5effa7a5756c8d461eef284c283a41d1)
2812  [`8b593d8`](https://github.com/npm/npm/commit/8b593d8d187d6ac85d2a59cbe647afb5516c1b94)
2813  [#10717](https://github.com/npm/npm/pull/10717)
2814  `npm version` can now take a `from-git` argument, which instructs `npm` to read the
2815  version from git and update your `package.json` to what it finds. This is in contrast
2816  to its normal use where `npm` _tells_ git about your new version.
2817  ([@ekmartin](https://github.com/ekmartin))
2818
2819#### 3.5.4 WAS NOT SO GREAT
2820
2821The `npm@3.5.4` package was missing some dependencies.  Specifically, `glob`
2822and `has-unicode` had major release updates which meant that subdeps that
2823relied on older major versions couldn't use the npm supplied versions any
2824more, and so they needed their own copies.
2825
2826This went undetected because the actions necessary to run the tests (which
2827check for this sort of thing) resolved the missing modules.
2828
2829Further, it didn't have symptoms when upgrading from _most_ versions of npm.
2830Unfortunately, some versions had bugs that were tickled by this and resulted
2831in broken upgrades, most notably, `npm@3.3.12`, the version that's been in
2832Node.js 5.
2833
2834* [`1d3325c`](https://github.com/npm/npm/commit/1d3325c040621a4792db80fb232f4994b9d5c5f2)
2835  [`02611c6`](https://github.com/npm/npm/commit/02611c673a4d2bbe8fcef8d48407768da31c90d2)
2836  [`39d5fea`](https://github.com/npm/npm/commit/39d5feadefdde38d75a18f23343bc6ec37153638)
2837  [`7d0e830`](https://github.com/npm/npm/commit/7d0e830f26c73b9d9277b29949227ba9cca27fd9)
2838  [#11129](https://github.com/npm/npm/pull/11129)
2839  Update the underlying dependencies to allow use for the new versions of
2840  `glob` and `has-unicode`.
2841  ([@iarna](https://github.com/iarna))
2842
2843#### WHEN MISSING PATHS ARE OK
2844
2845* [`bb638fa`](https://github.com/npm/npm/commit/bb638fa4f48d24d2c9935861d5d751c5621eea49)
2846  [#11212](https://github.com/npm/npm/pull/11212)
2847  When trying to determine if a file was controlled by npm before going to
2848  remove it, we check to see if it is inside any of a list of paths that npm
2849  considers to be under its control.  Not all of those paths always exist
2850  (and that's ok!) Previously we were calling it a failure to match if ANY
2851  of them didn't exist.  We now only do so if NONE of them exist.  If some
2852  do, then we do our usual checks on them.
2853
2854  This showed up as an error where you would see something like:
2855  ```
2856  npm warn gentlyRm not removing /path/to/thing as it wasn't installed by /path/to/other/thing
2857  ```
2858  But it totally was installed by it.
2859  ([@iarna](https://github.com/iarna))
2860
2861#### BETTER NODE PRE-RELEASE SUPPORT
2862
2863Historically, if you used a pre-release version of Node.js, you would get
2864dozens and dozens of warnings when EVERY engine check failed across all of
2865your modules, because `>= 0.10.0` doesn't match prereleases.
2866
2867You might find this stream of redundant warnings undesirable. I do.
2868
2869We've moved this into a SINGLE warning you'll get about using a pre-release
2870version of Node.js and now suppress those other warnings.
2871
2872* [`6952f79`](https://github.com/npm/npm/commit/6952f7981e451a2d599a4f513573af208bdfe103)
2873  [#11212](https://github.com/npm/npm/pull/11212)
2874  Engine check warnings are now issued along with any other warnings about
2875  your tree, instead of emitting in the middle of your install (and then
2876  disappearing behind the giant tree of stuff installed).
2877  ([@iarna](https://github.com/iarna))
2878* [`ee2ebe9`](https://github.com/npm/npm/commit/ee2ebe96fb3d105787835b72085bbd2eee66a629)
2879  [#11212](https://github.com/npm/npm/pull/11212)
2880  Suppress engine verification warnings about pre-release versions of Node.js.
2881  ([@iarna](https://github.com/iarna))
2882* [`135b7e0`](https://github.com/npm/npm/commit/135b7e078311e8b4e2c8e2b662eed9ba6c2e2537)
2883  [#11212](https://github.com/npm/npm/pull/11212)
2884  Explicitly warn, in only one place, if you are using a pre-release version
2885  of Node.js.
2886  ([@iarna](https://github.com/iarna))
2887
2888#### BUG FIXES
2889
2890* [`ea331c8`](https://github.com/npm/npm/commit/ea331c82157c65f7643cd4b49fd24031c84bf601)
2891  [#10938](https://github.com/npm/npm/issues/10938)
2892  When removing a package, sometimes the `node_modules/.bin` wouldn't be
2893  cleaned up entirely.  This would result in package folders that contained
2894  only a `node_modules/.bin` directory.  In turn, this would result in `npm
2895  ls` and other tools complaining about these broken directories.
2896  To fix this, the `unbuild` step now explicitly deletes the
2897  `node_modules/.bin` folder as its final step.
2898  ([@chrisirhc](https://github.com/chrisirhc))
2899* [`00720db`](https://github.com/npm/npm/commit/00720db2c326cf8f968c662444a4575ae8c3020a)
2900  [#11158](https://github.com/npm/npm/pull/11158)
2901  On Windows, the `node-gyp` wrapper would fail if your path to `node-gyp`
2902  contained spaces. This fixes that problem by quoting use of that path.
2903  ([@orangemocha](https://github.com/orangemocha))
2904* [`69ac933`](https://github.com/npm/npm/commit/69ac9333506752bf2e5af70b3b3e03c6181de3e7)
2905  [#11142](https://github.com/npm/npm/pull/11142)
2906  Fix a race condition when making directories in the cache, which could
2907  lead to `ENOENT` failures.
2908  ([@Jimbly](https://github.com/Jimbly))
2909* [`e982858`](https://github.com/npm/npm/commit/e982858d9bed65cede9cbb12df9216a4bb9e6fc9)
2910  [#9696](https://github.com/npm/npm/issues/9696)
2911  When replacing the `package.json` in the cache you sometimes see `EPERM` errors on
2912  Windows that you wouldn't on Unix-like operating systems. This ignores those errors
2913  and allows Windows to continue. Longer term, we'll be adding something to retry
2914  these errors, but ultimately fail if there really is an ongoing permissions issue.
2915  ([@orangemocha](https://github.com/orangemocha))
2916
2917#### DOC CHANGES
2918
2919* [`3666081`](https://github.com/npm/npm/commit/3666081abd02184ba97a7cdb6ae238085d640b4b)
2920  [#11188](https://github.com/npm/npm/pull/11188)
2921  Add brief description to publish documentation of what's included in
2922  published tarballs.
2923  ([@beaugunderson](https://github.com/beaugunderson))
2924* [`b463e34`](https://github.com/npm/npm/commit/b463e3424b296cfc4bd384fc8bfe0e2329649164)
2925  [#11150](https://github.com/npm/npm/pull/11150)
2926  In npm update docs, advise use of `--depth Infinity` instead of `--depth
2927  9999`.
2928  ([@halhenke](https://github.com/halhenke))
2929* [`382e71a`](https://github.com/npm/npm/commit/382e71a7ee5d1ca3dba55c1e753d529eb8ae6895)
2930  [#11128](https://github.com/npm/npm/pull/11128)
2931  In the `package.json` docs, make the reference to the "Local Paths" section
2932  a link to it as well.
2933  ([@orangejulius](https://github.com/orangejulius))
2934* [`5277e7f`](https://github.com/npm/npm/commit/5277e7f236e8cb40d7f4a1054506f2d3d159716e)
2935  [#11090](https://github.com/npm/npm/pull/11090)
2936  Fix the 3.5.4 release date in CHANGELOG.md.
2937  ([@ashleygwilliams](https://github.com/ashleygwilliams))
2938* [`e6d238a`](https://github.com/npm/npm/commit/e6d238a3d90beeb0af23fa75a9b5e50671d6e4c5)
2939  [#11130](https://github.com/npm/npm/pull/11130)
2940  Eliminate the "using npm programmatically" section from the README. The
2941  documentation for this was removed a while ago and is unsupported.
2942  ([@ljharb](https://github.com/ljharb))
2943
2944#### DEPENDENCY UPDATES
2945
2946* [`b0dde5c`](https://github.com/npm/npm/commit/b0dde5c3407b58d78969d3da01af2629fcba1c73)
2947  `config-chain@1.1.10`: Update tests for most recent version of `ini`.
2948  ([@dominictarr](https://github.com/dominictarr))
2949* [`c62f414`](https://github.com/npm/npm/commit/c62f414534971761a48ce3cbc3e25214fb09e494)
2950  `glob@6.0.4`: Eliminated use of `util._extend`.
2951  ([@isaacs](https://github.com/isaacs))
2952* [`98a6779`](https://github.com/npm/npm/commit/98a67797978ed7ce534e16b705d3a2a9ca0e6cc1)
2953  `lodash.clonedeep@4.0.1`: Bug fixes, including the non-linear performance
2954  that was biting npm a while back.
2955  ([@jdalton](https://github.com/jdalton))
2956* [`0e8c4ce`](https://github.com/npm/npm/commit/0e8c4cebddaefbf5eca0abaad512db266c6722c9)
2957  `lodash.without@4.0.1`
2958  ([@jdalton](https://github.com/jdalton))
2959* [`1fd19f5`](https://github.com/npm/npm/commit/1fd19f57a3551d7d30a6b8a9ce967ef50e0ff0ba)
2960  `lodash.uniq@4.0.1`
2961  ([@jdalton](https://github.com/jdalton))
2962* [`b7486c5`](https://github.com/npm/npm/commit/b7486c550f3391f733d1e1907652be95fddf4368)
2963  `lodash.union@4.0.1`
2964  ([@jdalton](https://github.com/jdalton))
2965* [`54bb591`](https://github.com/npm/npm/commit/54bb5911e18f8fb86eb94159f34b13f0c0aa2e30)
2966  `lodash.keys@4.0.0`
2967  ([@jdalton](https://github.com/jdalton))
2968* [`26f7a7a`](https://github.com/npm/npm/commit/26f7a7aaae0575a85deba2241ee69b433dd1ba98)
2969  `lodash.isarray@4.0.0`
2970  ([@jdalton](https://github.com/jdalton))
2971* [`ed38bd3`](https://github.com/npm/npm/commit/ed38bd3baf544dfc0630fd321d279f137700bd4d)
2972  `lodash.isarguments@3.0.5`
2973  ([@jdalton](https://github.com/jdalton))
2974
2975### v3.5.4 (2016-01-07):
2976
2977I hope you all had fantastic winter holidays, if it's winter where you are
2978and if there are holidays‼ We went a few weeks without releases because
2979staff was taking time away from work here and there.  A new year has come
2980and we're back now, and refreshed and ready to dig in!
2981
2982This week brings us a bunch of documentation improvements and some module
2983updates.  The core team's focus continues to be on improving tests,
2984particularly with Windows, so there's not too much to call out here.
2985
2986#### DOCUMENTATION IMPROVEMENTS
2987
2988* [`6b0031e`](https://github.com/npm/npm/commit/6b0031e28c0b10fb2622fdadde41f5cd294348e8)
2989  [#11044](https://github.com/npm/npm/pull/11044)
2990  Correct documentation regarding the defaults for the `color` config option.
2991  ([@scottaddie](https://github.com/scottaddie))
2992* [`c6ce69e`](https://github.com/npm/npm/commit/c6ce69eaed7f17b5f1876ac13ecfae3d14a72f24)
2993  [#10990](https://github.com/npm/npm/pull/10990)
2994  Drop mentions in documentation of `process.installPrefix`, as it hasn't
2995  been a thing since Node.js 0.6 and we don't support that.
2996  ([@jeffmcmahan](https://github.com/jeffmcmahan))
2997* [`dee92d1`](https://github.com/npm/npm/commit/dee92d1f78608a10becf57aae86d5d495f2272bd)
2998  [#11037](https://github.com/npm/npm/pull/11037)
2999  Clarify the documentation on the max length of the `name` property in
3000  `package.json` files.
3001  ([@scottaddie](https://github.com/scottaddie))
3002* [`4b9d7bb`](https://github.com/npm/npm/commit/4b9d7bb1a4fc3f1edcf563379abfd2273af10881)
3003  [#10787](https://github.com/npm/npm/pull/10787)
3004  Make the formatting in the documentation for `npm dist-tag` more
3005  consistent with other docs.
3006  ([@cvrebert](https://github.com/cvrebert))
3007* [`7f77a80`](https://github.com/npm/npm/commit/7f77a80d561ee4b2b8c0aba1226fe89dfe339bcd)
3008  [#10787](https://github.com/npm/npm/pull/10787)
3009  Add documentation to the `npm dist-tag` docs that explains in greater
3010  detail how `latest` is different than other tags.  Further, improve the
3011  documentation with better examples.  Add a discussion of common practice
3012  for using dist tags to manage alpha's and beta's.
3013  ([@cvrebert](https://github.com/cvrebert))
3014* [`6db58dd`](https://github.com/npm/npm/commit/6db58dd0d7719c4675a239d43164edc066842b14)
3015  [`2ee6371`](https://github.com/npm/npm/commit/2ee6371911bd3a4d566c5d7bc8734facc60cb27c)
3016  [#10788](https://github.com/npm/npm/pull/10788)
3017  [#10789](https://github.com/npm/npm/pull/10789)
3018  Improve documentation cross referencing.
3019  ([@cvrebert](https://github.com/cvrebert))
3020* [`7ba629a`](https://github.com/npm/npm/commit/7ba629a2ad3eaf736529e053b533cabe3a0d7123)
3021  [#10790](https://github.com/npm/npm/pull/10790)
3022  Document more clearly that `npm install foo` means `npm install
3023  foo@latest`.
3024  ([@cvrebert](https://github.com/cvrebert))
3025
3026#### A FEW MODULE UPDATES
3027
3028* [`fc2e8d5`](https://github.com/npm/npm/commit/fc2e8d58a91728cb06936eea686efaa4fdec3f06)
3029  `glob@6.0.3`: Remove deprecated features and fix a bunch of bugs.
3030  ([@isaacs](https://github.com/isaacs))
3031* [`5b820c4`](https://github.com/npm/npm/commit/5b820c4e17c907fa8c23771c0cd8e74dd5fdaa51)
3032  `has-unicode@2.0.0`: Change the default on Windows to be false, as
3033  international Windows installs often install to non-unicode codepages and
3034  there's no way to detect this short of a system call or a call to a
3035  command line program.
3036  ([@iarna](https://github.com/iarna))
3037* [`238fe84`](https://github.com/npm/npm/commit/238fe84ac61297f1d71701d80368afaa40463305)
3038  `which@1.2.1`: Fixed bugs with uid/gid checks and with quoted Windows PATH
3039  parts.
3040  ([@isaacs](https://github.com/isaacs))
3041* [`5e510e1`](https://github.com/npm/npm/commit/5e510e13d022a22d58742b126482d3b38a14cc83)
3042  `rimraf@2.5.0`: Add ability to disable glob support / pass in options.
3043  ([@isaacs](https://github.com/isaacs))
3044* [`7558215`](https://github.com/npm/npm/commit/755821569466b7be0883f4b0573eeb83c24109eb)
3045  `readable-stream@2.0.5`: Minor performance improvements.
3046  ([@calvinmetcalf](https://github.com/calvinmetcalf))
3047* [`64e8499`](https://github.com/npm/npm/commit/64e84992c812a73d590be443c09a6977d0ae9040)
3048  `fs-write-stream-atomic@1.0.8`: Rewrite to use modern streams even on 0.8
3049  plus a bunch of tests.
3050  ([@iarna](https://github.com/iarna))
3051* [`74d92a0`](https://github.com/npm/npm/commit/74d92a08d72ce3603244de4bb3e3706d2b928cef)
3052  `columnify@1.5.4`: Some bug fixes around large inputs.
3053  ([@timoxley](https://github.com/timoxley))
3054
3055#### FIX NPM'S TESTS ON 0.8
3056
3057This doesn't impact you as a user of npm, and ordinarily that means we
3058wouldn't call it out here, but if you've ever wanted to contribute, having
3059that green travis badge makes it a lot easier to do so with confidence!
3060
3061* [`b14cdbb`](https://github.com/npm/npm/commit/b14cdbb6002b04bfbefaff70cc45810c20d5a366)
3062  [#10872](https://github.com/npm/npm/pull/10872)
3063  Rewrite tests using nock to use other alternatives.
3064  ([@zkat](https://github.com/zkat))
3065* [`59ed01a`](https://github.com/npm/npm/commit/59ed01a8ea7960b1467aed52164fc36a03c77770)
3066  [#10872](https://github.com/npm/npm/pull/10872)
3067  Work around Node.js 0.8 http back-pressure bug.
3068
3069  0.8 http streams have a bug, where if they're paused with data in their
3070  buffers when the socket closes, they call `end` before emptying those
3071  buffers, which results in the entire pipeline ending and thus the point
3072  that applied backpressure never being able to trigger a `resume`.
3073
3074  We work around this by piping into a pass through stream that has
3075  unlimited buffering.  The pass through stream is from readable-stream and
3076  is thus a current streams3 implementation that is free of these bugs even
3077  on 0.8.
3078  ([@iarna](https://github.com/iarna))
3079
3080### v3.5.3 (2015-12-10):
3081
3082Did you know that Bob Ross reached the rank of master sergeant in the US Air
3083Force before becoming perhaps the most soothing painter of all time?
3084
3085#### TWO HAPPY LITTLE BUG FIXES
3086
3087* [`71c9590`](https://github.com/npm/npm/commit/71c9590be61b6a7b7fa8b6dc19baa588cda26a27)
3088  [#10505](https://github.com/npm/npm/issues/10505) `npm ls --json --depth=0`
3089  now respects the depth parameter, when it is zero and when it is not zero.
3090  ([@MarkReeder](https://github.com/MarkReeder))
3091* [`954fa67`](https://github.com/npm/npm/commit/954fa67f1ca3739992abd244e217a0aaf8465660)
3092  [#9099](https://github.com/npm/npm/issues/9099) I had always thought you
3093  could run `npm version` from subdirectories in your project, which is great,
3094  because now you can. I guess I was just ahead of my time.
3095  ([@ekmartin](https://github.com/ekmartin))
3096
3097#### NOW PAINT IN SOME NICE DOCS CHANGES
3098
3099* [`b88c37c`](https://github.com/npm/npm/commit/b88c37c1cced40e9e41402cc54a5efc3c33cd13e)
3100  [#10546](https://github.com/npm/npm/issues/10546) Goodbye, FAQ! You were
3101  cheeky and fun until you weren't! Don't worry: npm still loves everyone,
3102  especially you! ([@ashleygwilliams](https://github.com/ashleygwilliams))
3103* [`2d3afe9`](https://github.com/npm/npm/commit/2d3afe9644ba69681a36721e79c45d27def71939)
3104  [#10570](https://github.com/npm/npm/issues/10570) Update documentation URLs
3105  to be HTTPS everywhere sensible. No HTTP shall be spared!
3106  ([@rsp](https://github.com/rsp))
3107* [`6abd0e0`](https://github.com/npm/npm/commit/6abd0e0626d0f642ce0dae0e128ced80433f15a1)
3108  [#10650](https://github.com/npm/npm/issues/10650) Correctly note that there
3109  are two lifecycle scripts run by an install phase in an example, instead of
3110  three. ([@eymengunay](https://github.com/eymengunay))
3111* [`a5e8df5`](https://github.com/npm/npm/commit/a5e8df53b8d6d75398cb6a55a44dcf374b0f1661)
3112  [#10687](https://github.com/npm/npm/issues/10687) `npm outdated`'s output can
3113  be a little puzzling sometimes. I've attempted to make it clearer, with some
3114  examples, of what's going on with "wanted" and "latest" in more cases.
3115  ([@othiym23](https://github.com/othiym23))
3116* [`8f52833`](https://github.com/npm/npm/commit/8f52833f5d15c4f94467234607d40e75198af1aa)
3117  [#10700](https://github.com/npm/npm/issues/10700) Hey, do you remember when
3118  `search.npmjs.org` was a thing? I think I do? The last time I used it was in
3119  like 2012, and it's gone now, so remove it from the docs.
3120  ([@gagern](https://github.com/gagern))
3121* [`b6a53b8`](https://github.com/npm/npm/commit/b6a53b889c948053dcbf6d7aab9ad1cd4226dc32)
3122  [npm/docs#477](https://github.com/npm/docs/issues/477) Continue to airbrush
3123  the CLI API docs out of history. ([@verpixelt](https://github.com/verpixelt))
3124* [`b835b72`](https://github.com/npm/npm/commit/b835b72d1dd23b0a17321a85d8d395322d18005d)
3125  `semver@5.1.0`: Include BNF for SemVer expression grammar (which is also now
3126  included in `npm help semver`). ([@isaacs](https://github.com/isaacs))
3127
3128#### LAND YOUR DEPENDENCY UPGRADES IN PAIRS SO EVERYONE HAS A FRIEND
3129
3130* [`95e99fa`](https://github.com/npm/npm/commit/95e99faadcdc85a16210dd79c0e7d83add1b9f3e)
3131  `request@2.67.0` ([@simov](https://github.com/simov))
3132* [`b49199a`](https://github.com/npm/npm/commit/b49199ac96dfb1afe5719286621a318576dd69ae)
3133  [isaacs/rimraf#89](https://github.com/isaacs/rimraf/pull/89) `rimraf@2.4.4`
3134  ([@zerok](https://github.com/zerok))
3135* [`6632418`](https://github.com/npm/npm/commit/66324189a734a1665e1b78a06ba44089d9c3a11c)
3136  [npm/nopt#51](https://github.com/npm/nopt/pull/51) `nopt@3.0.6`
3137  ([@wbecker](https://github.com/wbecker))
3138* [`f0a3b3e`](https://github.com/npm/npm/commit/f0a3b3e0dbbdaf11ec55dccd59cc21bfa05f9240)
3139  [isaacs/once#7](https://github.com/isaacs/once/pull/7) `once@1.3.3`
3140  ([@floatdrop](https://github.com/floatdrop))
3141
3142### v3.5.2 (2015-12-03):
3143
3144Weeeelcome to another npm release! The short version is that we fixed
3145some `ENOENT` and some modules that resulted in modules going missing. We
3146also eliminated the use of MD5 in our code base to help folks using
3147Node.js in FIPS mode. And we fixed a bad URL in our license file.
3148
3149#### FIX URL IN LICENSE
3150
3151The license incorrectly identified the registry URL as
3152`registry.npmjs.com` and this has been corrected to `registry.npmjs.org`.
3153
3154* [`cb6d81b`](https://github.com/npm/npm/commit/cb6d81bd611f68c6126a90127a9dfe5604d46c8c)
3155  [#10685](https://github.com/npm/npm/pull/10685)
3156  Fix npm public registry URL in notices.
3157  ([@kemitchell](https://github.com/kemitchell))
3158
3159#### ENOENT? MORE LIKE ENOMOREBUGS
3160
3161The headliner this week was uncovered by the fixes to bundled dependency
3162handling over the past few releases. What had been a frustratingly
3163intermittent and hard to reproduce bug became something that happened
3164every time in Travis. This fixes another whole bunch of errors where you
3165would, while running an install have it crash with an `ENOENT` on
3166`rename`, or the install would finish but some modules would be
3167mysteriously missing and you'd have to install a second time.
3168
3169What's going on was a bit involved, so bear with me:
3170
3171`npm@3` generates a list of actions to take against the tree on disk.
3172With the exception of lifecycle scripts, it expects these all to be able
3173to act independently without interfering with each other.
3174
3175This means, for instance, that one should be able to upgrade `b` in
3176`a→b→c` without having npm reinstall `c`.
3177
3178That works fine by the way.
3179
3180But it also means that the move action should be able to move `b` in
3181`a→b→c@1.0.1` to `a→d→b→c@1.0.2` without moving or removing `c@1.0.1` and
3182while leaving `c@1.0.2` in place if it was already installed.
3183
3184That is, the `move` action moves an individual node, replacing itself
3185with an empty spot if it had children. This is not, as it might first
3186appear, something where you move an entire branch to another location on
3187the tree.
3188
3189When moving `b` we already took care to leave `c@1.0.1` in place so that
3190other moves (or removes) could handle it, but we were stomping on the
3191destination and so `c@1.0.2` was being removed.
3192
3193* [`f4385d8`](https://github.com/npm/npm/commit/f4385d8e7678349e75c80fae8a1f8f366f197937)
3194  [#10655](https://github.com/npm/npm/pull/10655)
3195  Preserve destination `node_modules` when moving.
3196  ([@iarna](https://github.com/iarna))
3197
3198There was also a bug with `remove` where it was pruning the entire tree
3199at the remove point, prior to running moves and adds.
3200
3201This was fine most of the time, but if we were moving one of the deps out
3202from inside it, kaboom.
3203
3204* [`19c626d`](https://github.com/npm/npm/commit/19c626d69888f0cdc6e960254b3fdf523ec4b52c)
3205  [#10655](https://github.com/npm/npm/pull/10655)
3206  Get rid of the remove commit phase– we could have it prune _just_ the
3207  module being removed, but that isn't gaining us anything.
3208  ([@iarna](https://github.com/iarna))
3209
3210After all that, we shouldn't be upgrading the `add` of a bundled package
3211to a `move`. Moves save us from having to extract the package, but with a
3212bundled dependency it's included in another package already so that
3213doesn't gain us anything.
3214
3215* [`641a93b`](https://github.com/npm/npm/commit/641a93bd66a6aa4edf2d6167344b50d1a2afb593)
3216  [#10655](https://github.com/npm/npm/pull/10655)
3217  Don't convert adds to moves with bundled deps.
3218  ([@iarna](https://github.com/iarna))
3219
3220While I was in there, I also took some time to improve diagnostics to
3221make this sort of thing easier to track down in the future:
3222
3223* [`a04ec04`](https://github.com/npm/npm/commit/a04ec04804e562b511cd31afe89c8ba94aa37ff2)
3224  [#10655](https://github.com/npm/ npm/pull/10655)
3225  Wrap rename so errors have stack traces.
3226  ([@iarna](https://github.com/iarna))
3227* [`8ea142f`](https://github.com/npm/npm/commit/8ea142f896a2764290ca5472442b27b047ab7a1a)
3228  [#10655](https://github.com/npm/npm/pull/10655)
3229  Add silly logging so function is debuggable
3230  ([@iarna](https://github.com/iarna))
3231
3232#### NO MORE MD5
3233
3234We updated modules that had been using MD5 for non-security purposes.
3235While this is perfectly safe, if you compile Node in FIPS-compliance mode
3236it will explode if you try to use MD5. We've replaced MD5 with Murmur,
3237which conveys our intent better and is faster to boot.
3238
3239* [`f068b26`](https://github.com/npm/npm/commit/f068b2661a8d0269c184867e003cd08cb6c56cf2)
3240  [#10629](https://github.com/npm/npm/issues/10629)
3241  `unique-filename@1.1.0`
3242  ([@iarna](https://github.com/iarna))
3243* [`dba1b24`](https://github.com/npm/npm/commit/dba1b2402aaa2beceec798d3bd22d00650e01069)
3244  [#10629](https://github.com/npm/npm/issues/10629)
3245  `write-file-atomic@1.1.4`
3246  ([@othiym23](https://github.com/othiym23))
3247* [`8347a30`](https://github.com/npm/npm/commit/8347a308ef0d2cf0f58f96bba3635af642ec611f)
3248  [#10629](https://github.com/npm/npm/issues/10629)
3249  `fs-write-stream-atomic@1.0.5`
3250  ([@othiym23](https://github.com/othiym23))
3251
3252#### DEPENDENCY UPDATES
3253
3254* [`9e2a2bb`](https://github.com/npm/npm/commit/9e2a2bb5bc71a0ab3b3637e8eec212aa22d5c99f)
3255  [nodejs/node-gyp#831](https://github.com/nodejs/node-gyp/pull/831)
3256  `node-gyp@3.2.1`:
3257  Improved \*BSD support.
3258  ([@bnoordhuis](https://github.com/bnoordhuis))
3259
3260### v3.5.1 (2015-11-25):
3261
3262#### THE npm CLI !== THE npm REGISTRY !== npm, INC.
3263
3264npm-the-CLI is licensed under the terms of the [Artistic License
32652.0](https://github.com/npm/npm/blob/8d79c1a39dae908f27eaa37ff6b23515d505ef29/LICENSE),
3266which is a liberal open-source license that allows you to take this code and do
3267pretty much whatever you like with it (that is, of course, not legal language,
3268and if you're doing anything with npm that leaves you in doubt about your legal
3269rights, please seek the review of qualified counsel, which is to say, not
3270members of the CLI team, none of whom have passed the bar, to my knowledge). At
3271the same time the primary registry the CLI uses when looking up and downloading
3272packages is a commercial service run by npm, Inc., and it has its own [Terms of
3273Use](https://www.npmjs.com/policies/terms).
3274
3275Aside from clarifying the terms of use (and trying to make sure they're more
3276widely known), the only recent changes to npm's licenses have been making the
3277split between the CLI and registry clearer. You are still free to do whatever
3278you like with the CLI's source, and you are free to view, download, and publish
3279packages to and from `registry.npmjs.org`, but now the existing terms under
3280which you can do so are more clearly documented. Aside from the two commits
3281below, see also [the release notes for
3282`npm@3.4.1`](https://github.com/npm/npm/releases/tag/v3.4.1), which is where
3283the split between the CLI's code and the terms of use for the registry was
3284first made more clear.
3285
3286* [`35a5dd5`](https://github.com/npm/npm/commit/35a5dd5abbfeec4f98a2b4534ec4ef5d16760581)
3287  [#10532](https://github.com/npm/npm/issues/10532) Clarify that
3288  `registry.npmjs.org` is the default, but that you're free to use the npm CLI
3289  with whatever registry you wish. ([@kemitchell](https://github.com/kemitchell))
3290* [`fa6b013`](https://github.com/npm/npm/commit/fa6b0136a0e4a19d8979b2013622e5ff3f0446f8)
3291  [#10532](https://github.com/npm/npm/issues/10532) Having semi-duplicate
3292  release information in `README.md` was confusing and potentially inaccurate,
3293  so remove it. ([@kemitchell](https://github.com/kemitchell))
3294
3295#### EASE UP ON WINDOWS BASH USERS
3296
3297It turns out that a fair number of us use bash on Windows (through MINGW or
3298bundled with Git, plz – Cygwin is still a bridge too far, for both npm and
3299Node.js). [@jakub-g](https://github.com/jakub-g) did us all a favor and relaxed
3300the check for npm completion to support MINGW bash. Thanks, Jakub!
3301
3302* [`09498e4`](https://github.com/npm/npm/commit/09498e45c5c9e683f092ab1372670f81db4762b6)
3303  [#10156](https://github.com/npm/npm/issues/10156) completion: enable on
3304  Windows in git bash ([@jakub-g](https://github.com/jakub-g))
3305
3306#### THE ONGOING SAGA OF BUNDLED DEPENDENCIES
3307
3308`npm@3.5.0` fixed up a serious issue with how `npm@3.4.1` (and potentially
3309`npm@3.4.0` and `npm@3.3.12`) handled the case in which dependencies bundled
3310into a package tarball are handled improperly when one or more of their own
3311dependencies are older than what's latest on the registry. Unfortunately, in
3312fixing that (quite severe) regression (see [`npm@3.5.0`'s release notes' for
3313details](https://github.com/npm/npm/releases/tag/v3.5.0)), we introduced a new
3314(small, and fortunately cosmetic) issue where npm superfluously warns you about
3315bundled dependencies being stale. We have now fixed that, and hope that we
3316haven't introduced any _other_ regressions in the process. :D
3317
3318* [`20824a7`](https://github.com/npm/npm/commit/20824a75bf7639fb0951a588e3c017a370ae6ec2)
3319  [#10501](https://github.com/npm/npm/issues/10501) Only warn about replacing
3320  bundled dependencies when actually doing so. ([@iarna](https://github.com/iarna))
3321
3322#### MAKE NODE-GYP A LITTLE BLUER
3323
3324* [`1d14d88`](https://github.com/npm/npm/commit/1d14d882c3b5af0a7fee46e8e0e343d07e4c38cb)
3325  `node-gyp@3.2.0`: Support AIX, use `which` to find Python, updated to a newer
3326  version of `gyp`, and more! ([@bnoordhuis](https://github.com/bnoordhuis))
3327
3328#### A BOUNTEOUS THANKSGIVING CORNUCOPIA OF DOC TWEAKS
3329
3330These are great! Keep them coming! Sorry for letting them pile up so deep,
3331everybody. Also, a belated Thanksgiving to our Canadian friends, and a happy
3332Thanksgiving to all our friends in the USA.
3333
3334* [`4659f1c`](https://github.com/npm/npm/commit/4659f1c5ad617c46a5e89b48abf0b1c4e6f04307)
3335  [#10244](https://github.com/npm/npm/issues/10244) In `npm@3`, `npm dedupe`
3336  doesn't take any arguments, so update documentation to reflect that.
3337  ([@bengotow](https://github.com/bengotow))
3338* [`625a7ee`](https://github.com/npm/npm/commit/625a7ee6b4391e90cb28a95f20a73fd794e1eebe)
3339  [#10250](https://github.com/npm/npm/issues/10250) Correct order of `org:team`
3340  in `npm team` documentation. ([@louislarry](https://github.com/louislarry))
3341* [`bea7f87`](https://github.com/npm/npm/commit/bea7f87399d784e3a6d3393afcca658a61a40d77)
3342  [#10371](https://github.com/npm/npm/issues/10371) Remove broken / duplicate
3343  link to tag. ([@WickyNilliams](https://github.com/WickyNilliams))
3344* [`0a25e29`](https://github.com/npm/npm/commit/0a25e2956e9ddd4065d6bd929559321afc512fde)
3345  [#10419](https://github.com/npm/npm/issues/10419) Remove references to
3346  nonexistent `npm-rm(1)` documentation. ([@KenanY](https://github.com/KenanY))
3347* [`19b94e1`](https://github.com/npm/npm/commit/19b94e1e6781fe2f98ada0a3f49a1bda25e3e32d)
3348  [#10474](https://github.com/npm/npm/issues/10474) Clarify that install finds
3349  dependencies in `package.json`. ([@sleekweasel](https://github.com/sleekweasel))
3350* [`b25efc8`](https://github.com/npm/npm/commit/b25efc88067c843ffdda86ea0f50f95d136a638e)
3351  [#9948](https://github.com/npm/npm/issues/9948) Encourage users to file an
3352  issue, rather than emailing authors. ([@trodrigues](https://github.com/trodrigues))
3353* [`24f4ced`](https://github.com/npm/npm/commit/24f4cedc83b10061f26362bf2f005ab935e0cbfe)
3354  [#10497](https://github.com/npm/npm/issues/10497) Clarify what a package is
3355  slightly. ([@aredridel](https://github.com/aredridel))
3356* [`e8168d4`](https://github.com/npm/npm/commit/e8168d40caae00b2914ea09dbe4bd1b09ba3dcd5)
3357  [#10539](https://github.com/npm/npm/issues/10539) Remove an extra, spuriously
3358  capitalized letter. ([@alexlukin-softgrad](https://github.com/alexlukin-softgrad))
3359
3360### v3.5.0 (2015-11-19):
3361
3362#### TEEN ORCS AT THE GATES
3363
3364This week heralds the general release of the primary npm registry's [new
3365support for private packages for
3366organizations](http://blog.npmjs.org/post/133542170540/private-packages-for-organizations).
3367For many potential users, it's the missing piece needed to make it easy for you
3368to move your organization's private work onto npm. And now it's here! The
3369functionality to support it has been in place in the CLI for a while now,
3370thanks to [@zkat](https://github.com/zkat)'s hard work.
3371
3372During our final testing before the release, our ace support team member
3373[@snopeks](https://github.com/snopeks) noticed that there had been some drift
3374between the CLI team's implementation and what npm was actually preparing to
3375ship. In the interests of everyone having a smooth experience with this
3376_extremely useful_ new feature, we quickly made a few changes to square up the
3377CLI and the web site experiences.
3378
3379* [`d7fb92d`](https://github.com/npm/npm/commit/d7fb92d1c53ba5196ad6dd2101a06792a4c0412b)
3380  [#9327](https://github.com/npm/npm/issues/9327) `npm access` no longer has
3381  problems when run in a directory that doesn't contain a `package.json`.
3382  ([@othiym23](https://github.com/othiym23))
3383* [`17df3b5`](https://github.com/npm/npm/commit/17df3b5d5dffb2e9c223b9cfa2d5fd78c39492a4)
3384  [npm/npm-registry-client#126](https://github.com/npm/npm-registry-client/issues/126)
3385  `npm-registry-client@7.0.8`: Allow the CLI to grant, revoke, and list
3386  permissions on unscoped (public) packages on the primary registry.
3387  ([@othiym23](https://github.com/othiym23))
3388
3389#### NON-OPTIONAL INSTALLS, DEFINITELY NON-OPTIONAL
3390
3391* [`180263b`](https://github.com/npm/npm/commit/180263b)
3392  [#10465](https://github.com/npm/npm/pull/10465)
3393  When a non-optional dep fails, we check to see if it's only required by
3394  ONLY optional dependencies.  If it is, we make it fail all the deps in
3395  that chain (and roll them back).  If it isn't then we give an error.
3396
3397  We do this by walking up through all of our ancestors until we either hit an
3398  optional dependency or the top of the tree. If we hit the top, we know to
3399  give the error.
3400
3401  If you installed a module by hand but didn't `--save` it, your module
3402  won't have the top of the tree as an anscestor and so this code was
3403  failing to abort the install with an error
3404
3405  This updates the logic so that hitting the top OR a module that was
3406  requested by the user will trigger the error message.
3407  ([@iarna](https://github.com/iarna))
3408
3409* [`b726a0e`](https://github.com/npm/npm/commit/b726a0e)
3410  [#9204](https://github.com/npm/npm/issues/9204)
3411  Ideally we would like warnings about your install to come AFTER the
3412  output from your compile steps or the giant tree of installed modules.
3413
3414  To that end, we've moved warnings about failed optional deps to the show
3415  after your install completes.
3416  ([@iarna](https://github.com/iarna))
3417
3418#### OVERRIDING BUNDLING
3419
3420* [`aed71fb`](https://github.com/npm/npm/commit/aed71fb)
3421  [#10482](https://github.com/npm/npm/issues/10482)
3422  We've been in our bundled modules code a lot lately, and our last go at
3423  this introduced a new bug, where if you had a module `a` that bundled
3424  a module `b`, which in turn required `c`, and the version of `c` that
3425  got bundled wasn't compatible with `b`'s `package.json`, we would then
3426  install a compatible version of `c`, but also erase `b` at the same time.
3427
3428  This fixes that. It also reworks our bundled module support to be much
3429  closer to being in line with how we handle non-bundled modules and we're
3430  hopeful this will reduce any future errors around them. The new structure
3431  is hopefully much easier to reason about anyway.
3432  ([@iarna](https://github.com/iarna))
3433
3434#### A BRIEF NOTE ON NPM'S BACKWARDS COMPATIBILITY
3435
3436We don't often have much to say about the changes we make to our internal
3437testing and tooling, but I'm going to take this opportunity to reiterate that
3438npm tries hard to maintain compatibility with a wide variety of Node versions.
3439As this change shows, we want to ensure that npm works the same across:
3440
3441* Node.js 0.8
3442* Node.js 0.10
3443* Node.js 0.12
3444* the latest io.js release
3445* Node.js 4 LTS
3446* Node.js 5
3447
3448Contributors who send us pull requests often notice that it's very rare that
3449our tests pass across all of those versions (ironically, almost entirely due to
3450the packages we use for testing instead of any issues within npm itself). We're
3451currently beginning an effort, lasting the rest of 2015, to clean up our test
3452suite, and not only get it passing on all of the above versions of Node.js, but
3453working solidly on Windows as well. This is a compounding form of technical
3454debt that we're finally paying down, and our hope is that cleaning up the tests
3455will produce a more robust CLI that's a lot easier to write patches for.
3456
3457* [`791ec6b`](https://github.com/npm/npm/commit/791ec6b1bac0d1df59f5ebb4ccd16a29a5dc73f0)
3458  [#10233](https://github.com/npm/npm/issues/10233) Update Node.js versions
3459  that Travis uses to test npm. ([@iarna](https://github.com/iarna))
3460
3461#### 0.8 + npm <1.4 COMPATIBLE? SURE WHY NOT
3462
3463Hey, you found the feature we added!
3464
3465* [`231c58a`](https://github.com/npm/npm/commit/231c58a)
3466  [#10337](https://github.com/npm/npm/pull/10337)
3467  Add two new flags, first `--legacy-bundling` which installs your
3468  dependencies such that if you bundle those dependencies, npm versions
3469  prior to `1.4` can still install them. This eliminates all automatic
3470  deduping.
3471
3472  Second, `--global-style` which will install modules in your `node_modules`
3473  folder with the same layout as global modules.  Only your direct
3474  dependencies will show in `node_modules` and everything they depend on
3475  will be flattened in their `node_modules` folders.  This obviously will
3476  eliminate some deduping.
3477  ([@iarna](https://github.com/iarna))
3478
3479#### TYPOS IN THE LICENSE, OH MY
3480
3481* [`8d79c1a`](https://github.com/npm/npm/commit/8d79c1a39dae908f27eaa37ff6b23515d505ef29)
3482  [#10478](https://github.com/npm/npm/issues/10478) Correct two typos in npm's
3483  LICENSE. ([@jorrit](https://github.com/jorrit))
3484
3485### v3.4.1 (2015-11-12):
3486
3487#### ASK FOR NOTHING, GET LATEST
3488
3489When you run `npm install foo`, you probably expect that you'll get the
3490`latest` version of `foo`, whatever that is. And good news! That's what
3491this change makes it do.
3492
3493We _think_ this is what everyone wants, but if this causes problems for
3494you, we want to know! If it proves problematic for people we will consider
3495reverting it (preferably before this becomes `npm@latest`).
3496
3497Previously, when you ran `npm install foo` we would act as if you typed
3498`npm install foo@*`. Now, like any range-type specifier, in addition to
3499matching the range, it would also have to be `<=` the value of the
3500`latest` dist-tag. Further, it would exclude prerelease versions from the
3501list of versions considered for a match.
3502
3503This worked as expected most of the time, unless your `latest` was a
3504prerelease version, in which case that version wouldn't be used, to
3505everyone's surprise. Worse, if all your versions were prerelease versions
3506it would just refuse to install anything. (We fixed that in
3507[`npm@3.2.2`](https://github.com/npm/npm/releases/tag/v3.2.2) with
3508[`e4a38080`](https://github.com/npm/npm/commit/e4a38080).)
3509
3510* [`1e834c2`](https://github.com/npm/npm/commit/1e834c2)
3511  [#10189](https://github.com/npm/npm/issues/10189)
3512  `npm-package-arg@4.1.0` Change the default version from `*` to `latest`.
3513  ([@zkat](https://github.com/zkat))
3514
3515#### BUGS
3516
3517* [`bec4a84`](https://github.com/npm/npm/commit/bec4a84)
3518  [#10338](https://github.com/npm/npm/pull/10338)
3519  Failed installs could result in more rollback (removal of just installed
3520  packages) than we intended. This bug was first introduced by
3521  [`83975520`](https://github.com/npm/npm/commit/83975520).
3522  ([@iarna](https://github.com/iarna))
3523* [`06c732f`](https://github.com/npm/npm/commit/06c732f)
3524  [#10338](https://github.com/npm/npm/pull/10338)
3525  Updating a module could result in the module stealing some of its
3526  dependencies from the top level, potentially breaking other modules or
3527  resulting in many redundant installations. This bug was first introduced
3528  by [`971fd47a`](https://github.com/npm/npm/commit/971fd47a).
3529  ([@iarna](https://github.com/iarna))
3530* [`5653366`](https://github.com/npm/npm/commit/5653366)
3531  [#9980](https://github.com/npm/npm/issues/9980)
3532  npm, when removing a module, would refuse to remove the symlinked
3533  binaries if the module itself was symlinked as well. npm goes to some
3534  effort to ensure that it doesn't remove things that aren't is, and this
3535  code was being too conservative. This code has been rewritten to be
3536  easier to follow and to be unit-testable.
3537  ([@iarna](https://github.com/iarna))
3538
3539#### LICENSE CLARIFICATION
3540
3541* [`80acf20`](https://github.com/npm/npm/commit/80acf20)
3542  [#10326](https://github.com/npm/npm/pull/10326)
3543  Update npm's licensing to more completely cover all of the various
3544  things that are npm.
3545  ([@kemitchell](https://github.com/kemitchell))
3546
3547#### CLOSER TO GREEN TRAVIS
3548
3549* [`fc12da9`](https://github.com/npm/npm/commit/fc12da9)
3550  [#10232](https://github.com/npm/npm/pull/10232)
3551  `nock@1.9.0`
3552  Downgrade nock to a version that doesn't depend on streams2 in core so
3553  that more of our tests can pass in 0.8.
3554  ([@iarna](https://github.com/iarna))
3555
3556### v3.4.0 (2015-11-05):
3557
3558#### A NEW FEATURE
3559
3560This was a group effort, with [@isaacs](https://github.com/isaacs)
3561dropping the implementation in back in August. Then, a few days ago,
3562[@ashleygwilliams](https://github.com/ashleygwilliams) wrote up docs and
3563just today [@othiym23](https://github.com/othiym23) wrote a test.
3564
3565It's a handy shortcut to update a dependency and then make sure tests
3566still pass.
3567
3568This new command:
3569
3570```
3571npm install-test x
3572```
3573
3574is the equivalent of running:
3575
3576```
3577npm install x && npm test
3578```
3579
3580* [`1ac3e08`](https://github.com/npm/npm/commit/1ac3e08)
3581  [`bcb04f6`](https://github.com/npm/npm/commit/bcb04f6)
3582  [`b6c17dd`](https://github.com/npm/npm/commit/b6c17dd)
3583  [#9443](https://github.com/npm/npm/pull/9443)
3584  Add `npm install-test` command, alias `npm it`.
3585  ([@isaacs](https://github.com/isaacs),
3586  [@ashleygwilliams](https://github.com/ashleygwilliams),
3587  [@othiym23](https://github.com/othiym23))
3588
3589#### BUG FIXES VIA DEPENDENCY UPDATES
3590
3591* [`31c0080`](https://github.com/npm/npm/commit/31c0080)
3592  [#8640](https://github.com/npm/npm/issues/8640)
3593  [npm/normalize-package-data#69](https://github.com/npm/normalize-package-data/pull/69)
3594  `normalize-package-data@2.3.5`:
3595  Fix a bug where if you didn't specify the name of a scoped module's
3596  binary, it would install it such that it was impossible to call it.
3597  ([@iarna](https://github.com/iarna))
3598* [`02b37bc`](https://github.com/npm/npm/commit/02b37bc)
3599  [npm/fstream-npm#14](https://github.com/npm/fstream-npm/pull/14)
3600  `fstream-npm@1.0.7`:
3601  Only filter `config.gypi` when it's in the build directory.
3602  ([@mscdex](https://github.com/mscdex))
3603* [`accb9d2`](https://github.com/npm/npm/commit/accb9d2)
3604  [npm/fstream-npm#15](https://github.com/npm/fstream-npm/pull/15)
3605  `fstream-npm@1.0.6`:
3606  Stop including directories that happened to have names matching whitelisted
3607  npm files in npm module tarballs. The most common cause was that if you had
3608  a README directory then everything in it would be included if wanted it
3609  or not.
3610  ([@taion](https://github.com/taion))
3611
3612#### DOCUMENTATION FIXES
3613
3614* [`7cf6366`](https://github.com/npm/npm/commit/7cf6366)
3615  [#10036](https://github.com/npm/npm/pull/10036)
3616  Fix typo / over-abbreviation.
3617  ([@ifdattic](https://github.com/ifdattic))
3618* [`d0ad8f4`](https://github.com/npm/npm/commit/d0ad8f4)
3619  [#10176](https://github.com/npm/npm/pull/10176)
3620  Fix broken link, scopes => scope.
3621  ([@ashleygwilliams](https://github.com/ashleygwilliams))
3622* [`d623783`](https://github.com/npm/npm/commit/d623783)
3623  [#9460](https://github.com/npm/npm/issue/9460)
3624  Specifying the default command run by "npm start" and the
3625  fact that you can pass it arguments.
3626  ([@JuanCaicedo](https://github.com/JuanCaicedo))
3627
3628#### DEPENDENCY UPDATES FOR THEIR OWN SAKE
3629
3630* [`0a4c29e`](https://github.com/npm/npm/commit/0a4c29e)
3631  [npm/npmlog#19](https://github.com/npm/npmlog/pull/19)
3632  `npmlog@2.0.0`: Make it possible to emit log messages with `error` as the
3633  prefix.
3634  ([@bengl](https://github.com/bengl))
3635* [`9463ce9`](https://github.com/npm/npm/commit/9463ce9)
3636  `read-package-json@2.0.2`:
3637  Minor cleanups.
3638  ([@KenanY](https://github.com/KenanY))
3639
3640### v3.3.12 (2015-11-02):
3641
3642Hi, a little hot-fix release for a bug introduced in 3.3.11.  The ENOENT fix
3643last week ([`f0e2088`](https://github.com/npm/npm/commit/f0e2088)) broke
3644upgrades of modules that have bundled dependencies (like `npm`, augh!)
3645
3646* [`aedf7cf`](https://github.com/npm/npm/commit/aedf7cf)
3647  [#10192](//github.com/npm/npm/pull/10192)
3648  If a bundled module is going to be replacing a module that's currently on
3649  disk (for instance, when you upgrade a module that includes bundled
3650  dependencies) we want to select the version from the bundle in preference
3651  over the one that was there previously.
3652  ([@iarna](https://github.com/iarna))
3653
3654### v3.3.11 (2015-10-29):
3655
3656This is a dependency update week, so that means no PRs from our lovely
3657users. Look for those next week.  As it happens, the dependencies updated
3658were just devdeps, so nothing for you all to worry about.
3659
3660But the bug fixes, oh geez, I tracked down some really long standing stuff
3661this week!!  The headliner is those intermittent `ENOENT` errors that no one
3662could reproduce consistently?  I think they're nailed! But also pretty
3663important, the bug where `hapi` would install w/ a dep missing? Squashed!
3664
3665#### EEEEEEENOENT
3666
3667* [`f0e2088`](https://github.com/npm/npm/commit/f0e2088)
3668  [#10026](https://github.com/npm/npm/issues/10026)
3669  Eliminate some, if not many, of the `ENOENT` errors `npm@3` has seen over
3670  the past few months.  This was happening when npm would, in its own mind,
3671  correct a bundled dependency, due to a `package.json` specifying an
3672  incompatible version.  Then, when npm extracted the bundled version, what
3673  was on disk didn't match its mind and… well, when it tried to act on what
3674  was in its mind, we got an `ENOENT` because it didn't actually exist on
3675  disk.
3676  ([@iarna](https://github.com/iarna))
3677
3678#### PARTIAL SHRINKWRAPS, NO LONGER A BAD DAY
3679
3680* [`712fd9c`](https://github.com/npm/npm/commit/712fd9c)
3681  [#10153](https://github.com/npm/npm/pull/10153)
3682  Imagine that you have a module, let's call it `fun-time`, and it depends
3683  on two dependencies, `need-fun@1` and `need-time`.  Further, `need-time`
3684  requires `need-fun@2`.  So after install the logical tree will look like
3685  this:
3686
3687  ```
3688  fun-time
3689  ├── need-fun@1
3690  └── need-time
3691      └── need-fun@2
3692  ```
3693
3694  Now, the `fun-time` author also distributes a shrinkwrap, but it only includes
3695  the `need-fun@1` in it.
3696
3697  Resolving dependencies would look something like this:
3698
3699  1. Require `need-fun@1`: Use version from shrinkwrap (ignoring version)
3700  2. Require `need-time`: User version in package.json
3701    1. Require `need-fun@2`: Use version from shrinkwrap, which oh hey, is
3702       already installed at the top level, so no further action is needed.
3703
3704  Which results in this tree:
3705
3706  ```
3707  fun-time
3708  ├── need-fun@1
3709  └── need-time
3710  ```
3711
3712  We're ignoring the version check on things specified in the shrinkwrap
3713  so that you can override the version that will be installed. This is
3714  because you may want to  use a different version than is specified
3715  by your dependencies' dependencies' `package.json` files.
3716
3717  To fix this, we now only allow overrides of a dependency version when
3718  that dependency is a child (in the tree) of the thing that requires it.
3719  This means that when we're looking for `need-fun@2` we'll see `need-fun@1`
3720  and reject it because, although it's from a shrinkwrap, it's parent is
3721  `fun-time` and the package doing the requiring is `need-time`.
3722
3723  ([@iarna](https://github.com/iarna))
3724
3725#### STRING `package.bin` AND NON-NPMJS REGISTRIES
3726
3727* [`3de1463`](https://github.com/npm/npm/commit/3de1463)
3728  [#9187](https://github.com/npm/npm/issues/9187)
3729  If you were using a module with the `bin` field in your `package.json` set
3730  to a string on a non-npmjs registry then npm would crash, due to the our
3731  expectation that the `bin` field would be an object.  We now pass all
3732  `package.json` data through a routine that normalizes the format,
3733  including the `bin` field.  (This is the same routine that your
3734  `package.json` is passed through when read off of disk or sent to the
3735  registry for publication.) Doing this also ensures that older modules on
3736  npm's own registry will be treated exactly the same as new ones.  (In the
3737  past we weren't always super careful about scrubbing `package.json` data
3738  on publish.  And even when we were, those rules have subtly changed over
3739  time.)
3740  ([@iarna](https://github.com/iarna))
3741
3742### v3.3.10 (2015-10-22):
3743
3744Hey you all!  Welcome to a busy bug fix and PR week.  We've got changes
3745to how `npm install` replaces dependencies during updates, improvements
3746to shrinkwrap behavior, and all sorts of doc updates.
3747
3748In other news, `npm@3` landed in node master in preparation for `node@5`
3749with [`41923c0`](https://github.com/nodejs/node/commit/41923c0).
3750
3751#### UPDATED DEPS NOW MAKE MORE SENSE
3752
3753* [`971fd47`](https://github.com/npm/npm/commit/971fd47)
3754  [#9929](https://github.com/npm/npm/pull/9929)
3755  Make the tree more consistent by doing updates in place. This means
3756  that trees after a dependency version update will more often look
3757  the same as after a fresh install.
3758  ([@iarna](https://github.com/iarna))
3759
3760#### SHRINKWRAP + DEV DEPS NOW RESPECTED
3761
3762* [`eb28a8c`](https://github.com/npm/npm/commit/eb28a8c)
3763  [#9647](https://github.com/npm/npm/issues/9647)
3764  If a shrinkwrap already has dev deps, don't throw them away when
3765  someone later runs `npm install --save`.
3766  ([@iarna](https://github.com/iarna))
3767
3768#### FANTASTIC DOCUMENTATION UPDATES
3769
3770* [`291162c`](https://github.com/npm/npm/commit/291162c)
3771  [#10021](https://github.com/npm/npm/pull/10021)
3772  Improve wording in the FAQ to be more empathetic and less jokey.
3773  ([@TaMe3971](https://github.com/TaMe3971))
3774* [`9a28c54`](https://github.com/npm/npm/commit/9a28c54)
3775  [#10020](https://github.com/npm/npm/pull/10020)
3776  Document the command to see the list of config defaults in the section
3777  on config defaults.
3778  ([@lady3bean](https://github.com/lady3bean))
3779* [`8770b0a`](https://github.com/npm/npm/commit/8770b0a)
3780  [#7600](https://github.com/npm/npm/issues/7600)
3781  Add shortcuts to all command documentation.
3782  ([@RichardLitt](https://github.com/RichardLitt))
3783* [`e9b7d0d`](https://github.com/npm/npm/commit/e9b7d0d)
3784  [#9950](https://github.com/npm/npm/pull/9950)
3785  On errors that can be caused by outdated node & npm, suggest updating
3786  as a part of the error message.
3787  ([@ForbesLindesay](https://github.com/ForbesLindesay))
3788
3789#### NEW STANDARD HAS ALWAYS BEEN STANDARD
3790
3791* [`40c1b0f`](https://github.com/npm/npm/commit/40c1b0f)
3792  [#9954](https://github.com/npm/npm/pull/9954)
3793  Update to `standard@5` and reformat the source to work with it.
3794  ([@cbas](https://github.com/cbas))
3795
3796### v3.3.9 (2015-10-15):
3797
3798This week sees a few small changes ready to land:
3799
3800#### TRAVIS NODE 0.8 BUILDS REJOICE
3801
3802* [`25a234b`](https://github.com/npm/npm/commit/25a234b)
3803  [#9668](https://github.com/npm/npm/issues/9668)
3804  Install `npm@3`'s bundled dependencies with `npm@2`, so that the ancient npm
3805  that ships with node 0.8 can install `npm@3` directly.
3806  ([@othiym23](https://github.com/othiym23))
3807
3808#### SMALL ERROR MESSAGE IMPROVEMENT
3809
3810* [`a332f61`](https://github.com/npm/npm/commit/a332f61)
3811  [#9927](https://github.com/npm/npm/pull/9927)
3812  Update error messages where we report a list of versions that you could
3813  have installed to show this as a comma separated list instead of as JSON.
3814  ([@iarna](https://github.com/iarna))
3815
3816#### DEPENDENCY UPDATES
3817
3818* [`4cd74b0`](https://github.com/npm/npm/commit/4cd74b0)
3819  `nock@2.15.0`
3820  ([@pgte](https://github.com/pgte))
3821* [`9360976`](https://github.com/npm/npm/commit/9360976)
3822  `tap@2.1.1`
3823  ([@isaacs](https://github.com/isaacs))
3824* [`1ead0a4`](https://github.com/npm/npm/commit/1ead0a4)
3825  `which@1.2.0`
3826  ([@isaacs](https://github.com/isaacs))
3827* [`759f88a`](https://github.com/npm/npm/commit/759f88a)
3828  `has-unicode@1.0.1`
3829  ([@iarna](https://github.com/iarna))
3830
3831### v3.3.8 (2015-10-12):
3832
3833This is a small update release, we're reverting
3834[`22a3af0`](https://github.com/npm/npm/commit/22a3af0) from last week's
3835release, as it is resulting in crashes.  We'll revisit this PR during this
3836week.
3837
3838* [`ddde1d5`](https://github.com/npm/npm/commit/ddde1d5)
3839  Revert "lifecycle: Swap out custom logic with add-to-path module"
3840  ([@iarna](https://github.com/iarna))
3841
3842### v3.3.7 (2015-10-08):
3843
3844So, as Kat mentioned in last week's 2.x release, we're now swapping weeks
3845between accepting PRs and doing dependency updates, in an effort to keep
3846release management work from taking over our lives.  This week is a PR week,
3847so we've got a bunch of goodies for you.
3848
3849Relatedly, this week means 3.3.6 is now `latest` and it is WAY faster than
3850previous 3.x releases. Give it or this a look!
3851
3852#### OPTIONAL DEPS, MORE OPTIONAL
3853
3854* [`2289234`](https://github.com/npm/npm/commit/2289234)
3855  [#9643](https://github.com/npm/npm/issues/9643)
3856  [#9664](https://github.com/npm/npm/issues/9664)
3857  `npm@3` was triggering `npm@2`'s build mechanics when it was linking bin files
3858  into the tree.  This was originally intended to trigger rebuilds of
3859  bundled modules, but `npm@3`'s flat module structure confused it.  This
3860  caused two seemingly unrelated issues.  First, failing optional
3861  dependencies could under some circumstances (if they were built during
3862  this phase) trigger a full build failure.  And second, rebuilds were being
3863  triggered of already installed modules, again, in some circumstances.
3864  Both of these are fixed by disabling the `npm@2` mechanics and adding a
3865  special rebuild phase for the initial installation of bundled modules.
3866  ([@iarna](https://github.com/iarna))
3867
3868#### BAD NAME, NO CRASH
3869
3870* [`b78fec9`](https://github.com/npm/npm/commit/b78fec9)
3871  [#9766](https://github.com/npm/npm/issues/9766)
3872  Refactor all attempts to read the module name or package name to go via a
3873  single function, with appropriate guards unusual circumstances where they
3874  aren't where we expect them.  This ultimately will ensure we don't see any
3875  more recurrences of the `localeCompare` error and related crashers.
3876  ([@iarna](https://github.com/iarna))
3877
3878#### MISCELLANEOUS BUG FIXES
3879
3880* [`22a3af0`](https://github.com/npm/npm/commit/22a3af0)
3881  [#9553](https://github.com/npm/npm/pull/9553)
3882  Factor the lifecycle code to manage paths out into its own module and use that.
3883  ([@kentcdodds](https://github.com/kentcdodds))
3884* [`6a29fe3`](https://github.com/npm/npm/commit/6a29fe3)
3885  [#9677](https://github.com/npm/npm/pull/9677)
3886  Start testing our stuff in node 4 on travis
3887  ([@fscherwi](https://github.com/fscherwi))
3888* [`508c6a4`](https://github.com/npm/npm/commit/508c6a4)
3889  [#9669](https://github.com/npm/npm/issues/9669)
3890  Make `recalculateMetadata` more resilient to unexpectedly bogus dependency specifiers.
3891  ([@tmct](https://github.com/tmct))
3892* [`3c44763`](https://github.com/npm/npm/commit/3c44763)
3893  [#9643](https://github.com/npm/npm/issues/9463)
3894  Update `install --only` to ignore the `NODE_ENV` var and _just_ use the only
3895  value, if specified.
3896  ([@watilde](https://github.com/watilde))
3897* [`87336c3`](https://github.com/npm/npm/commit/87336c3)
3898  [#9879](https://github.com/npm/npm/pull/9879)
3899  `npm@3`'s shrinkwrap was refusing to shrinkwrap if an optional dependency
3900  was missing– patch it to allow this.
3901  ([@mantoni](https://github.com/mantoni))
3902
3903#### DOCUMENTATION UPDATES
3904
3905* [`82659fd`](https://github.com/npm/npm/commit/82659fd)
3906  [#9208](https://github.com/npm/npm/issues/9208)
3907  Correct the npm style guide around quote usage
3908  ([@aaroncrows](https://github.com/aaroncrows))
3909* [`a69c83a`](https://github.com/npm/npm/commit/a69c83a)
3910  [#9645](https://github.com/npm/npm/pull/9645)
3911  Fix spelling error in README
3912  ([@dkoleary88](https://github.com/dkoleary88))
3913* [`f2cf054`](https://github.com/npm/npm/commit/f2cf054)
3914  [#9714](https://github.com/npm/npm/pull/9714)
3915  Fix typos in our documentation
3916  ([@reggi](https://github.com/reggi))
3917* [`7224bef`](https://github.com/npm/npm/commit/7224bef)
3918  [#9759](https://github.com/npm/npm/pull/9759)
3919  Fix typo in npm-team docs
3920  ([@zkat](https://github.com/zkat))
3921* [`7e6e007`](https://github.com/npm/npm/commit/7e6e007)
3922  [#9820](https://github.com/npm/npm/pull/9820)
3923  Correct documentation as to `binding.gyp`
3924  ([@KenanY](https://github.com/KenanY))
3925
3926### v3.3.6 (2015-09-30):
3927
3928I have the most exciting news for you this week.  YOU HAVE NO IDEA.  Well,
3929ok, maybe you do if you follow my twitter.
3930
3931Performance just got 5 bazillion times better (under some circumstances,
3932ymmv, etc).  So– my test scenario is our very own website.  In `npm@2`, on my
3933macbook running `npm ls` takes about 5 seconds. Personally it's more than
3934I'd like, but it's entire workable. In `npm@3` it has been taking _50_ seconds,
3935which is appalling. But after doing some work on Monday isolating the performance
3936issues I've been able to reduce `npm@3`'s run time back down to 5 seconds.
3937
3938Other scenarios were even worse, there was one that until now in `npm@3` that
3939took almost 6 minutes, and has been reduced to 14 seconds.
3940
3941* [`7bc0d4c`](https://github.com/npm/npm/commit/7bc0d4c)
3942  [`cf42217`](https://github.com/npm/npm/commit/cf42217)
3943  [#8826](https://github.com/npm/npm/issues/8826)
3944  Stop using deepclone on super big datastructures. Avoid cloning
3945  all-together even when that means mutating things, when possible.
3946  Otherwise use a custom written tree-copying function that understands
3947  the underlying datastructure well enough to only copy what we absolutely
3948  need to.
3949  ([@iarna](https://github.com/iarna))
3950
3951In other news, look for us this Friday and Saturday at the amazing
3952[Open Source and Feelings](https://osfeels.com) conference, where something like a
3953third of the company will be attending.
3954
3955#### And finally a dependency update
3956
3957* [`a6a4437`](https://github.com/npm/npm/commit/a6a4437)
3958  `glob@5.0.15`
3959  ([@isaacs](https://github.com/isaacs))
3960
3961#### And some subdep updates
3962
3963* [`cc5e6a0`](https://github.com/npm/npm/commit/cc5e6a0)
3964  `hoek@2.16.3`
3965  ([@nlf](https://github.com/nlf))
3966* [`912a516`](https://github.com/npm/npm/commit/912a516)
3967  `boom@2.9.0`
3968  ([@arb](https://github.com/arb))
3969* [`63944e9`](https://github.com/npm/npm/commit/63944e9)
3970  `bluebird@2.10.1`
3971  ([@petkaantonov](https://github.com/petkaantonov))
3972* [`ef16003`](https://github.com/npm/npm/commit/ef16003)
3973  `mime-types@2.1.7` & `mime-db@1.19.0`
3974  ([@dougwilson](https://github.com/dougwilson))
3975* [`2b8c0dd`](https://github.com/npm/npm/commit/2b8c0dd)
3976  `request@2.64.0`
3977  ([@simov](https://github.com/simov))
3978* [`8139124`](https://github.com/npm/npm/commit/8139124)
3979  `brace-expansion@1.1.1`
3980  ([@juliangruber](https://github.com/juliangruber))
3981
3982### v3.3.5 (2015-09-24):
3983
3984Some of you all may not be aware, but npm is ALSO a company. I tell you this
3985'cause npm-the-company had an all-staff get together this week, flying in
3986our remote folks from around the world. That was great, but it also
3987basically eliminated normal work on Monday and Tuesday.
3988
3989Still, we've got a couple of really important bug fixes this week.  Plus a
3990lil bit from the [now LTS 2.x branch](https://github.com/npm/npm/releases/tag/v2.14.6).
3991
3992#### ATTENTION WINDOWS USERS
3993
3994If you previously updated to npm 3 and you try to update again, you may get
3995an error messaging telling you that npm won't install npm into itself. Until you
3996are at 3.3.5 or greater, you can get around this with `npm install -f -g npm`.
3997
3998* [`bef06f5`](https://github.com/npm/npm/commit/bef06f5)
3999  [#9741](https://github.com/npm/npm/pull/9741) Uh...  so...  er...  it
4000  seems that since `npm@3.2.0` on Windows with a default configuration, it's
4001  been impossible to update npm.  Well, that's not actually true, there's a
4002  work around (see above), but it shouldn't be complaining in the first
4003  place.
4004  ([@iarna](https://github.com/iarna))
4005
4006#### STACK OVERFLOWS ON PUBLISH
4007
4008* [`330b496`](https://github.com/npm/npm/commit/330b496)
4009  [#9667](https://github.com/npm/npm/pull/9667)
4010  We were keeping track of metadata about your project while packing the
4011  tree in a way that resulted in this data being written to packed tar files
4012  headers. When this metadata included cycles, it resulted in the the tar
4013  file entering an infinite recursive loop and eventually crashing with a
4014  stack overflow.
4015
4016  I've patched this by keeping track of your metadata by closing over the
4017  variables in question instead, and I've further restricted gathering and
4018  tracking the metadata to times when it's actually needed. (Which is only
4019  if you need bundled modules.)
4020  ([@iarna](https://github.com/iarna))
4021
4022#### LESS CRASHY ERROR MESSAGES ON BAD PACKAGES
4023
4024* [`829921f`](https://github.com/npm/npm/commit/829921f)
4025  [#9741](https://github.com/npm/npm/pull/9741)
4026  Packages with invalid names or versions were crashing the installer. These
4027  are now captured and warned as was originally intended.
4028  ([@iarna](https://github.com/iarna))
4029
4030#### ONE DEPENDENCY UPDATE
4031
4032* [`963295c`](https://github.com/npm/npm/commit/963295c)
4033  `npm-install-checks@2.0.1`
4034  ([@iarna](https://github.com/iarna))
4035
4036#### AND ONE SUBDEPENDENCY
4037
4038* [`448737d`](https://github.com/npm/npm/commit/448737d)
4039  `request@2.63.0`
4040  ([@simov](https://github.com/simov))
4041
4042### v3.3.4 (2015-09-17):
4043
4044This is a relatively quiet release, bringing a few bug fixes and
4045some module updates, plus via the
4046[2.14.5 release](https://github.com/npm/npm/releases/tag/v2.14.5)
4047some forward compatibility fixes with versions of Node that
4048aren't yet released.
4049
4050#### NO BETA NOTICE THIS TIME!!
4051
4052But, EXCITING NEWS FRIENDS, this week marks the exit of `npm@3`
4053from beta. This means that the week of this release,
4054[v3.3.3](https://github.com/npm/npm/releases/tag/v3.3.3) will
4055become `latest` and this version (v3.3.4) will become `next`!!
4056
4057#### CRUFT FOR THE CRUFT GODS
4058
4059What I call "cruft", by which I mean, files sitting around in
4060your `node_modules` folder, will no longer produce warnings in
4061`npm ls` nor during `npm install`. This brings `npm@3`'s behavior
4062in line with `npm@2`.
4063
4064* [`a127801`](https://github.com/npm/npm/commit/a127801)
4065  [#9285](https://github.com/npm/npm/pull/9586)
4066  Stop warning about cruft in module directories.
4067  ([@iarna](https://github.com/iarna))
4068
4069#### BETTER ERROR MESSAGE
4070
4071* [`95ee92c`](https://github.com/npm/npm/commit/95ee92c)
4072  [#9433](https://github.com/npm/npm/issues/9433)
4073  Give better error messages for invalid URLs in the dependency
4074  list.
4075  ([@jamietre](https://github.com/jamietre))
4076
4077#### MODULE UPDATES
4078
4079* [`ebb92ca`](https://github.com/npm/npm/commit/ebb92ca)
4080  `retry@0.8.0` ([@tim-kos](https://github.com/tim-kos))
4081* [`55f1285`](https://github.com/npm/npm/commit/55f1285)
4082  `normalize-package-data@2.3.4` ([@zkat](https://github.com/zkat))
4083* [`6d4ebff`](https://github.com/npm/npm/commit/6d4ebff)
4084  `sha@2.0.1` ([@ForbesLindesay](https://github.com/ForbesLindesay))
4085* [`09a9c7a`](https://github.com/npm/npm/commit/09a9c7a)
4086  `semver@5.0.3` ([@isaacs](https://github.com/isaacs))
4087* [`745000f`](https://github.com/npm/npm/commit/745000f)
4088  `node-gyp@3.0.3` ([@rvagg](https://github.com/rvagg))
4089
4090#### SUB DEP MODULE UPDATES
4091
4092* [`578ca25`](https://github.com/npm/npm/commit/578ca25)
4093  `request@2.62.0` ([@simov](https://github.com/simov))
4094* [`1d8996e`](https://github.com/npm/npm/commit/1d8996e)
4095  `jju@1.2.1` ([@rlidwka](https://github.com/rlidwka))
4096* [`6da1ba4`](https://github.com/npm/npm/commit/6da1ba4)
4097  `hoek@2.16.2` ([@nlf](https://github.com/nlf))
4098
4099### v3.3.3 (2015-09-10):
4100
4101This short week brought us brings us a few small bug fixes, a
4102doc change and a whole lotta dependency updates.
4103
4104Plus, as usual, this includes a forward port of everything in
4105[`npm@2.14.4`](https://github.com/npm/npm/releases/tag/v2.14.4).
4106
4107#### BETA BUT NOT FOREVER
4108
4109**_THIS IS BETA SOFTWARE_**. `npm@3` will remain in beta until
4110we're confident that it's stable and have assessed the effect of
4111the breaking changes on the community. During that time we will
4112still be doing `npm@2` releases, with `npm@2` tagged as `latest`
4113and `next`. We'll _also_ be publishing new releases of `npm@3`
4114as `npm@v3.x-next` and `npm@v3.x-latest` alongside those
4115versions until we're ready to switch everyone over to `npm@3`.
4116We need your help to find and fix its remaining bugs. It's a
4117significant rewrite, so we are _sure_ there still significant
4118bugs remaining. So do us a solid and deploy it in non-critical
4119CI environments and for day-to-day use, but maybe don't use it
4120for production maintenance or frontline continuous deployment
4121just yet.
4122
4123#### REMOVE INSTALLED BINARIES ON WINDOWS
4124
4125So waaaay back at the start of August, I fixed a bug with
4126[#9198](https://github.com/npm/npm/pull/9198). That fix made it
4127so that if you had two modules installed that both installed the
4128same binary (eg `gulp` & `gulp-cli`), that removing one wouldn't
4129remove the binary if it was owned by the other.
4130
4131It did this by doing some hocus-pocus that, turns out, was
4132Unix-specific, so on Windows it just threw up its hands and
4133stopped removing installed binaries at all. Not great.
4134
4135So today we're fixing that– it let us maintain the same safety
4136that we added in #9198, but ALSO works with Windows.
4137
4138* [`25fbaed`](https://github.com/npm/npm/commit/25fbaed)
4139  [#9394](https://github.com/npm/npm/issues/9394)
4140  Treat cmd-shims the same way we treat symlinks
4141  ([@iarna](https://github.com/iarna))
4142
4143#### API DOCUMENTATION HAS BEEN SACRIFICED THE API GOD
4144
4145The documentation of the internal APIs of npm is going away,
4146because it would lead people into thinking they should integrate
4147with npm by using it. Please don't do that! In the future, we'd
4148like to give you a suite of stand alone modules that provide
4149better, more stand alone APIs for your applications to build on.
4150But for now, call the npm binary with `process.exec` or
4151`process.spawn` instead.
4152
4153* [`2fb60bf`](https://github.com/npm/npm/commit/2fb60bf)
4154  Remove misleading API documentation
4155  ([@othiym23](https://github.com/othiym23))
4156
4157#### ALLOW `npm link` ON WINDOWS W/ PRERELEASE VERSIONS OF NODE
4158
4159We never meant to have this be a restriction in the first place
4160and it was only just discovered with the recent node 4.0.0
4161release candidate.
4162
4163* [`6665e54`](https://github.com/npm/npm/commit/6665e54)
4164  [#9505](https://github.com/npm/npm/pull/9505)
4165  Allow npm link to run on Windows with prerelease versions of
4166  node
4167  ([@jon-hall](https://github.com/jon-hall))
4168
4169#### graceful-fs update
4170
4171We're updating all of npm's deps to use the most recent
4172`graceful-fs`. This turns out to be important for future not yet
4173released versions of node, because older versions monkey-patch
4174`fs` in ways that will break in the future. Plus it ALSO makes
4175use of `process.binding` which is an internal API that npm
4176definitely shouldn't have been using. We're not done yet, but
4177this is the bulk of them.
4178
4179* [`e7bc98e`](https://github.com/npm/npm/commit/e7bc98e)
4180  `write-file-atomic@1.1.3`
4181  ([@iarna](https://github.com/iarna))
4182* [`7417600`](https://github.com/npm/npm/commit/7417600)
4183  `tar@2.2.1`
4184  ([@zkat](https://github.com/zkat))
4185* [`e4e9d40`](https://github.com/npm/npm/commit/e4e9d40)
4186  `read-package-json@2.0.1`
4187  ([@zkat](https://github.com/zkat))
4188* [`481611d`](https://github.com/npm/npm/commit/481611d)
4189  `read-installed@4.0.3`
4190  ([@zkat](https://github.com/zkat))
4191* [`0dabbda`](https://github.com/npm/npm/commit/0dabbda)
4192  `npm-registry-client@7.0.4`
4193  ([@zkat](https://github.com/zkat))
4194* [`c075a91`](https://github.com/npm/npm/commit/c075a91)
4195  `fstream@1.0.8`
4196  ([@zkat](https://github.com/zkat))
4197* [`2e4341a`](https://github.com/npm/npm/commit/2e4341a)
4198  `fs-write-stream-atomic@1.0.4`
4199  ([@zkat](https://github.com/zkat))
4200* [`18ad16e`](https://github.com/npm/npm/commit/18ad16e)
4201  `fs-vacuum@1.2.7`
4202  ([@zkat](https://github.com/zkat))
4203
4204#### DEPENDENCY UPDATES
4205
4206* [`9d6666b`](https://github.com/npm/npm/commit/9d6666b)
4207  `node-gyp@3.0.1`
4208  ([@rvagg](https://github.com/rvagg))
4209* [`349c4df`](https://github.com/npm/npm/commit/349c4df)
4210  `retry@0.7.0`
4211  ([@tim-kos](https://github.com/tim-kos))
4212* [`f507551`](https://github.com/npm/npm/commit/f507551)
4213  `which@1.1.2`
4214  ([@isaacs](https://github.com/isaacs))
4215* [`e5b6743`](https://github.com/npm/npm/commit/e5b6743)
4216  `nopt@3.0.4`
4217  ([@zkat](https://github.com/zkat))
4218
4219#### THE DEPENDENCIES OF OUR DEPENDENCIES ARE OUR DEPENDENCIES UPDATES
4220
4221* [`316382d`](https://github.com/npm/npm/commit/316382d)
4222  `mime-types@2.1.6` & `mime-db@1.18.0`
4223* [`64b741e`](https://github.com/npm/npm/commit/64b741e)
4224  `spdx-correct@1.0.1`
4225* [`fff62ac`](https://github.com/npm/npm/commit/fff62ac)
4226  `process-nextick-args@1.0.3`
4227* [`9d6488c`](https://github.com/npm/npm/commit/9d6488c)
4228  `cryptiles@2.0.5`
4229* [`1912012`](https://github.com/npm/npm/commit/1912012)
4230  `bluebird@2.10.0`
4231* [`4d09402`](https://github.com/npm/npm/commit/4d09402)
4232  `readdir-scoped-modules@1.0.2`
4233
4234### v3.3.2 (2015-09-04):
4235
4236#### PLEASE HOLD FOR THE NEXT AVAILABLE MAINTAINER
4237
4238This is a tiny little maintenance release, both to update dependencies and to
4239keep `npm@3` up to date with changes made to `npm@2`.
4240[@othiym23](https://github.com/othiym23) is putting out this release (again) as
4241his esteemed colleague [@iarna](https://github.com/iarna) finishes relocating
4242herself, her family, and her sizable anime collection all the way across North
4243America. It contains [all the goodies in
4244`npm@2.14.3`](https://github.com/npm/npm/releases/tag/v2.14.3) and one other
4245dependency update.
4246
4247#### BETA WARNINGS FOR FUN AND PROFIT
4248
4249**_THIS IS BETA SOFTWARE_**. `npm@3` will remain in beta until we're
4250confident that it's stable and have assessed the effect of the breaking
4251changes on the community.  During that time we will still be doing `npm@2`
4252releases, with `npm@2` tagged as `latest` and `next`.  We'll _also_ be
4253publishing new releases of `npm@3` as `npm@v3.x-next` and `npm@v3.x-latest`
4254alongside those versions until we're ready to switch everyone over to
4255`npm@3`.  We need your help to find and fix its remaining bugs.  It's a
4256significant rewrite, so we are _sure_ there still significant bugs
4257remaining.  So do us a solid and deploy it in non-critical CI environments
4258and for day-to-day use, but maybe don't use it for production maintenance or
4259frontline continuous deployment just yet.
4260
4261That said, it's getting there! It will be leaving beta very soon!
4262
4263#### ONE OTHER DEPENDENCY UPDATE
4264
4265* [`bb5de34`](https://github.com/npm/npm/commit/bb5de3493531228df0bd3f0742d5493c826be6dd)
4266  `is-my-json-valid@2.12.2`: Upgrade to a new, modernized version of
4267  `json-pointer`. ([@mafintosh](https://github.com/mafintosh))
4268
4269### v3.3.1 (2015-08-27):
4270
4271Hi all, this `npm@3` update brings you another round of bug fixes.  The
4272headliner here is that `npm update` works again.  We're running down the
4273clock on blocker 3.x issues!  Shortly after that hits zero we'll be
4274promoting 3.x to latest!!
4275
4276And of course, we have changes that were brought forward from 2.x. Check out
4277the release notes for
4278[2.14.1](https://github.com/npm/npm/releases/tag/v2.14.1) and
4279[2.14.2](https://github.com/npm/npm/releases/tag/v2.14.2).
4280
4281#### BETA WARNINGS FOR FUN AND PROFIT
4282
4283**_THIS IS BETA SOFTWARE_**. `npm@3` will remain in beta until we're
4284confident that it's stable and have assessed the effect of the breaking
4285changes on the community.  During that time we will still be doing `npm@2`
4286releases, with `npm@2` tagged as `latest` and `next`.  We'll _also_ be
4287publishing new releases of `npm@3` as `npm@v3.x-next` and `npm@v3.x-latest`
4288alongside those versions until we're ready to switch everyone over to
4289`npm@3`.  We need your help to find and fix its remaining bugs.  It's a
4290significant rewrite, so we are _sure_ there still significant bugs
4291remaining.  So do us a solid and deploy it in non-critical CI environments
4292and for day-to-day use, but maybe don't use it for production maintenance or
4293frontline continuous deployment just yet.
4294
4295#### NPM UPDATE, NOW AGAIN YOUR FRIEND
4296
4297* [`f130a00`](https://github.com/npm/npm/commit/f130a00)
4298  [#9095](https://github.com/npm/npm/issues/9095)
4299  `npm update` once again works! Previously, after selecting packages
4300  to update, it would then pick the wrong location to run the install
4301  from. ([@iarna](https://github.com/iarna))
4302
4303#### MORE VERBOSING FOR YOUR VERBOSE LIFECYCLES
4304
4305* [`d088b7d`](https://github.com/npm/npm/commit/d088b7d)
4306  [#9227](https://github.com/npm/npm/pull/9227)
4307  Add some additional logging at the verbose and silly levels
4308  when running lifecycle scripts. Hopefully this will make
4309  debugging issues with them a bit easier!
4310  ([@saper](https://github.com/saper))
4311
4312#### AND SOME OTHER BUG FIXES…
4313
4314* [`f4a5784`](https://github.com/npm/npm/commit/f4a5784)
4315  [#9308](https://github.com/npm/npm/issues/9308)
4316  Make fetching metadata for local modules faster! This ALSO means
4317  that doing things like running `npm repo` won't build your
4318  module and maybe run `prepublish`.
4319  ([@iarna](https://github.com/iarna))
4320
4321* [`4468c92`](https://github.com/npm/npm/commit/4468c92)
4322  [#9205](https://github.com/npm/npm/issues/9205)
4323  Fix a bug where local modules would sometimes not resolve relative
4324  links using the correct base path.
4325  ([@iarna](https://github.com/iarna))
4326
4327* [`d395a6b`](https://github.com/npm/npm/commit/d395a6b)
4328  [#8995](https://github.com/npm/npm/issues/8995)
4329  Certain combinations of packages could result in different install orders for their
4330  initial installation than for reinstalls run on the same folder.
4331  ([@iarna](https://github.com/iarna))
4332
4333* [`d119ea6`](https://github.com/npm/npm/commit/d119ea6)
4334  [#9113](https://github.com/npm/npm/issues/9113)
4335  Make extraneous packages _always_ up in `npm ls`. Previously, if an
4336  extraneous package had a dependency that depended back on the original
4337  package this would result in the package not showing up in `ls`.
4338  ([@iarna](https://github.com/iarna))
4339
4340* [`02420dc`](https://github.com/npm/npm/commit/02420dc)
4341  [#9113](https://github.com/npm/npm/issues/9113)
4342  Stop warning about missing top level package.json files. Errors in said
4343  files will still be reported.
4344  ([@iarna](https://github.com/iarna))
4345
4346#### SOME DEP UPDATES
4347
4348* [`1ed1364`](https://github.com/npm/npm/commit/1ed1364) `rimraf@2.4.3`
4349  ([@isaacs](https://github.com/isaacs)) Added EPERM to delay/retry loop
4350* [`e7b8315`](https://github.com/npm/npm/commit/e7b8315) `read@1.0.7`
4351  Smaller distribution package, better metadata
4352  ([@isaacs](https://github.com/isaacs))
4353
4354#### SOME DEPS OF DEPS UPDATES
4355
4356* [`b273bcc`](https://github.com/npm/npm/commit/b273bcc) `mime-types@2.1.5`
4357* [`df6e225`](https://github.com/npm/npm/commit/df6e225) `mime-db@1.17.0`
4358* [`785f2ad`](https://github.com/npm/npm/commit/785f2ad) `is-my-json-valid@2.12.1`
4359* [`88170dd`](https://github.com/npm/npm/commit/88170dd) `form-data@1.0.0-rc3`
4360* [`af5357b`](https://github.com/npm/npm/commit/af5357b) `request@2.61.0`
4361* [`337f96a`](https://github.com/npm/npm/commit/337f96a) `chalk@1.1.1`
4362* [`3dfd74d`](https://github.com/npm/npm/commit/3dfd74d) `async@1.4.2`
4363
4364### v3.3.0 (2015-08-13):
4365
4366This is a pretty EXCITING week.  But I may be a little excitable– or
4367possibly sleep deprived, it's sometimes hard to tell them apart. =D So
4368[Kat](https://github.com/zkat) really went the extra mile this week and got
4369the client side support for teams and orgs out in this week's 2.x release.
4370You can't use that just yet, 'cause we have to turn on some server side
4371stuff too, but this way it'll be there for you all the moment we do!  Check
4372out the details over in the [2.14.0 release
4373notes](https://github.com/npm/npm/releases/tag/v2.14.0)!
4374
4375But we over here in 3.x ALSO got a new feature this week, check out the new
4376`--only` and `--also` flags for better control over when dev and production
4377dependencies are used by various npm commands.
4378
4379That, and some important bug fixes round out this week. Enjoy everyone!
4380
4381#### NEVER SHALL NOT BETA THE BETA
4382
4383**_THIS IS BETA SOFTWARE_**.  EXCITING NEW BETA WARNING!!!  Ok, I fibbed,
4384EXACTLY THE SAME BETA WARNINGS: `npm@3` will remain in beta until we're
4385confident that it's stable and have assessed the effect of the breaking
4386changes on the community.  During that time we will still be doing `npm@2`
4387releases, with `npm@2` tagged as `latest` and `next`.  We'll _also_ be
4388publishing new releases of `npm@3` as `npm@v3.x-next` and `npm@v3.x-latest`
4389alongside those versions until we're ready to switch everyone over to
4390`npm@3`.  We need your help to find and fix its remaining bugs.  It's a
4391significant rewrite, so we are _sure_ there still significant bugs
4392remaining.  So do us a solid and deploy it in non-critical CI environments
4393and for day-to-day use, but maybe don't use it for production maintenance or
4394frontline continuous deployment just yet.
4395
4396#### ONLY ALSO DEV
4397
4398Hey we've got a SUPER cool new feature for you all, thanks to the fantastic
4399work of [@davglass](https://github.com/davglass) and
4400[@bengl](https://github.com/bengl) we have `--only=prod`,
4401`--only=dev`, `--also=prod` and `--also=dev` options. These apply in
4402various ways to: `npm install`, `npm ls`, `npm outdated` and `npm update`.
4403
4404So for instance:
4405
4406```
4407npm install --only=dev
4408```
4409
4410Only installs dev dependencies. By contrast:
4411
4412```
4413npm install --only=prod
4414```
4415
4416Will only install prod dependencies and is very similar to `--production`
4417but differs in that it doesn't set the environment variables that
4418`--production` does.
4419
4420The related new flag, `--also` is most useful with things like:
4421
4422```
4423npm shrinkwrap --also=dev
4424```
4425
4426As shrinkwraps don't include dev deps by default.  This replaces passing in
4427`--dev` in that scenario.
4428
4429And that leads into the fact that this deprecates `--dev` as its semantics
4430across commands were inconsistent and confusing.
4431
4432* [`3ab1eea`](https://github.com/npm/npm/commit/3ab1eea)
4433  [#9024](https://github.com/npm/npm/pull/9024)
4434  Add support for `--only`, `--also` and deprecate `--dev`
4435  ([@bengl](https://github.com/bengl))
4436
4437#### DON'T TOUCH! THAT'S NOT YOUR BIN
4438
4439* [`b31812e`](https://github.com/npm/npm/commit/b31812e)
4440  [#8996](https://github.com/npm/npm/pull/8996)
4441  When removing a module that has bin files, if one that we're going to
4442  remove is a symlink to a DIFFERENT module, leave it alone. This only happens
4443  when you have two modules that try to provide the same bin.
4444  ([@iarna](https://github.com/iarna))
4445
4446#### THERE'S AN END IN SIGHT
4447
4448* [`d2178a9`](https://github.com/npm/npm/commit/d2178a9)
4449  [#9223](https://github.com/npm/npm/pull/9223)
4450  Close a bunch of infinite loops that could show up with symlink cycles in your dependencies.
4451  ([@iarna](https://github.com/iarna))
4452
4453#### OOPS DIDN'T MEAN TO FIX THAT
4454
4455Well, not _just_ yet.  This was scheduled for next week, but it snuck into
44562.x this week.
4457
4458* [`139dd92`](https://github.com/npm/npm/commit/139dd92)
4459  [#8716](https://github.com/npm/npm/pull/8716)
4460  `npm init` will now only pick up the modules you install, not everything
4461  else that got flattened with them.
4462  ([@iarna](https://github.com/iarna))
4463
4464### v3.2.2 (2015-08-08):
4465
4466Lot's of lovely bug fixes for `npm@3`.  I'm also suuuuper excited that I
4467think we have a handle on stack explosions that effect a small portion of
4468our users.  We also have some tantalizing clues as to where some low hanging
4469fruit may be for performance issues.
4470
4471And of course, in addition to the `npm@3` specific bug fixes, there are some
4472great one's coming in from `npm@2`!  [@othiym23](https://github.com/othiym23)
4473put together that release this week– check out its
4474[release notes](https://github.com/npm/npm/releases/tag/v2.13.4) for the deets.
4475
4476#### AS ALWAYS STILL BETA
4477
4478**_THIS IS BETA SOFTWARE_**.  Just like the airline safety announcements,
4479we're not taking this plane off till we finish telling you: `npm@3` will
4480remain in beta until we're confident that it's stable and have assessed the
4481effect of the breaking changes on the community.  During that time we will
4482still be doing `npm@2` releases, with `npm@2` tagged as `latest` and `next`.
4483We'll _also_ be publishing new releases of `npm@3` as `npm@v3.x-next` and
4484`npm@v3.x-latest` alongside those versions until we're ready to switch
4485everyone over to `npm@3`.  We need your help to find and fix its remaining
4486bugs.  It's a significant rewrite, so we are _sure_ there still significant
4487bugs remaining.  So do us a solid and deploy it in non-critical CI
4488environments and for day-to-day use, but maybe don't use it for production
4489maintenance or frontline continuous deployment just yet.
4490
4491#### BUG FIXES
4492
4493* [`a8c8a13`](https://github.com/npm/npm/commit/a8c8a13)
4494  [#9050](https://github.com/npm/npm/issues/9050)
4495  Resolve peer deps relative to the parent of the requirer
4496  ([@iarna](http://github.com/iarna))
4497* [`05f0226`](https://github.com/npm/npm/commit/05f0226)
4498  [#9077](https://github.com/npm/npm/issues/9077)
4499  Fix crash when saving `git+ssh` urls
4500  ([@iarna](http://github.com/iarna))
4501* [`e4a3808`](https://github.com/npm/npm/commit/e4a3808)
4502  [#8951](https://github.com/npm/npm/issues/8951)
4503  Extend our patch to allow `*` to match something when a package only has
4504  prerelease versions to everything and not just the cache.
4505  ([@iarna](http://github.com/iarna))
4506* [`d135abf`](https://github.com/npm/npm/commit/d135abf)
4507  [#8871](https://github.com/npm/npm/issues/8871)
4508  Don't warn about a missing `package.json` or missing fields in the global
4509  install directory.
4510  ([@iarna](http://github.com/iarna))
4511
4512#### DEP VERSION BUMPS
4513
4514* [`990ee4f`](https://github.com/npm/npm/commit/990ee4f)
4515  `path-is-inside@1.0.1` ([@domenic](https://github.com/domenic))
4516* [`1f71ec0`](https://github.com/npm/npm/commit/1f71ec0)
4517  `lodash.clonedeep@3.0.2` ([@jdalton](https://github.com/jdalton))
4518* [`a091354`](https://github.com/npm/npm/commit/a091354)
4519  `marked@0.3.5` ([@chjj](https://github.com/chjj))
4520* [`fc51f28`](https://github.com/npm/npm/commit/fc51f28)
4521  `tap@1.3.2` ([@isaacs](https://github.com/isaacs))
4522* [`3569ec0`](https://github.com/npm/npm/commit/3569ec0)
4523  `nock@2.10.0` ([@pgte](https://github.com/pgte))
4524* [`ad5f6fd`](https://github.com/npm/npm/commit/ad5f6fd)
4525  `npm-registry-mock@1.0.1` ([@isaacs](https://github.com/isaacs))
4526
4527### v3.2.1 (2015-07-31):
4528
4529#### AN EXTRA QUIET RELEASE
4530
4531A bunch of stuff got deferred for various reasons, which just means more
4532branches to land next week!
4533
4534Don't forget to check out [Kat's 2.x release](https://github.com/npm/npm/releases/tag/v2.13.4) for other quiet goodies.
4535
4536#### AS ALWAYS STILL BETA
4537
4538**_THIS IS BETA SOFTWARE_**.  Yes, we're still reminding you of this.  No,
4539you can't be excused.  `npm@3` will remain in beta until we're confident
4540that it's stable and have assessed the effect of the breaking changes on the
4541community.  During that time we will still be doing `npm@2` releases, with
4542`npm@2` tagged as `latest` and `next`.  We'll _also_ be publishing new
4543releases of `npm@3` as `npm@v3.x-next` and `npm@v3.x-latest` alongside those
4544versions until we're ready to switch everyone over to `npm@3`.  We need your
4545help to find and fix its remaining bugs.  It's a significant rewrite, so we
4546are _sure_ there still significant bugs remaining.  So do us a solid and
4547deploy it in non-critical CI environments and for day-to-day use, but maybe
4548don't use it for production maintenance or frontline continuous deployment
4549just yet.
4550
4551
4552#### MAKING OUR TESTS TEST THE THING THEY TEST
4553
4554* [`6e53c3d`](https://github.com/npm/npm/commit/6e53c3d)
4555  [#8985](https://github.com/npm/npm/pull/8985)
4556  Many thanks to @bengl for noticing that one of our tests wasn't testing
4557  what it claimed it was testing! ([@bengl](https://github.com/bengl))
4558
4559#### MY PACKAGE.JSON WAS ALREADY IN THE RIGHT ORDER
4560
4561* [`eb2c7aa`](https://github.com/npm/npm/commit/d00d0f)
4562  [#9068](https://github.com/npm/npm/pull/9079)
4563  Stop sorting keys in the `package.json` that we haven't edited.  Many
4564  thanks to [@Qix-](https://github.com/Qix-) for bringing this up and
4565  providing a first pass at a patch for this.
4566  ([@iarna](https://github.com/iarna))
4567
4568#### DEV DEP UPDATE
4569
4570* [`555f60c`](https://github.com/npm/npm/commit/555f60c) `marked@0.3.4`
4571
4572### v3.2.0 (2015-07-24):
4573
4574#### MORE CONFIG, BETTER WINDOWS AND A BUG FIX
4575
4576This is a smallish release with a new config option and some bug fixes.  And
4577lots of module updates.
4578
4579#### BETA BETAS ON
4580
4581**_THIS IS BETA SOFTWARE_**.  Yes, we're still reminding you of this.  No,
4582you can't be excused.  `npm@3` will remain in beta until we're confident
4583that it's stable and have assessed the effect of the breaking changes on the
4584community.  During that time we will still be doing `npm@2` releases, with
4585`npm@2` tagged as `latest` and `next`.  We'll _also_ be publishing new
4586releases of `npm@3` as `npm@v3.x-next` and `npm@v3.x-latest` alongside those
4587versions until we're ready to switch everyone over to `npm@3`.  We need your
4588help to find and fix its remaining bugs.  It's a significant rewrite, so we
4589are _sure_ there still significant bugs remaining.  So do us a solid and
4590deploy it in non-critical CI environments and for day-to-day use, but maybe
4591don't use it for production maintenance or frontline continuous deployment
4592just yet.
4593
4594
4595#### NEW CONFIGS, LESS PROGRESS
4596
4597* [`423d8f7`](https://github.com/npm/npm/commit/423d8f7)
4598  [#8704](https://github.com/npm/npm/issues/8704)
4599  Add the ability to disable the new progress bar with `--no-progress`
4600  ([@iarna](https://github.com/iarna))
4601
4602#### AND BUG FIXES
4603
4604* [`b3ee452`](https://github.com/npm/npm/commit/b3ee452)
4605  [#9038](https://github.com/npm/npm/pull/9038)
4606  We previously disabled the use of the new `fs.access` API on Windows, but
4607  the bug we were seeing is fixed in `io.js@1.5.0` so we now use `fs.access`
4608  if you're using that version or greater.
4609  ([@iarna](https://github.com/iarna))
4610
4611* [`b181fa3`](https://github.com/npm/npm/commit/b181fa3)
4612  [#8921](https://github.com/npm/npm/issues/8921)
4613  [#8637](https://github.com/npm/npm/issues/8637)
4614  Rejigger how we validate modules for install. This allow is to fix
4615  a problem where arch/os checking wasn't being done at all.
4616  It also made it easy to add back in a check that declines to
4617  install a module in itself unless you force it.
4618  ([@iarna](https://github.com/iarna))
4619
4620#### AND A WHOLE BUNCH OF SUBDEP VERSIONS
4621
4622These are all development dependencies and semver-compatible subdep
4623upgrades, so they should not have visible impact on users.
4624
4625* [`6b3f6d9`](https://github.com/npm/npm/commit/6b3f6d9) `standard@4.3.3`
4626* [`f4e22e5`](https://github.com/npm/npm/commit/f4e22e5) `readable-stream@2.0.2` (inside concat-stream)
4627* [`f130bfc`](https://github.com/npm/npm/commit/f130bfc) `minimatch@2.0.10` (inside node-gyp's copy of glob)
4628* [`36c6a0d`](https://github.com/npm/npm/commit/36c6a0d) `caseless@0.11.0`
4629* [`80df59c`](https://github.com/npm/npm/commit/80df59c) `chalk@1.1.0`
4630* [`ea935d9`](https://github.com/npm/npm/commit/ea935d9) `bluebird@2.9.34`
4631* [`3588a0c`](https://github.com/npm/npm/commit/3588a0c) `extend@3.0.0`
4632* [`c6a8450`](https://github.com/npm/npm/commit/c6a8450) `form-data@1.0.0-rc2`
4633* [`a04925b`](https://github.com/npm/npm/commit/a04925b) `har-validator@1.8.0`
4634* [`ee7c095`](https://github.com/npm/npm/commit/ee7c095) `has-ansi@2.0.0`
4635* [`944fc34`](https://github.com/npm/npm/commit/944fc34) `hawk@3.1.0`
4636* [`783dc7b`](https://github.com/npm/npm/commit/783dc7b) `lodash._basecallback@3.3.1`
4637* [`acef0fe`](https://github.com/npm/npm/commit/acef0fe) `lodash._baseclone@3.3.0`
4638* [`dfe959a`](https://github.com/npm/npm/commit/dfe959a) `lodash._basedifference@3.0.3`
4639* [`a03bc76`](https://github.com/npm/npm/commit/a03bc76) `lodash._baseflatten@3.1.4`
4640* [`8a07d50`](https://github.com/npm/npm/commit/8a07d50) `lodash._basetostring@3.0.1`
4641* [`7785e3f`](https://github.com/npm/npm/commit/7785e3f) `lodash._baseuniq@3.0.3`
4642* [`826fb35`](https://github.com/npm/npm/commit/826fb35) `lodash._createcache@3.1.2`
4643* [`76030b3`](https://github.com/npm/npm/commit/76030b3) `lodash._createpadding@3.6.1`
4644* [`1a49ec6`](https://github.com/npm/npm/commit/1a49ec6) `lodash._getnative@3.9.1`
4645* [`eebe47f`](https://github.com/npm/npm/commit/eebe47f) `lodash.isarguments@3.0.4`
4646* [`09994d4`](https://github.com/npm/npm/commit/09994d4) `lodash.isarray@3.0.4`
4647* [`b6f8dbf`](https://github.com/npm/npm/commit/b6f8dbf) `lodash.keys@3.1.2`
4648* [`c67dd6b`](https://github.com/npm/npm/commit/c67dd6b) `lodash.pad@3.1.1`
4649* [`4add042`](https://github.com/npm/npm/commit/4add042) `lodash.repeat@3.0.1`
4650* [`e04993c`](https://github.com/npm/npm/commit/e04993c) `lru-cache@2.6.5`
4651* [`2ed7da4`](https://github.com/npm/npm/commit/2ed7da4) `mime-db@1.15.0`
4652* [`ae08244`](https://github.com/npm/npm/commit/ae08244) `mime-types@2.1.3`
4653* [`e71410e`](https://github.com/npm/npm/commit/e71410e) `os-homedir@1.0.1`
4654* [`67c13e0`](https://github.com/npm/npm/commit/67c13e0) `process-nextick-args@1.0.2`
4655* [`12ee041`](https://github.com/npm/npm/commit/12ee041) `qs@4.0.0`
4656* [`15564a6`](https://github.com/npm/npm/commit/15564a6) `spdx-license-ids@1.0.2`
4657* [`8733bff`](https://github.com/npm/npm/commit/8733bff) `supports-color@2.0.0`
4658* [`230943c`](https://github.com/npm/npm/commit/230943c) `tunnel-agent@0.4.1`
4659* [`26a4653`](https://github.com/npm/npm/commit/26a4653) `ansi-styles@2.1.0`
4660* [`3d27081`](https://github.com/npm/npm/commit/3d27081) `bl@1.0.0`
4661* [`9efa110`](https://github.com/npm/npm/commit/9efa110) `async@1.4.0`
4662
4663#### MERGED FORWARD
4664
4665* As usual, we've ported all the `npm@2` goodies in this week's
4666  [v2.13.3](https://github.com/npm/npm/releases/tag/v2.13.3)
4667  release.
4668
4669### v3.1.3 (2015-07-17):
4670
4671Rebecca: So Kat, I hear this week's other release uses a dialog between us to
4672explain what changed?
4673
4674Kat: Well, you could say that…
4675
4676Rebecca: I would! This week I fixed more `npm@3` bugs!
4677
4678Kat: That sounds familiar.
4679
4680Rebecca: Eheheheh, well, before we look at those, a word from our sponsor…
4681
4682#### BETA IS AS BETA DOES
4683
4684**_THIS IS BETA SOFTWARE_**.  Yes, we're still reminding you of this.  No,
4685you can't be excused.  `npm@3` will remain in beta until we're confident
4686that it's stable and have assessed the effect of the breaking changes on the
4687community.  During that time we will still be doing `npm@2` releases, with
4688`npm@2` tagged as `latest` and `next`.  We'll _also_ be publishing new
4689releases of `npm@3` as `npm@v3.x-next` and `npm@v3.x-latest` alongside those
4690versions until we're ready to switch everyone over to `npm@3`.  We need your
4691help to find and fix its remaining bugs.  It's a significant rewrite, so we
4692are _sure_ there still significant bugs remaining.  So do us a solid and
4693deploy it in non-critical CI environments and for day-to-day use, but maybe
4694don't use it for production maintenance or frontline continuous deployment
4695just yet.
4696
4697Rebecca: Ok, enough of the dialoguing, that's Kat's schtick.  But do remember
4698kids, betas hide in dark hallways waiting to break your stuff, stuff like…
4699
4700#### SO MANY LINKS YOU COULD MAKE A CHAIN
4701
4702* [`6d69ec9`](https://github.com/npm/npm/6d69ec9)
4703  [#8967](https://github.com/npm/npm/issues/8967)
4704  Removing a module linked into your globals would result in having
4705  all of its subdeps removed. Since the npm release process does
4706  exactly this, it burned me -every- -single- -week-. =D
4707  While we're here, we also removed extraneous warns that used to
4708  spill out when you'd remove a symlink.
4709  ([@iarna](https://github.com/iarna))
4710
4711* [`fdb360f`](https://github.com/npm/npm/fdb360f)
4712  [#8874](https://github.com/npm/npm/issues/8874)
4713  Linking scoped modules was failing outright, but this fixes that
4714  and updates our tests so we don't do it again.
4715  ([@iarna](https://github.com/iarna))
4716
4717#### WE'LL TRY NOT TO CRACK YOUR WINDOWS
4718
4719* [`9fafb18`](https://github.com/npm/npm/9fafb18)
4720  [#8701](https://github.com/npm/npm/issues/8701)
4721  `npm@3` introduced permissions checks that run before it actually tries to
4722  do something. This saves you from having an install fail half way
4723  through. We did this using the shiny new `fs.access` function available
4724  in `node 0.12` and `io.js`, with fallback options for older nodes. Unfortunately
4725  the way we implemented the fallback caused racey problems for Windows systems.
4726  This fixes that by ensuring we only ever run any one check on a directory once.
4727  BUT it turns out there are bugs in `fs.access` on Windows. So this ALSO just disables
4728  the use of `fs.access` on Windows entirely until that settles out.
4729  ([@iarna](https://github.com/iarna))
4730
4731#### ZOOM ZOOM, DEP UPDATES
4732
4733* [`5656baa`](https://github.com/npm/npm/5656baa)
4734  `gauge@1.2.2`: Better handle terminal resizes while printing the progress bar
4735  ([@iarna](https://github.com/iarna))
4736
4737#### MERGED FORWARD
4738
4739* Check out Kat's [super-fresh release notes for v2.13.2](https://github.com/npm/npm/releases/tag/v2.13.2)
4740  and see all the changes we ported from `npm@2`.
4741
4742### v3.1.2
4743
4744#### SO VERY BETA RELEASE
4745
4746So, `v3.1.1` managed to actually break installing local modules.  And then
4747immediately after I drove to an island for the weekend. ��  So let's get
4748this fixed outside the usual release train!
4749
4750Fortunately it didn't break installing _global_ modules and so you could
4751swap it out for another version at least.
4752
4753#### DISCLAIMER MEANS WHAT IT SAYS
4754
4755**_THIS IS BETA SOFTWARE_**.  Yes, we're still reminding you of this.  No,
4756you can't be excused.  `npm@3` will remain in beta until we're confident
4757that it's stable and have assessed the effect of the breaking changes on the
4758community.  During that time we will still be doing `npm@2` releases, with
4759`npm@2` tagged as `latest` and `next`.  We'll _also_ be publishing new
4760releases of `npm@3` as `npm@v3.x-next` and `npm@v3.x-latest` alongside those
4761versions until we're ready to switch everyone over to `npm@3`.  We need your
4762help to find and fix its remaining bugs.  It's a significant rewrite, so we
4763are _sure_ there still significant bugs remaining.  So do us a solid and
4764deploy it in non-critical CI environments and for day-to-day use, but maybe
4765don't use it for production maintenance or frontline continuous deployment
4766just yet.
4767
4768#### THIS IS IT, THE REASON
4769
4770* [`f5e19df`](https://github.com/npm/npm/commit/f5e19df)
4771  [#8893](https://github.com/npm/npm/issues/8893)
4772  Fix crash when installing local modules introduced by the fix for
4773  [#8608](https://github.com/npm/npm/issues/8608)
4774  ([@iarna](https://github.com/iarna)
4775
4776### v3.1.1
4777
4778#### RED EYE RELEASE
4779
4780Rebecca's up too late writing tests, so you can have `npm@3` bug fixes!  Lots
4781of great new issues from you all! ❤️️  Keep it up!
4782
4783#### YUP STILL BETA, PLEASE PAY ATTENTION
4784
4785**_THIS IS BETA SOFTWARE_**.  Yes, we're still reminding you of this.  No,
4786you can't be excused.  `npm@3` will remain in beta until we're confident
4787that it's stable and have assessed the effect of the breaking changes on the
4788community.  During that time we will still be doing `npm@2` releases, with
4789`npm@2` tagged as `latest` and `next`.  We'll _also_ be publishing new
4790releases of `npm@3` as `npm@v3.x-next` and `npm@v3.x-latest` alongside those
4791versions until we're ready to switch everyone over to `npm@3`.  We need your
4792help to find and fix its remaining bugs.  It's a significant rewrite, so we
4793are _sure_ there still significant bugs remaining.  So do us a solid and
4794deploy it in non-critical CI environments and for day-to-day use, but maybe
4795don't use it for production maintenance or frontline continuous deployment
4796just yet.
4797
4798#### BOOGS
4799
4800* [`9badfd6`](https://github.com/npm/npm/commit/9babfd63f19f2d80b2d2624e0963b0bdb0d76ef4)
4801  [#8608](https://github.com/npm/npm/issues/8608)
4802  Make global installs and uninstalls MUCH faster by only reading the directories of
4803  modules referred to by arguments.
4804  ([@iarna](https://github.com/iarna)
4805* [`075a5f0`](https://github.com/npm/npm/commit/075a5f046ab6837f489b08d44cb601e9fdb369b7)
4806  [#8660](https://github.com/npm/npm/issues/8660)
4807  Failed optional deps would still result in the optional deps own
4808  dependencies being installed. We now find them and fail them out of the
4809  tree.
4810  ([@iarna](https://github.com/iarna)
4811* [`c9fbbb5`](https://github.com/npm/npm/commit/c9fbbb540083396ea58fd179d81131d959d8e049)
4812  [#8863](https://github.com/npm/npm/issues/8863)
4813  The "no compatible version found" error message was including only the
4814  version requested, not the name of the package we wanted. Ooops!
4815  ([@iarna](https://github.com/iarna)
4816* [`32e6bbd`](https://github.com/npm/npm/commit/32e6bbd21744dcbe8c0720ab53f60caa7f2a0588)
4817  [#8806](https://github.com/npm/npm/issues/8806)
4818  The "uninstall" lifecycle was being run after all of a module's dependencies has been
4819  removed. This reverses that order-- this means "uninstall" lifecycles can make use
4820  of the package's dependencies.
4821  ([@iarna](https://github.com/iarna)
4822
4823#### MERGED FORWARD
4824
4825* Check out the [v2.13.1 release notes](https://github.com/npm/npm/releases/tag/v2.13.1)
4826  and see all the changes we ported from `npm@2`.
4827
4828### v3.1.0 (2015-07-02):
4829
4830This has been a brief week of bug fixes, plus some fun stuff merged forward
4831from this weeks 2.x release. See the
4832[2.13.0 release notes](https://github.com/npm/npm/releases/tag/v2.13.0)
4833for details on that.
4834
4835You all have been AWESOME with
4836[all](https://github.com/npm/npm/milestones/3.x)
4837[the](https://github.com/npm/npm/milestones/3.2.0)
4838`npm@3` bug reports! Thank you and keep up the great work!
4839
4840#### NEW PLACE, SAME CODE
4841
4842Remember how last week we said `npm@3` would go to `3.0-next` and latest
4843tags? Yeaaah, no, please use `npm@v3.x-next` and `npm@v3.x-latest` going forward.
4844
4845I dunno why we said "suuure, we'll never do a feature release till we're out
4846of beta" when we're still forward porting `npm@2.x` features. `¯\_(ツ)_/¯`
4847
4848If you do accidentally use the old tag names, I'll be maintaining them
4849for a few releases, but they won't be around forever.
4850
4851#### YUP STILL BETA, PLEASE PAY ATTENTION
4852
4853**_THIS IS BETA SOFTWARE_**. `npm@3` will remain in beta until we're
4854confident that it's stable and have assessed the effect of the breaking
4855changes on the community. During that time we will still be doing `npm@2`
4856releases, with `npm@2` tagged as `latest` and `next`. We'll _also_ be
4857publishing new releases of `npm@3` as `npm@v3.x-next` and `npm@v3.x-latest`
4858alongside those versions until we're ready to switch everyone over to
4859`npm@3`. We need your help to find and fix its remaining bugs. It's a
4860significant rewrite, so we are _sure_ there still significant bugs
4861remaining. So do us a solid and deploy it in non-critical CI environments
4862and for day-to-day use, but maybe don't use it for production maintenance
4863or frontline continuous deployment just yet.
4864
4865#### BUGS ON THE WINDOWS
4866
4867  * [`0030ade`](https://github.com/npm/npm/commit/0030ade)
4868    [#8685](https://github.com/npm/npm/issues/8685)
4869    Windows would hang when trying to clone git repos
4870    ([@euprogramador](https://github.com/npm/npm/pull/8777))
4871  * [`b259bcc`](https://github.com/npm/npm/commit/b259bcc)
4872    [#8786](https://github.com/npm/npm/pull/8786)
4873    Windows permissions checks would cause installations to fail under some
4874    circumstances. We're disabling the checks entirely for this release.
4875    I'm hoping to check back with this next week to get a Windows friendly
4876    fix in.
4877    ([@iarna](https://github.com/iarna))
4878
4879#### SO MANY BUGS SQUASHED, JUST CALL US RAID
4880
4881  * [`0848698`](https://github.com/npm/npm/commit/0848698)
4882    [#8686](https://github.com/npm/npm/pull/8686)
4883    Stop leaving progress bar cruft on the screen during publication
4884    ([@ajcrites](https://github.com/ajcrites))
4885  * [`57c3cea`](https://github.com/npm/npm/commit/57c3cea)
4886    [#8695](https://github.com/npm/npm/pull/8695)
4887    Remote packages with shrinkwraps made npm cause node + iojs to explode
4888    and catch fire. NO MORE.
4889    ([@iarna](https://github.com/iarna))
4890  * [`2875ba3`](https://github.com/npm/npm/commit/2875ba3)
4891    [#8723](https://github.com/npm/npm/pull/8723)
4892    I uh, told you that engineStrict checking had gone away last week.
4893    TURNS OUT I LIED. So this is making that actually be true.
4894    ([@iarna](https://github.com/iarna))
4895  * [`28064e5`](https://github.com/npm/npm/commit/28064e5)
4896    [#3358](https://github.com/npm/npm/issues/3358)
4897    Consistently allow Unicode BOMs at the start of package.json files.
4898    Previously this was allowed some of time, like when you were installing
4899    modules, but not others, like running npm version or installing w/
4900    `--save`.
4901    ([@iarna](https://github.com/iarna))
4902  * [`3cb6ad2`](https://github.com/npm/npm/commit/3cb6ad2)
4903    [#8736](https://github.com/npm/npm/issues/8766)
4904    `npm@3` wasn't running the "install" lifecycle in your current (toplevel)
4905    module. This broke modules that relied on C compilation. BOO.
4906    ([@iarna](https://github.com/iarna))
4907  * [`68da583`](https://github.com/npm/npm/commit/68da583)
4908    [#8766](https://github.com/npm/npm/issues/8766)
4909    To my great shame, `npm link package` wasn't working AT ALL if you
4910    didn't have `package` already installed.
4911    ([@iarna](https://github.com/iarna))
4912  * [`edd7448`](https://github.com/npm/npm/commit/edd7448)
4913    `read-package-tree@5.0.0`: This update makes read-package-tree not explode
4914    when there's bad data in your node_modules folder. `npm@2` silently
4915    ignores this sort of thing.
4916    ([@iarna](https://github.com/iarna))
4917  * [`0bb08c8`](https://github.com/npm/npm/commit/0bb08c8)
4918    [#8778](https://github.com/npm/npm/pull/8778)
4919    RELATEDLY, we now show any errors from your node_modules folder after
4920    your installation completes as warnings. We're also reporting these in
4921    `npm ls` now.
4922    ([@iarna](https://github.com/iarna))
4923  * [`6c248ff`](https://github.com/npm/npm/commit/6c248ff)
4924    [#8779](https://github.com/npm/npm/pull/8779)
4925    Hey, you know how we used to complain if your `package.json` was
4926    missing stuff? Well guess what, we are again. I know, I know, you can
4927    thank me later.
4928    ([@iarna](https://github.com/iarna))
4929  * [`d6f7c98`](https://github.com/npm/npm/commit/d6f7c98)
4930    So, when we were rolling back after errors we had untested code that
4931    tried to undo moves. Being untested it turns out it was very broken.
4932    I've removed it until we have time to do this right.
4933    ([@iarna](https://github.com/iarna))
4934
4935#### NEW VERSION
4936
4937Just the one. Others came in via the 2.x release. Do check out its
4938changelog, immediately following this message.
4939
4940  * [`4e602c5`](https://github.com/npm/npm/commit/4e602c5) `lodash@3.2.2`
4941
4942### v3.0.0 (2015-06-25):
4943
4944Wow, it's finally here! This has been a long time coming. We are all
4945delighted and proud to be getting this out into the world, and are looking
4946forward to working with the npm user community to get it production-ready
4947as quickly as possible.
4948
4949`npm@3` constitutes a nearly complete rewrite of npm's installer to be
4950easier to maintain, and to bring a bunch of valuable new features and
4951design improvements to you all.
4952
4953[@othiym23](https://github.com/othiym23) and
4954[@isaacs](https://github.com/isaacs) have been
4955[talking about the changes](http://blog.npmjs.org/post/91303926460/npm-cli-roadmap-a-periodic-update)
4956in this release for well over a year, and it's been the primary focus of
4957[@iarna](https://github.com/iarna) since she joined the team.
4958
4959Given that this is a near-total rewrite, all changes listed here are
4960[@iarna](https://github.com/iarna)'s work unless otherwise specified.
4961
4962#### NO, REALLY, READ THIS PARAGRAPH. IT'S THE IMPORTANT ONE.
4963
4964**_THIS IS BETA SOFTWARE_**. `npm@3` will remain in beta until we're
4965confident that it's stable and have assessed the effect of the breaking
4966changes on the community. During that time we will still be doing `npm@2`
4967releases, with `npm@2` tagged as `latest` and `next`. We'll _also_ be
4968publishing new releases of `npm@3` as `npm@3.0-next` and `npm@3.0-latest`
4969alongside those versions until we're ready to switch everyone over to
4970`npm@3`. We need your help to find and fix its remaining bugs. It's a
4971significant rewrite, so we are _sure_ there still significant bugs
4972remaining. So do us a solid and deploy it in non-critical CI environments
4973and for day-to-day use, but maybe don't use it for production maintenance
4974or frontline continuous deployment just yet.
4975
4976#### BREAKING CHANGES
4977
4978##### `peerDependencies`
4979
4980`grunt`, `gulp`, and `broccoli` plugin maintainers take note! You will be
4981affected by this change!
4982
4983* [#6930](https://github.com/npm/npm/issues/6930)
4984  ([#6565](https://github.com/npm/npm/issues/6565))
4985  `peerDependencies` no longer cause _anything_ to be implicitly installed.
4986  Instead, npm will now warn if a packages `peerDependencies` are missing,
4987  but it's up to the consumer of the module (i.e. you) to ensure the peers
4988  get installed / are included in `package.json` as direct `dependencies`
4989  or `devDependencies` of your package.
4990* [#3803](https://github.com/npm/npm/issues/3803)
4991  npm also no longer checks `peerDependencies` until after it has fully
4992  resolved the tree.
4993
4994This shifts the responsibility for fulfilling peer dependencies from library
4995/ framework / plugin maintainers to application authors, and is intended to
4996get users out of the dependency hell caused by conflicting `peerDependency`
4997constraints. npm's job is to keep you _out_ of dependency hell, not put you
4998in it.
4999
5000##### `engineStrict`
5001
5002* [#6931](https://github.com/npm/npm/issues/6931) The rarely-used
5003  `package.json` option `engineStrict` has been deprecated for several
5004  months, producing warnings when it was used. Starting with `npm@3`, the
5005  value of the field is ignored, and engine violations will only produce
5006  warnings. If you, as a user, want strict `engines` field enforcement,
5007  just run `npm config set engine-strict true`.
5008
5009As with the peer dependencies change, this is about shifting control from
5010module authors to application authors. It turns out `engineStrict` was very
5011difficult to understand even harder to use correctly, and more often than
5012not just made modules using it difficult to deploy.
5013
5014##### `npm view`
5015
5016* [`77f1aec`](https://github.com/npm/npm/commit/77f1aec) With `npm view` (aka
5017  `npm info`), always return arrays for versions, maintainers, etc. Previously
5018  npm would return a plain value if there was only one, and multiple values if
5019  there were more. ([@KenanY](https://github.com/KenanY))
5020
5021#### KNOWN BUGS
5022
5023Again, this is a _**BETA RELEASE**_, so not everything is working just yet.
5024Here are the issues that we already know about. If you run into something
5025that isn't on this list,
5026[let us know](https://github.com/npm/npm/issues/new)!
5027
5028* [#8575](https://github.com/npm/npm/issues/8575)
5029  Circular deps will never be removed by the prune-on-uninstall code.
5030* [#8588](https://github.com/npm/npm/issues/8588)
5031  Local deps where the dep name and the name in the package.json differ
5032  don't result in an error.
5033* [#8637](https://github.com/npm/npm/issues/8637)
5034  Modules can install themselves as direct dependencies. `npm@2` declined to
5035  do this.
5036* [#8660](https://github.com/npm/npm/issues/8660)
5037  Dependencies of failed optional dependencies aren't rolled back when the
5038  optional dependency is, and then are reported as extraneous thereafter.
5039
5040#### NEW FEATURES
5041
5042##### The multi-stage installer!
5043
5044* [#5919](https://github.com/npm/npm/issues/5919)
5045  Previously the installer had a set of steps it executed for each package
5046  and it would immediately start executing them as soon as it decided to
5047  act on a package.
5048
5049  But now it executes each of those steps at the same time for all
5050  packages, waiting for all of one stage to complete before moving on. This
5051  eliminates many race conditions and makes the code easier to reason
5052  about.
5053
5054This fixes, for instance:
5055
5056* [#6926](https://github.com/npm/npm/issues/6926)
5057  ([#5001](https://github.com/npm/npm/issues/5001),
5058  [#6170](https://github.com/npm/npm/issues/6170))
5059  `install` and `postinstall` lifecycle scripts now only execute `after`
5060  all the module with the script's dependencies are installed.
5061
5062##### Install: it looks different!
5063
5064You'll now get a tree much like the one produced by `npm ls` that
5065highlights in orange the packages that were installed. Similarly, any
5066removed packages will have their names prefixed by a `-`.
5067
5068Also, `npm outdated` used to include the name of the module in the
5069`Location` field:
5070
5071```
5072Package                Current  Wanted  Latest  Location
5073deep-equal             MISSING   1.0.0   1.0.0  deep-equal
5074glob                     4.5.3   4.5.3  5.0.10  rimraf > glob
5075```
5076
5077Now it shows the module that required it as the final point in the
5078`Location` field:
5079
5080```
5081Package                Current  Wanted  Latest  Location
5082deep-equal             MISSING   1.0.0   1.0.0  npm
5083glob                     4.5.3   4.5.3  5.0.10  npm > rimraf
5084```
5085
5086Previously the `Location` field was telling you where the module was on
5087disk. Now it tells you what requires the module. When more than one thing
5088requires the module you'll see it listed once for each thing requiring it.
5089
5090##### Install: it works different!
5091
5092* [#6928](https://github.com/npm/npm/issues/6928)
5093  ([#2931](https://github.com/npm/npm/issues/2931)
5094  [#2950](https://github.com/npm/npm/issues/2950))
5095  `npm install` when you have an `npm-shrinkwrap.json` will ensure you have
5096  the modules specified in it are installed in exactly the shape specified
5097  no matter what you had when you started.
5098* [#6913](https://github.com/npm/npm/issues/6913)
5099  ([#1341](https://github.com/npm/npm/issues/1341)
5100  [#3124](https://github.com/npm/npm/issues/3124)
5101  [#4956](https://github.com/npm/npm/issues/4956)
5102  [#6349](https://github.com/npm/npm/issues/6349)
5103  [#5465](https://github.com/npm/npm/issues/5465))
5104  `npm install` when some of your dependencies are missing sub-dependencies
5105  will result in those sub-dependencies being installed. That is, `npm
5106  install` now knows how to fix broken installs, most of the time.
5107* [#5465](https://github.com/npm/npm/issues/5465)
5108  If you directly `npm install` a module that's already a subdep of
5109  something else and your new version is incompatible, it will now install
5110  the previous version nested in the things that need it.
5111* [`a2b50cf`](https://github.com/npm/npm/commit/a2b50cf)
5112  [#5693](https://github.com/npm/npm/issues/5693)
5113  When installing a new module, if it's mentioned in your
5114  `npm-shrinkwrap.json` or your `package.json` use the version specifier
5115  from there if you didn't specify one yourself.
5116
5117##### Flat, flat, flat!
5118
5119Your dependencies will now be installed *maximally flat*.  Insofar as is
5120possible, all of your dependencies, and their dependencies, and THEIR
5121dependencies will be installed in your project's `node_modules` folder with no
5122nesting.  You'll only see modules nested underneath one another when two (or
5123more) modules have conflicting dependencies.
5124
5125* [#3697](https://github.com/npm/npm/issues/3697)
5126  This will hopefully eliminate most cases where Windows users ended up
5127  with paths that were too long for Explorer and other standard tools to
5128  deal with.
5129* [#6912](https://github.com/npm/npm/issues/6912)
5130  ([#4761](https://github.com/npm/npm/issues/4761)
5131  [#4037](https://github.com/npm/npm/issues/4037))
5132  This also means that your installs will be deduped from the start.
5133* [#5827](https://github.com/npm/npm/issues/5827)
5134  This deduping even extends to git deps.
5135* [#6936](https://github.com/npm/npm/issues/6936)
5136  ([#5698](https://github.com/npm/npm/issues/5698))
5137  Various commands are dedupe aware now.
5138
5139This has some implications for the behavior of other commands:
5140
5141* `npm uninstall` removes any dependencies of the module that you specified
5142  that aren't required by any other module. Previously, it would only
5143  remove those that happened to be installed under it, resulting in left
5144  over cruft if you'd ever deduped.
5145* `npm ls` now shows you your dependency tree organized around what
5146  requires what, rather than where those modules are on disk.
5147* [#6937](https://github.com/npm/npm/issues/6937)
5148  `npm dedupe` now flattens the tree in addition to deduping.
5149
5150And bundling of dependencies when packing or publishing changes too:
5151
5152* [#2442](https://github.com/npm/npm/issues/2442)
5153  bundledDependencies no longer requires that you specify deduped sub deps.
5154  npm can now see that a dependency is required by something bundled and
5155  automatically include it. To put that another way, bundledDependencies
5156  should ONLY include things that you included in dependencies,
5157  optionalDependencies or devDependencies.
5158* [#5437](https://github.com/npm/npm/issues/5437)
5159  When bundling a dependency that's both a `devDependency` and the child of
5160  a regular `dependency`, npm bundles the child dependency.
5161
5162As a demonstration of our confidence in our own work, npm's own
5163dependencies are now flattened, deduped, and bundled in the `npm@3` style.
5164This means that `npm@3` can't be packed or published by `npm@2`, which is
5165something to be aware of if you're hacking on npm.
5166
5167##### Shrinkwraps: they are a-changin'!
5168
5169First of all, they should be idempotent now
5170([#5779](https://github.com/npm/npm/issues/5779)). No more differences
5171because the first time you install (without `npm-shrinkwrap.json`) and the
5172second time (with `npm-shrinkwrap.json`).
5173
5174* [#6781](https://github.com/npm/npm/issues/6781)
5175  Second, if you save your changes to `package.json` and you have
5176  `npm-shrinkwrap.json`, then it will be updated as well. This applies to
5177  all of the commands that update your tree:
5178  * `npm install --save`
5179  * `npm update --save`
5180  * `npm dedupe --save` ([#6410](https://github.com/npm/npm/issues/6410))
5181  * `npm uninstall --save`
5182* [#4944](https://github.com/npm/npm/issues/4944)
5183  ([#5161](https://github.com/npm/npm/issues/5161)
5184  [#5448](https://github.com/npm/npm/issues/5448))
5185  Third, because `node_modules` folders are now deduped and flat,
5186  shrinkwrap has to also be smart enough to handle this.
5187
5188And finally, enjoy this shrinkwrap bug fix:
5189
5190* [#3675](https://github.com/npm/npm/issues/3675)
5191  When shrinkwrapping a dependency that's both a `devDependency` and the
5192  child of a regular `dependency`, npm now correctly includes the child.
5193
5194##### The Age of Progress (Bars)!
5195
5196* [#6911](https://github.com/npm/npm/issues/6911)
5197  ([#1257](https://github.com/npm/npm/issues/1257)
5198  [#5340](https://github.com/npm/npm/issues/5340)
5199  [#6420](https://github.com/npm/npm/issues/6420))
5200  The spinner is gone (yay? boo? will you miss it?), and in its place npm
5201  has _progress bars_, so you actually have some sense of how long installs
5202  will take. It's provided in Unicode and non-Unicode variants, and Unicode
5203  support is automatically detected from your environment.
5204
5205#### TINY JEWELS
5206
5207The bottom is where we usually hide the less interesting bits of each
5208release, but each of these are small but incredibly useful bits of this
5209release, and very much worth checking out:
5210
5211* [`9ebe312`](https://github.com/npm/npm/commit/9ebe312)
5212  Build system maintainers, rejoice: npm does a better job of cleaning up
5213  after itself in your temporary folder.
5214* [#6942](https://github.com/npm/npm/issues/6942)
5215  Check for permissions issues prior to actually trying to install
5216  anything.
5217* Emit warnings at the end of the installation when possible, so that
5218  they'll be on your screen when npm stops.
5219* [#3505](https://github.com/npm/npm/issues/3505)
5220  `npm --dry-run`: You can now ask that npm only report what it _would have
5221  done_ with the new `--dry-run` flag. This can be passed to any of the
5222  commands that change your `node_modules` folder: `install`, `uninstall`,
5223  `update` and `dedupe`.
5224* [`81b46fb`](https://github.com/npm/npm/commit/81b46fb)
5225  npm now knows the correct URLs for `npm bugs` and `npm repo` for
5226  repositories hosted on Bitbucket and GitLab, just like it does for GitHub
5227  (and GitHub support now extends to projects hosted as gists as well as
5228  traditional repositories).
5229* [`5be4008a`](https://github.com/npm/npm/commit/5be4008a09730cfa3891d9f145e4ec7f2accd144)
5230  npm has been cleaned up to pass the [`standard`](http://npm.im/standard)
5231  style checker. Forrest and Rebecca both feel this makes it easier to read
5232  and understand the code, and should also make it easier for new
5233  contributors to put merge-ready patches.
5234  ([@othiym23](https://github.com/othiym23))
5235
5236#### ZARRO BOOGS
5237
5238* [`6401643`](https://github.com/npm/npm/commit/6401643)
5239  Make sure the global install directory exists before installing to it.
5240  ([@thefourtheye](https://github.com/thefourtheye))
5241* [#6158](https://github.com/npm/npm/issues/6158)
5242  When we remove modules we do so inside-out running unbuild for each one.
5243* [`960a765`](https://github.com/npm/npm/commit/960a765)
5244  The short usage information for each subcommand has been brought in sync
5245  with the documentation. ([@smikes](https://github.com/smikes))
5246