UNPKG

253 kBMarkdownView Raw
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 "verison" 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 redundent 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 elminate 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 (preferrably 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 redundent 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 dependecy
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
\No newline at end of file