UNPKG

81.2 kBMarkdownView Raw
1## v4.6.1 (2017-04-21)
2
3A little release to tide you over while we hammer out the last bits for npm@5.
4
5### FEATURES
6
7* [`d13c9b2f2`](https://github.com/npm/npm/commit/d13c9b2f24b6380427f359b6e430b149ac8aaa79)
8 `init-package-json@1.10.0`:
9 The `name:` prompt is now `package name:` to make this less ambiguous for new users.
10
11 The default package name is now a valid package name. For example: If your package directory
12 has mixed case, the default package name will be all lower case.
13* [`f08c66323`](https://github.com/npm/npm/commit/f08c663231099f7036eb82b92770806a3a79cdf1)
14 [#16213](https://github.com/npm/npm/pull/16213)
15 Add `--allow-same-version` option to `npm version` so that you can use `npm version` to run
16 your version lifecycles and tag your git repo without actually changing the version number in
17 your `package.json`.
18 ([@lucastheisen](https://github.com/lucastheisen))
19* [`f5e8becd0`](https://github.com/npm/npm/commit/f5e8becd05e0426379eb0c999abdbc8e87a7f6f2)
20 Timing has been added throughout the install implementation. You can see it by running
21 a command with `--loglevel=timing`. You can also run commands with `--timing` which will write
22 an `npm-debug.log` even on success and add an entry to `_timing.json` in your cache with
23 the timing information from that run.
24 ([@iarna](https://github.com/iarna))
25
26### BUG FIXES
27
28* [`9c860f2ed`](https://github.com/npm/npm/commit/9c860f2ed3bdea1417ed059b019371cd253db2ad)
29 [#16021](https://github.com/npm/npm/pull/16021)
30 Fix a crash in `npm doctor` when used with a registry that does not support
31 the `ping` API endpoint.
32 ([@watilde](https://github.com/watilde))
33* [`65b9943e9`](https://github.com/npm/npm/commit/65b9943e9424c67547b0029f02b0258e35ba7d26)
34 [#16364](https://github.com/npm/npm/pull/16364)
35 Shorten the ELIFECYCLE error message. The shorter error message should make it much
36 easier to discern the actual cause of the error.
37 ([@j-f1](https://github.com/j-f1))
38* [`a87a4a835`](https://github.com/npm/npm/commit/a87a4a8359693518ee41dfeb13c5a8929136772a)
39 `npmlog@4.0.2`:
40 Fix flashing of the progress bar when your terminal is very narrow.
41 ([@iarna](https://github.com/iarna))
42* [`41c10974f`](https://github.com/npm/npm/commit/41c10974fe95a2e520e33e37725570c75f6126ea)
43 `write-file-atomic@1.3.2`:
44 Wait for `fsync` to complete before considering our file written to disk.
45 This will improve certain sorts of Windows diagnostic problems.
46* [`2afa9240c`](https://github.com/npm/npm/commit/2afa9240ce5b391671ed5416464f2882d18a94bc)
47 [#16336](https://github.com/npm/npm/pull/16336)
48 Don't ham-it-up when expecting JSON.
49 ([@bdukes](https://github.com/bdukes))
50
51### DOCUMENTATION FIXES
52
53* [`566f3eebe`](https://github.com/npm/npm/commit/566f3eebe741f935b7c1e004bebf19b8625a1413)
54 [#16296](https://github.com/npm/npm/pull/16296)
55 Use a single convention when referring to the `<command>` you're running.
56 ([@desfero](https://github.com/desfero))
57* [`ccbb94934`](https://github.com/npm/npm/commit/ccbb94934d4f677f680c3e2284df3d0ae0e65758)
58 [#16267](https://github.com/npm/npm/pull/16267)
59 Fix a missing space in the example package.json.
60 ([@famousgarkin](https://github.com/famousgarkin))
61
62### DEPENDENCY UPDATES
63
64* [`ebde4ea33`](https://github.com/npm/npm/commit/ebde4ea3363dfc154c53bd537189503863c9b3a4)
65 `hosted-git-info@2.4.2`
66* [`c46ad71bb`](https://github.com/npm/npm/commit/c46ad71bbe27aaa9ee10e107d8bcd665d98544d7)
67 `init-package-json@1.9.6`
68* [`d856d570d`](https://github.com/npm/npm/commit/d856d570d2df602767c039cf03439d647bba2e3d)
69 `npm-registry-client@8.1.1`
70* [`4a2e14436`](https://github.com/npm/npm/commit/4a2e1443613a199665e7adbda034d5b9d10391a2)
71 `readable-stream@2.2.9`
72* [`f0399138e`](https://github.com/npm/npm/commit/f0399138e6d6f1cd7f807d523787a3b129996301)
73 `normalize-package-data@2.3.8`
74
75### v4.5.0 (2017-03-24)
76
77Welcome a wrinkle on npm's registry API!
78
79Codename: Corgi
80
81![corgi-meme](https://cloud.githubusercontent.com/assets/757502/24126107/64c14268-0d89-11e7-871b-d457e6d0082b.jpg)
82
83This release has some bug fixes, but it's mostly about bringing support for
84MUCH smaller package metadata. How much smaller? Well, for npm itself it
85reduces 416K of gzip compressed JSON to 24K.
86
87As a user, all you have to do is update to get to use the new API. If
88you're interested in the details we've [documented the
89changes](https://github.com/npm/registry/blob/master/docs/responses/package-metadata.md)
90in detail.
91
92#### CORGUMENTS
93
94Package metadata: now smaller. This means a smaller cache and less to download.
95
96* [`86dad0d74`](https://github.com/npm/npm/commit/86dad0d747f288eab467d49c9635644d3d44d6f0)
97 Add support for filtered package metadata.
98 ([@iarna](https://github.com/iarna))
99* [`41789cffa`](https://github.com/npm/npm/commit/41789cffac9845603f4bdf3f5b03f412144a0e9f)
100 `npm-registry-client@8.1.0`
101 ([@iarna](https://github.com/iarna))
102
103#### NO SHRINKWRAP, NO PROBLEM
104
105Previously we needed to extract every package's tarball to look for an
106`npm-shrinkwrap.json` before we could begin working through what its
107dependencies were. This was one of the things stopping npm's network
108accesses from happening more concurrently. The new filtered package
109metadata provides a new key, `_hasShrinkwrap`. When that's set to `false`
110then we know we don't have to look for one.
111
112* [`4f5060eb3`](https://github.com/npm/npm/commit/4f5060eb31b9091013e1d6a34050973613a294a3)
113 [#15969](https://github.com/npm/npm/pull/15969)
114 Add support for skipping `npm-shrinkwrap.json` extraction when the
115 registry can affirm that one doesn't exist.
116 ([@iarna](https://github.com/iarna))
117
118#### INTERRUPTING SCRIPTS
119
120* [`878aceb25`](https://github.com/npm/npm/commit/878aceb25e6d6052dac15da74639ce274c8e62c5)
121 [#16129](https://github.com/npm/npm/pull/16129)
122 Better handle Ctrl-C while running scripts. `npm` will now no longer exit
123 until the script it is running has exited. If you press Ctrl-C a second
124 time it kill the script rather than just forwarding the Ctrl-C.
125 ([@jaridmargolin](https://github.com/jaridmargolin))
126
127#### DEPENDENCY UPDATES:
128
129* [`def75eebf`](https://github.com/npm/npm/commit/def75eebf1ad437bf4fd3f5e103cc2d963bd2a73)
130 `hosted-git-info@2.4.1`:
131 Preserve case of the user name part of shortcut specifiers, previously they were lowercased.
132 ([@iarna](https://github.com/iarna))
133* [`eb3789fd1`](https://github.com/npm/npm/commit/eb3789fd18cfb063de9e6f80c3049e314993d235)
134 `node-gyp@3.6.0`: Add support for VS2017 and Chakracore improvements.
135 ([@refack](https://github.com/refack))
136 ([@kunalspathak](https://github.com/kunalspathak))
137* [`245e25315`](https://github.com/npm/npm/commit/245e25315524b95c0a71c980223a27719392ba75)
138 `readable-stream@2.2.6` ([@mcollina](https://github.com/mcollina))
139* [`30357ebc5`](https://github.com/npm/npm/commit/30357ebc5691d7c9e9cdc6e0fe7dc6253220c9c2)
140 `which@1.2.14` ([@isaacs](https://github.com/isaacs))
141
142### v4.4.4 (2017-03-16)
143
144😩😤😅 Okay! We have another `next`
145release for ya today. So, yes! With v4.4.3 we fixed the bug that made
146bundled scoped modules uninstallable. But somehow I overlooked the fact
147that we: A) were using these and B) that made upgrading to v4.4.3 impossible. 😭
148
149So I've renamed those two scoped modules to no longer use scopes and we now
150have a shiny new test to ensure that scoped modules don't creep into our
151transitive deps and make it impossible to upgrade to `npm`.
152
153(None of our woes applies to most of you all because most of you all don't
154use bundled dependencies. `npm` does because we want the published artifact to be
155installable without having to already have `npm`.)
156
157* [`2a7409fcb`](https://github.com/npm/npm/commit/2a7409fcba6a8fab716c80f56987b255983e048e)
158 [#16066](https://github.com/npm/npm/pull/16066)
159 Ensure we aren't using any scoped modules
160 Because `npm`s prior 4.4.3 can't install dependencies that have bundled scoped
161 modules. This didn't show up sooner because they ALSO had a bug that caused
162 bundled scoped modules to not be included in the bundle.
163 ([@iarna](https://github.com/iarna))
164* [`eb4c70796`](https://github.com/npm/npm/commit/eb4c70796c38f24ee9357f5d4a0116db582cc7a9)
165 [#16066](https://github.com/npm/npm/pull/16066)
166 Switch to move-concurrently to remove scoped dependency
167 ([@iarna](https://github.com/iarna))
168
169### v4.4.3 (2017-03-15)
170
171This is a small patch release, mostly because the published tarball for
172v4.4.2 was missing a couple of modules, due to a bug involving scoped
173modules, bundled dependencies and legacy tree layouts.
174
175There are a couple of other things here that happened to be ready to go. So
176without further ado…
177
178#### BUG FIXES
179
180* [`3d80f8f70`](https://github.com/npm/npm/commit/3d80f8f70679ad2b8ce7227d20e8dbce257a47b9)
181 [npm/fs-vacuum#6](https://github.com/npm/fs-vacuum/pull/6)
182 `fs-vacuum@1.2.1`: Make sure we never, ever remove home directories. Previously if your
183 home directory was entirely empty then we might `rmdir` it.
184 ([@helio-frota](https://github.com/helio-frota))
185* [`1af85ca9f`](https://github.com/npm/npm/commit/1af85ca9f4d625f948e85961372de7df3f3774e2)
186 [#16040](https://github.com/npm/npm/pull/16040)
187 Fix bug where bundled transitive dependencies that happened to be
188 installed under bundled scoped dependencies wouldn't be included in the
189 tarball when building a package.
190 ([@iarna](https://github.com/iarna))
191* [`13c7fdc2e`](https://github.com/npm/npm/commit/13c7fdc2e87456a87b1c9385a3daeae228ed7c95)
192 [#16040](https://github.com/npm/npm/pull/16040)
193 Fix a bug where bundled scoped dependencies couldn't be extracted.
194 ([@iarna](https://github.com/iarna))
195* [`d6cde98c2`](https://github.com/npm/npm/commit/d6cde98c2513fe160eab41e31c3198dfde993207)
196 [#16040](https://github.com/npm/npm/pull/16040)
197 Stop printing `ENOENT` errors more than once.
198 ([@iarna](https://github.com/iarna))
199* [`722fbf0f6`](https://github.com/npm/npm/commit/722fbf0f6cf4413cdc24b610bbd60a7dbaf2adfe)
200 [#16040](https://github.com/npm/npm/pull/16040)
201 Rewrite the `extract` action for greater clarity.
202 Specifically, this involves moving things around structurally to do the same
203 thing [`d0c6d194`](https://github.com/npm/npm/commit/d0c6d194) did, but in a more comprehensive manner.
204 This also fixes a long standing bug where errors from the move step would be
205 eaten during this phase and as a result we would get mysterious crashes in
206 the finalize phase when finalize tried to act on them.
207 ([@iarna](https://github.com/iarna))
208* [`6754dabb6`](https://github.com/npm/npm/commit/6754dabb6bd3301504efb3b62f36d3fe70958c19)
209 [#16040](https://github.com/npm/npm/pull/16040)
210 Flatten out `@npmcorp/move`'s deps for backwards compatibility reasons. Versions prior to this
211 one will fail to install any package that bundles a scoped dependency. This was responsible
212 for `ENOENT` errors during the `finalize` phase.
213 ([@iarna](https://github.com/iarna))
214
215#### DOC UPDATES
216
217* [`fba51c582`](https://github.com/npm/npm/commit/fba51c582d1d08dd4aa6eb27f9044dddba91bb18)
218 [#15960](https://github.com/npm/npm/pull/15960)
219 Update troubleshooting and contribution guide links.
220 ([@watilde](https://github.com/watilde))
221
222
223### v4.4.2 (2017-03-09):
224
225This week, the focus on the release was mainly going through [all of npm's deps
226that we manage
227ourselves](https://github.com/npm/npm/wiki/npm-maintained-dependencies), and
228making sure all their PRs and versions were up to date. That means there's a few
229fixes here and there. Nothing too big codewise, though.
230
231The most exciting part of this release is probably our [shiny new
232Contributing](https://github.com/npm/npm/blob/latest/CONTRIBUTING.md) and
233[Troubleshooting](https://github.com/npm/npm/blob/latest/TROUBLESHOOTING.md)
234docs! [@snopeks](https://github.com/snopeks) did some ✨fantastic✨ work hashing it
235out, and we're really hoping this is a nice big step towards making contributing
236to npm easier. The troubleshooting doc will also hopefully solve common issues
237for people! Do you think something is missing from it? File a PR and we'll add
238it! The current document is just a baseline for further editing and additions.
239
240Also there's maybe a bit of an easter egg in this release. 'Cause those are fun and I'm a huge nerd. 😉
241
242#### DOCUMENTATION AHOY
243
244* [`07e997a`](https://github.com/npm/npm/commit/07e997a7ecedba7b29ad76ffb2ce990d5c0200fc)
245 [#15756](https://github.com/npm/npm/pull/15756)
246 Overhaul `CONTRIBUTING.md` and add new `TROUBLESHOOTING.md` files. 🙌🏼
247 ([@snopeks](https://github.com/snopeks))
248* [`2f3e4b6`](https://github.com/npm/npm/commit/2f3e4b645cdc268889cf95ba24b2aae572d722ad)
249 [#15833](https://github.com/npm/npm/pull/15833)
250 Mention the [24-hour unpublish
251 policy](http://blog.npmjs.org/post/141905368000/changes-to-npms-unpublish-policy)
252 on the main registry.
253 ([@carols10cents](https://github.com/carols10cents))
254
255#### NOT REALLY FEATURES, NOT REALLY BUGFIXES. MORE LIKE TWEAKS? 🤔
256
257* [`84be534`](https://github.com/npm/npm/commit/84be534aedb78c65cd8012427fc04871ceeccf90)
258 [#15888](https://github.com/npm/npm/pull/15888)
259 Stop flattening `ls`-tree output. From now on, deduped deps will be marked as
260 such in the place where they would've been before getting hoisted by the
261 installer.
262 ([@iarna](https://github.com/iarna))
263* [`e9a5dca`](https://github.com/npm/npm/commit/e9a5dca369ead646ab5922326cede1406c62bd3b)
264 [#15967](https://github.com/npm/npm/pull/15967)
265 Limit metadata fetches to 10 concurrent requests.
266 ([@iarna](https://github.com/iarna))
267* [`46aa9bc`](https://github.com/npm/npm/commit/46aa9bcae088740df86234fc199f7aef53b116df)
268 [#15967](https://github.com/npm/npm/pull/15967)
269 Limit concurrent installer actions to 10.
270 ([@iarna](https://github.com/iarna))
271
272#### BUGFIXES
273
274* [`c3b994b`](https://github.com/npm/npm/commit/c3b994b71565eb4f943cce890bb887d810e6e2d4)
275 [#15901](https://github.com/npm/npm/pull/15901)
276 Use EXDEV aware move instead of rename. This will allow moving across devices
277 and moving when filesystems don't support renaming directories full of files. It might make folks using Docker a bit happier.
278 ([@iarna](https://github.com/iarna))
279* [`0de1a9c`](https://github.com/npm/npm/commit/0de1a9c1db90e6705c65c068df1fe82899e60d68)
280 [#15735](https://github.com/npm/npm/pull/15735)
281 Autocomplete support for npm scripts with `:` colons in the name.
282 ([@beyondcompute](https://github.com/beyondcompute))
283* [`84b0b92`](https://github.com/npm/npm/commit/84b0b92e7f78ec4add42e8161c555325c99b7f98)
284 [#15874](https://github.com/npm/npm/pull/15874)
285 Stop using [undocumented](https://github.com/nodejs/node/pull/11355)
286 `res.writeHeader` alias for `res.writeHead`.
287 ([@ChALkeR](https://github.com/ChALkeR))
288* [`895ffe4`](https://github.com/npm/npm/commit/895ffe4f3eecd674796395f91c30eda88aca6b36)
289 [#15824](https://github.com/npm/npm/pull/15824)
290 Fix empty versions column in `npm search` output.
291 ([@bcoe](https://github.com/bcoe))
292* [`38c8d7a`](https://github.com/npm/npm/commit/38c8d7adc1f43ab357d1e729ae7cd5d801a26e68)
293 `init-package-json@1.9.5`: [npm/init-package-json#61](https://github.com/npm/init-package-json/pull/61) Exclude existing `devDependencies` from being added to `dependencies`. Fixes [#12260](https://github.com/npm/npm/issues/12260).
294 ([@addaleax](https://github.com/addaleax))
295
296### v4.4.1 (2017-03-06):
297
298This is a quick little patch release to forgo the update notification
299checker if you're on an unsuported (but not otherwise broken) version of
300Node.js. Right now that means 0.10 or 0.12.
301
302* [`56ac249`](https://github.com/npm/npm/commit/56ac249ef8ede1021f1bc62a0e4fe1e9ba556af2)
303 [#15864](https://github.com/npm/npm/pull/15864)
304 Only use `update-notifier` on supported versions.
305 ([@legodude17](https://github.com/legodude17))
306
307### v4.4.0 (2017-02-23):
308
309Aaaah, [@iarna](https://github.com/iarna) here, it's been a little while
310since I did one of these! This is a nice little release, we've got an
311update notifier, vastly less verbose error messages, new warnings on package
312metadata that will probably give you a bad day, and a sprinkling of bug
313fixes.
314
315#### UPDATE NOTIFICATIONS
316
317We now have a little nudge to update your `npm`, courtesy of
318[update-notifier](https://www.npmjs.com/package/update-notifier).
319
320* [`148ee66`](https://github.com/npm/npm/commit/148ee663740aa05877c64f16cdf18eba33fbc371)
321 [#15774](https://github.com/npm/npm/pull/15774)
322 `npm` will now check at start up to see if a newer version is available.
323 It will check once a day. If you want to disable this, set `optOut` to `true` in
324 `~/.config/configstore/update-notifier-npm.json`.
325 ([@ceejbot](https://github.com/ceejbot))
326
327#### LESS VERBOSE ERROR MESSAGES
328
329`npm` has, for a long time, had very verbose error messages. There was a
330lot of info in there, including the cause of the error you were seeing but
331without a lot of experience reading them pulling that out was time consuming
332and difficult.
333
334With this change the output is cut down substantially, centering the error
335message. So, for example if you try to `npm run sdlkfj` then the entire
336error you'll get will be:
337
338```
339npm ERR! missing script: sldkfj
340
341npm ERR! A complete log of this run can be found in:
342npm ERR! /Users/rebecca/.npm/_logs/2017-02-24T00_41_36_988Z-debug.log
343```
344
345The CLI team has discussed cutting this down even further and stripping the
346`npm ERR!` prefix off those lines too. We'd appreciate your feedback on
347this!
348
349* [`e544124`](https://github.com/npm/npm/commit/e544124592583654f2970ec332003cfd00d04f2b)
350 [#15716](https://github.com/npm/npm/pull/15716)
351 Make error output less verbose.
352 ([@iarna](https://github.com/iarna))
353* [`166bda9`](https://github.com/npm/npm/commit/166bda97410d0518b42ed361020ade1887e684af)
354 [#15716](https://github.com/npm/npm/pull/15716)
355 Stop encouraging users to visit the issue tracker unless we know for
356 certain that it's an npm bug.
357 ([@iarna](https://github.com/iarna))
358
359#### OTHER NEW FEATURES
360
361* [`53412eb`](https://github.com/npm/npm/commit/53412eb22c1c75d768e30f96d69ed620dfedabde)
362 [#15772](https://github.com/npm/npm/pull/15772)
363 We now warn if you have a module listed in both dependencies and
364 devDependencies.
365 ([@TedYav](https://github.com/TedYav))
366* [`426b180`](https://github.com/npm/npm/commit/426b1805904a13bdc5c0dd504105ba037270cbee)
367 [#15757](https://github.com/npm/npm/pull/15757)
368 Default reporting metrics to default registry. Previously it defaulted to using
369 `https://registry.npmjs.org`, now it will default to the result of
370 `npm config get registry`. For most folks this won't actually change anything, but it
371 means that folks who use a private registry will have metrics routed there by default.
372 This has the potential to be interesting because it means that in the
373 future private registry products ([npme](https://npme.npmjs.com/docs/)!)
374 will be able to report on these metrics.
375 ([@iarna](https://github.com/iarna))
376
377#### BUG FIXES
378
379* [`8ea0de9`](https://github.com/npm/npm/commit/8ea0de98563648ba0db032acd4d23d27c4a50a66)
380 [#15716](https://github.com/npm/npm/pull/15716)
381 Write logs for `cb() never called` errors.
382* [`c4e83dc`](https://github.com/npm/npm/commit/c4e83dca830b24305e3cb3201a42452d56d2d864)
383 Make it so that errors while reading the existing node_modules tree can't
384 result in installer crashes.
385 ([@iarna](https://github.com/iarna))
386* [`2690dc2`](https://github.com/npm/npm/commit/2690dc2684a975109ef44953c2cf0746dbe343bb)
387 Update `npm doctor` to not treat broken symlinks in your global modules as
388 a permission failure. This is particularly important if you link modules and your text
389 editor uses the convention of creating symlinks from `.#filename.js` to a
390 machine name and pid to lock files (eg emacs and compatible things).
391 ([@iarna](https://github.com/iarna))
392* [`f4c3f48`](https://github.com/npm/npm/commit/f4c3f489aa5787cf0d60e8436be2190e4b0d0ff7)
393 [#15777](https://github.com/npm/npm/pull/15777)
394 Not exactly a bug, but change a parameterless `.apply` to `.call`.
395 ([@notarseniy](https://github.com/notarseniy))
396
397#### DEPENDENCY UPDATES
398
399* [`549dcff`](https://github.com/npm/npm/commit/549dcff58c7aaa1e7ba71abaa14008fdf2697297)
400 `rimraf@2.6.0`:
401 Retry EBUSY, ENOTEMPTY and EPERM on non-Windows platforms too.
402 More reliable `rimraf.sync` on Windows.
403 ([@isaacs](https://github.com/isaacs))
404* [`052dfb6`](https://github.com/npm/npm/commit/052dfb623da508f2b5f681da0258125552a18a4a)
405 `validate-npm-package-name@3.0.0`:
406 Remove ableist language in README.
407 Stop allowing ~'!()* in package names.
408 ([@tomdale](https://github.com/tomdale))
409 ([@chrisdickinson](https://github.com/chrisdickinson))
410* [`6663ea6`](https://github.com/npm/npm/commit/6663ea6ac0f0ecec5a3f04a3c01a71499632f4dc)
411 `abbrev@1.1.0` ([@isaacs](https://github.com/isaacs))
412* [`be6de9a`](https://github.com/npm/npm/commit/be6de9aab9e20b6eac70884e8626161eebf8721a)
413 `opener@1.4.3` ([@dominic](https://github.com/dominic))
414* [`900a5e3`](https://github.com/npm/npm/commit/900a5e3e3411ec221306455f99b24b9ce35757c0)
415 `readable-stream@2.2.3` ([@RangerMauve](https://github.com/RangerMauve)) ([@mcollina](https://github.com/mcollina))
416* [`c972a8b`](https://github.com/npm/npm/commit/c972a8b0f20a61a79c45b6642f870bea8c55c7e4)
417 `tacks@1.2.6`
418 ([@iarna](https://github.com/iarna))
419* [`85a36ef`](https://github.com/npm/npm/commit/85a36efdac0c24501876875cb9ad40292024e0b0)
420 [`7ac9265`](https://github.com/npm/npm/commit/7ac9265c56b4d9eeaca6fcfb29513f301713e7bb)
421 `tap@10.2.0`
422 ([@isaacs](https://github.com/saacs))
423
424### v4.3.0 (2017-02-09):
425
426Yay! Release time! It's a rainy day, and we have another smallish release for
427y'all. These things are not necessarily related. Or are they 🌧🤔
428
429As far as news go, you may have noticed that the CLI team dropped support for
430`node@0.12` when that version went out of maintenance. Still, we've avoided
431explicitly breaking it and `node@0.10` so far -- but not much longer.
432
433Sometime soon, the CLI team plans on switching over to language features only
434available as of `node@4 LTS`, and will likely start dropping old versions of node
435as they go out of maintenance. The new features are exciting! We're really
436looking forward to using them in the core CLI (and its dependencies) as we keep up
437with our current feature work.
438
439And speaking of features, this release is a minor bump due to a small change in
440how `npm login` works for the sake of supporting OAuth-based login for npm
441Enterprise users. But we won't leave the rest of y'all out -- we're working on a
442larger version of this feature. Soon enough, you'll be able to log in to npm
443with, say, GitHub -- and use some shiny features that come from the integration.
444Or turn on 2FA and other such security features. Keep your eyes peeled for new
445on this in the next few releases and our weekly newsletter!
446
447#### NEW AUTH TYPES
448
449There's a new command line option: `--auth-type`, which can be used to log in to
450a supporting registry with OAuth2 or SAML. The current implementation is mainly
451meant to support npmE customers, so if you're one of those: ask us about using
452it! If not, just hold off cause we'll have a much more complete version of this
453feature out soon.
454
455* [`ac8595e`](https://github.com/npm/npm/commit/ac8595e3c9b615ff95abc3301fac1262c434792c) [`bcf2dd8`](https://github.com/npm/npm/commit/bcf2dd8a165843255c06515fa044c6e4d3b71ca4) [`9298d20`](https://github.com/npm/npm/commit/9298d20af58b92572515bfa9cf7377bd4221dc7d) [`66b61bc`](https://github.com/npm/npm/commit/66b61bc42e81ee8a1ee00fc63517f62284140688) [`dc85de7`](https://github.com/npm/npm/commit/dc85de7df6bb61f7788611813ee82ae695a18f1f)
456 [#13389](https://github.com/npm/npm/pull/13389)
457 Implement single-sign-on support with `--auth-type` option.
458 ([@zkat](https://github.com/zkat))
459
460#### FASTER STARTUP. SOMETIMES!
461
462`request` is pretty heavy. And it loads a bunch of things. It's actually a
463pretty big chunk of npm's load time. This small patch by Rebecca will make it so
464npm only loads that module when we're actually intending to make network
465requests. Those of you who use npm commands that run offline might see a small
466speedup in startup time.
467
468* [`ac73568`](https://github.com/npm/npm/commit/ac735682e666e8724549d56146821f3b8b018e25)
469 [#15631](https://github.com/npm/npm/pull/15631)
470 Lazy load `caching-registry-client`.
471 ([@iarna](https://github.com/iarna))
472
473#### DOCUMENTATION
474
475* [`4ad9247`](https://github.com/npm/npm/commit/4ad9247aa82f7553c9667ee93c74ec7399d6ceec)
476 [#15630](https://github.com/npm/npm/pull/15630)
477 Fix formatting/rendering for root npm README.
478 ([@ungoldman](https://github.com/ungoldman))
479
480#### DEPENDENCY UPDATES
481
482* [`8cc1112`](https://github.com/npm/npm/commit/8cc1112958638ff88ac2c24c4a065acacb93d64b)
483 [npm/hosted-git-info#21](https://github.com/npm/hosted-git-info/pull/21)
484 `hosted-git-info@2.2.0`:
485 Add support for `.tarball()` URLs.
486 ([@zkat](https://github.com/zkat))
487* [`6eacc1b`](https://github.com/npm/npm/commit/6eacc1bc1925fe3cc79fc97bdc3194d944fce55e)
488 `npm-registry-mock@1.1.0`
489 ([@addaleax](https://github.com/addaleax))
490* [`a9b6d77`](https://github.com/npm/npm/commit/a9b6d775e61cf090df0e13514c624f99bf31d1e7)
491 `aproba@1.1.1`
492 ([@iarna](https://github.com/iarna))
493
494### v4.2.0 (2017-01-26):
495
496Hi all! I'm Kat, and I'm currently sitting in a train traveling at ~300km/h
497through Spain. So clearly, this release should have *something* to do with
498speed. And it does! Heck, with this release, you could say we're really
499_blazing_, even. 🌲🔥😏
500
501#### IMPROVED CLI SEARCH~
502
503You might recall if you've been keeping up that one of the reasons for a
504semver-major bump to `npm@4` was an improved CLI search (read: no longer blowing
505up Node). The work done for that new search system, while still relying on a
506full metadata download and local search, was also meant to act as groundwork for
507then-ongoing work on a brand-new, smarter search system for npm. Shortly after
508`npm@4` came out, the bulk of the server-side work was done, and with this
509release, the npm CLI has integrated use of the new endpoint for high-quality,
510fast-turnaround searches.
511
512No, seriously, it's *fast*. And *relevant*:
513
514[![GOTTA GO FAST! This is a gif of the new npm search returning results in around a second for `npm search web framework`.](https://cloud.githubusercontent.com/assets/17535/21954136/f007e8be-d9fd-11e6-9231-f899c12790e0.gif)](https://github.com/npm/npm/pull/15481)
515
516Give it a shot! And remember to check out the new website version of the search,
517too, which uses the same backend as the CLI now. 🎉
518
519Incidentally, the backend is a public service, so you can write your own search
520tools, be they web-based, CLI, or GUI-based. You can read up on the [full
521documentation for the search
522endpoint](https://github.com/npm/registry/blob/master/docs/REGISTRY-API.md#get-v1search),
523and let us know about the cool things you come up with!
524
525* [`ce3ca51`](https://github.com/npm/npm/commit/ce3ca51ca2d60e15e901c8bf6256338e53e1eca2)
526 [#15481](https://github.com/npm/npm/pull/15481)
527 Add an internal `gunzip-maybe` utility for optional gunzipping.
528 ([@zkat](https://github.com/zkat))
529* [`e322932`](https://github.com/npm/npm/commit/e3229324d507fda10ea9e94fd4de8a4ae5025c75) [`a53055e`](https://github.com/npm/npm/commit/a53055e423f1fe168f05047aa0dfec6d963cb211) [`a1f4365`](https://github.com/npm/npm/commit/a1f436570730c6e4a173ca92d1967a87c29b7f2d) [`c56618c`](https://github.com/npm/npm/commit/c56618c62854ea61f6f716dffe7bcac80b5f4144)
530 [#15481](https://github.com/npm/npm/pull/15481)
531 Add support for using the new npm search endpoint for fast, quality search
532 results. Includes a fallback to "classic" search.
533 ([@zkat](https://github.com/zkat))
534
535#### WHERE DID THE DEBUG LOGS GO
536
537This is another pretty significant change: Usually, when the npm process
538crashed, you would get an `npm-debug.log` in your current working directory.
539This debug log would get cleared out as soon as you ran npm again. This was a
540bit annoying because 1) you would get a random file in your `git status` that
541you might accidentally commit, and 2) if you hit a hard-to-reproduce bug and
542instinctually tried again, you would no longer have access to the repro
543`npm-debug.log`.
544
545So now, any time a crash happens, we'll save your debug logs to your cache
546folder, under `_logs` (`~/.npm` on *nix, by default -- use `npm config get
547cache` to see what your current value is). The cache will now hold a
548(configurable) number of `npm-debug.log` files, which you can access in the
549future. Hopefully this will help clean stuff up and reduce frustration from
550missed repros! In the future, this will also be used by `npm report` to make it
551super easy to put up issues about crashes you run into with npm. 💃🕺🏿👯‍♂️
552
553* [`04fca22`](https://github.com/npm/npm/commit/04fca223a0f704b69340c5f81b26907238fad878)
554 [#11439](https://github.com/npm/npm/pull/11439)
555 Put debug logs in `$(npm get cache)/_logs` and store multiple log files.
556 ([@KenanY](https://github.com/KenanY))
557 ([@othiym23](https://github.com/othiym23))
558 ([@isaacs](https://github.com/isaacs))
559 ([@iarna](https://github.com/iarna))
560
561#### DOCS
562
563* [`ae8e71c`](https://github.com/npm/npm/commit/ae8e71c2b7d64d782af287a21e146d7cea6e5273)
564 [#15402](https://github.com/npm/npm/pull/15402)
565 Add missing backtick in one of the `npm doctor` messages.
566 ([@watilde](https://github.com/watilde), [@charlotteis](https://github.com/charlotteis))
567* [`821fee6`](https://github.com/npm/npm/commit/821fee6d0b12a324e035c397ae73904db97d07d2)
568 [#15480](https://github.com/npm/npm/pull/15480)
569 Clarify that unscoped packages can depend on scoped packages and vice-versa.
570 ([@chocolateboy](https://github.com/chocolateboy))
571* [`2ee45a8`](https://github.com/npm/npm/commit/2ee45a884137ae0706b7c741c671fef2cb3bac96)
572 [#15515](https://github.com/npm/npm/pull/15515)
573 Update minimum supported Node version number in the README to `node@>=4`.
574 ([@watilde](https://github.com/watilde))
575* [`af06aa9`](https://github.com/npm/npm/commit/af06aa9a357578a8fd58c575f3dbe55bc65fc376)
576 [#15520](https://github.com/npm/npm/pull/15520)
577 Add section to `npm-scope` docs to explain that scope owners will own scoped
578 packages with that scope. That is, user `@alice` is not allowed to publish to
579 `@bob/my-package` unless explicitly made an owner by user (or org) `@bob`.
580 ([@hzoo](https://github.com/hzoo))
581* [`bc892e6`](https://github.com/npm/npm/commit/bc892e6d07a4c6646480703641a4d71129c38b6d)
582 [#15539](https://github.com/npm/npm/pull/15539)
583 Replace `http` with `https` and fix typos in some docs.
584 ([@watilde](https://github.com/watilde))
585* [`1dfe875`](https://github.com/npm/npm/commit/1dfe875b9ac61a0ab9f61a2eab02bacf6cce583c)
586 [#15545](https://github.com/npm/npm/pull/15545)
587 Update Node.js download link to point to the right place.
588 ([@watilde](https://github.com/watilde))
589
590#### DEPENDENCIES
591
592 * [`b824bfb`](https://github.com/npm/npm/commit/b824bfbeb2d89c92762e9170b026af98b5a3668a)
593 `ansi-regex@2.1.1`
594 * [`81ea3e8`](https://github.com/npm/npm/commit/81ea3e8e4ea34cd9c2b418512dcb508abcee1380)
595 `mississippi@1.3.0`
596
597#### MISC
598
599* [`98df212`](https://github.com/npm/npm/commit/98df212a91fd6ff4a02b9cd247f4166f93d3977a)
600 [#15492](https://github.com/npm/npm/pull/15492)
601 Update the "master" node version used for AppVeyor to `node@7`.
602 ([@watilde](https://github.com/watilde))
603* [`d75fc03`](https://github.com/npm/npm/commit/d75fc03eda5364f12ac266fa4f66e31c2e44e864)
604 [#15413](https://github.com/npm/npm/pull/15413)
605 `npm run-script` now exits with the child process' exit code on exit.
606 ([@kapals](https://github.com/kapals))
607
608### v4.1.2 (2017-01-12)
609
610We have a twee little release this week as we come back from the holidays.
611
612#### 0.12 IS UNSUPPORTED NOW (really)
613
614After [jumping the gun a
615little](https://github.com/npm/npm/releases/tag/v4.0.2), we can now
616officially remove 0.12 from our supported versions list. The Node.js
617project has now officially ended even maintenance support for 0.12 and thus,
618so will we. To reiterate from the last time we did this:
619
620What this means:
621
622* Your contributions will no longer block on the tests passing on 0.12.
623* We will no longer block dependency upgrades on working with 0.12.
624* Bugs filed on the npm CLI that are due to incompatibilities with 0.12
625 (and older versions) will be closed with a strong urging to upgrade to a
626 supported version of Node.
627* On the flip side, we'll continue to (happily!) accept patches that
628 address regressions seen when running the CLI with Node.js 0.12.
629
630What this doesn't mean:
631
632* The CLI is going to start depending on ES2015+ features. npm continues
633 to work, in almost all cases, all the way back to Node.js 0.8, and our
634 long history of backwards compatibility is a source of pride for the
635 team.
636* We aren't concerned about the problems of users who, for whatever
637 reason, can't update to newer versions of npm. As mentioned above, we're
638 happy to take community patches intended to address regressions.
639
640We're not super interested in taking sides on what version of Node.js
641you "should" be running. We're a workflow tool, and we understand that
642you all have a diverse set of operational environments you need to be
643able to support. At the same time, we _are_ a small team, and we need
644to put some limits on what we support. Tracking what's supported by our
645runtime's own team seems most practical, so that's what we're doing.
646
647* [`c7bbba8`](https://github.com/npm/npm/commit/c7bbba8744b62448103a1510c65d9751288abb5d)
648 Remove 0.12 from our supported versions list.
649 ([@iarna](https://github.com/iarna))
650
651#### WRITING TO SYMLINKED `package.json` (AND OTHER FILES)
652
653If your `package.json`, `npm-shrinkwrap.json` or `.npmrc` were a symlink and
654you used an `npm` command that modified one of these (eg `npm config set` or
655`npm install --save`) then previously we would have removed your symlink and
656replaced it with an ordinary file. While making these files symlinks is pretty
657uncommon, this was still surprising behavior. With this fix we now overwrite
658the _destination_ of the symlink and preserve the symlink itself.
659
660* [`a583983`](https://github.com/npm/npm/commit/a5839833d3de7072be06884b91902c093aff1aed)
661 [write-file-atomic/#5](https://github.com/npm/write-file-atomic/issues/5)
662 [#10223](https://github.com/npm/npm/10223)
663 `write-file-atomic@1.3.1`:
664 When the target is a symlink, write-file-atomic now overwrites the
665 _destination_ of the symlink, instead of replacing the symlink itself. This
666 makes it's behavior match `fs.writeFile`.
667
668 Fixed a bug where it would ALWAYS fs.stat to look up default mode and chown
669 values even if you'd passed them in. (It still used the values you passed
670 in, but did a needless stat.)
671 ([@iarna](https://github.com/iarna))
672
673#### DEPENDENCY UPDATES
674
675* [`521f230`](https://github.com/npm/npm/commit/521f230dd57261e64ac9613b3db62f5312971dca)
676 `node-gyp@3.5.0`:
677 Improvements to how Python is located. New `--devdir` flag.
678 ([@bnoordhuis](https://github.com/bnoordhuis))
679 ([@mhart](https://github.com/mhart))
680* [`ccd83e8`](https://github.com/npm/npm/commit/ccd83e8a70d35fb0904f8a9adb2ff7ac8a6b2706)
681 `JSONStream@1.3.0`:
682 Add new emitPath option.
683 ([@nathanwills](https://github.com/nathanwills))
684
685#### TEST IMPROVEMENTS
686
687* [`d76e084`](https://github.com/npm/npm/commit/d76e08463fd65705217624b861a1443811692f34)
688 Disable metric reporting for test suite even if the user has it enabled.
689 ([@iarna](https://github.com/iarna))
690
691### v4.1.1 (2016-12-16)
692
693This fixes a bug in the metrics reporting where, if you had enabled it then
694installs would create a metrics reporting process, that would create a
695metrics reporting process, that would… well, you get the idea. The only
696way to actually kill these processes is to turn off your networking, then
697on MacOS/Linux kill them with `kill -9`. Alternatively you can just reboot.
698
699Anyway, this is a quick release to fix that bug:
700
701* [`51c393f`](https://github.com/npm/npm/commit/51c393feff5f4908c8a9fb02baef505b1f2259be)
702 [#15237](https://github.com/npm/npm/pull/15237)
703 Don't launch a metrics sender process if we're running from a metrics
704 sender process.
705 ([@iarna](https://github.com/iarna))
706
707### v4.1.0 (2016-12-15)
708
709I'm really excited about `npm@4.1.0`. I know, I know, I'm kinda overexcited
710in my changelogs, but this one is GREAT. We've got a WHOLE NEW subcommand, I
711mean, when was the last time you saw that? YEARS! And we have the beginnings
712of usage metrics reporting. Then there's a fix for a really subtle bug that
713resulted in `shasum` errors. And then we also have a few more bug fixes and
714other improvements.
715
716#### ANONYMOUS METRIC REPORTING
717
718We're adding the ability for you all to help us track the quality of your
719experiences using `npm`. Metrics will be sent if you run:
720
721```
722npm config set send-metrics true
723```
724
725Then `npm` will report to `registry.npmjs.org` the number of successful and
726failed installations you've had. The data contains no identifying
727information and npm will not attempt to correlate things like IP address
728with the metrics being submitted.
729
730Currently we only track number of successful and failed installations. In
731the future we would like to find additional metrics to help us better
732quantify the quality of the `npm` experience.
733
734* [`190a658`](https://github.com/npm/npm/commit/190a658c4222f6aa904cbc640fc394a5c875e4db)
735 [#15084](https://github.com/npm/npm/pull/15084)
736 Add facility for recording and reporting success metrics.
737 ([@iarna](https://github.com/iarna))
738* [`87afc8b`](https://github.com/npm/npm/commit/87afc8b466f553fb49746c932c259173de48d0a4)
739 [npm/npm-registry-client#147](https://github.com/npm/npm-registry-client/pull/148)
740 `npm-registry-client@7.4.5`:
741 Add support for sending anonymous CLI metrics.
742 ([@iarna](https://github.com/iarna),
743 [@sisidovski](https://github.com/sisidovski))
744
745### NPM DOCTOR
746
747<pre>
748<u>Check</u> <u>Value</u> <u>Recommendation</u>
749npm ping ok
750npm -v v4.0.5
751node -v v4.6.1 Use node v6.9.2
752npm config get registry https://registry.npmjs.org/
753which git /Users/rebecca/bin/git
754Perms check on cached files ok
755Perms check on global node_modules ok
756Perms check on local node_modules ok
757Checksum cached files ok
758</pre>
759
760It's a rare day that we add a new command to `npm`, so I'm excited to
761present to you `npm doctor`. It checks for a number of common problems and
762provides some recommended solutions. It was put together through the hard
763work of [@watilde](https://github.com/watilde).
764
765* [`2359505`](https://github.com/npm/npm/commit/23595055669f76c9fe8f5f1cf4a705c2e794f0dc)
766 [`0209ee5`](https://github.com/npm/npm/commit/0209ee50448441695fbf9699019d34178b69ba73)
767 [#14582](https://github.com/npm/npm/pull/14582)
768 Add new `npm doctor` to give your project environment a health check.
769 ([@watilde](https://github.com/watilde))
770
771#### FIX MAJOR SOURCE OF SHASUM ERRORS
772
773If you've been getting intermittent shasum errors then you'll be pleased to
774know that we've tracked down at least one source of them, if not THE source
775of them.
776
777* [`87afc8b`](https://github.com/npm/npm/commit/87afc8b466f553fb49746c932c259173de48d0a4)
778 [#14626](https://github.com/npm/npm/issues/14626)
779 [npm/npm-registry-client#148](https://github.com/npm/npm-registry-client/pull/148)
780 `npm-registry-client@7.4.5`:
781 Fix a bug where an `ECONNRESET` while fetching a package file would result
782 in a partial download that would be reported as a "shasum mismatch". It
783 now throws away the partial download and retries it.
784 ([@iarna](https://github.com/iarna))
785
786#### FILE URLS AND NODE.JS 7
787
788When `npm` was formatting `file` URLs we took advantage of `url.format` to
789construct them. Node.js 7 changed the behavior in such a way that our use of
790`url.format` stopped producing URLs that we could make use of.
791
792The reasons for this have to do with the `file` URL specification and how
793invalid (according to the specification) URLs are handled. How this changed
794is most easily explained with a table:
795
796<table>
797<tr><th></th><th>URL</th><th>Node.js &lt;= 6</th><th><tt>npm</tt>'s understanding</th><th>Node.js 7</th><th><tt>npm</tt>'s understanding</th></tr>
798<tr><td>VALID</td><td><tt>file:///abc/def</tt></td><td><tt>file:///abc/def</tt></td><td><tt>/abc/def</tt></td><td><tt>file:///abc/def</tt></td><td><tt>/abc/def</tt></td></tr>
799<tr><td>invalid</td><td><tt>file:/abc/def</tt></td><td><tt>file:/abc/def</tt></td><td><tt>/abc/def</tt></td><td><tt>file:///abc/def</tt></td><td><tt>/abc/def</tt></td></tr>
800<tr><td>invalid</td><td><tt>file:abc/def</tt></td><td><tt>file:abc/def</tt></td><td><tt>$CWD/abc/def</tt></td><td><tt>file://abc/def</tt></td><td><tt>/def</tt> on the <tt>abc</tt> host</td></tr>
801<tr><td>invalid</td><td><tt>file:../abc/def</tt></td><td><tt>file:../abc/def</tt></td><td><tt>$CWD/../abc/def</tt></td><td><tt>file://../abc/def</tt></td><td><tt>/abc/def</tt> on the <tt>..</tt> host</td></tr>
802</table>
803
804So the result was that passing a `file` URL that npm had received that used
805through Node.js 7's `url.format` changed its meaning as far as `npm` was
806concerned. As those kinds of URLs are, per the specification, invalid, how
807they should be handled is undefined and so the change in Node.js wasn't a
808bug per se.
809
810Our solution is to stop using `url.format` when constructing this kind of
811URL.
812
813* [`173935b`](https://github.com/npm/npm/commit/173935b4298e09c4fdcb8f3a44b06134d5aff181)
814 [#15114](https://github.com/npm/npm/issues/15114)
815 Stop using `url.format` for relative local dep paths.
816 ([@zkat](https://github.com/zkat))
817
818#### EXTRANEOUS LIFECYCLE SCRIPT EXECUTION WHEN REMOVING
819
820* [`afb1dfd`](https://github.com/npm/npm/commit/afb1dfd944e57add25a05770c0d52d983dc4e96c)
821 [#15090](https://github.com/npm/npm/pull/15090)
822 Skip top level lifecycles when uninstalling.
823 ([@iarna](https://github.com/iarna))
824
825#### REFACTORING AND INTERNALS
826
827* [`c9b279a`](https://github.com/npm/npm/commit/c9b279aca0fcb8d0e483e534c7f9a7250e2a9392)
828 [#15205](https://github.com/npm/npm/pull/15205)
829 [#15196](https://github.com/npm/npm/pull/15196)
830 Only have one function that determines which version of a package to use
831 given a specifier and a list of versions.
832 ([@iarna](https://github.com/iarna),
833 [@zkat](https://github.com/zkat))
834
835* [`981ce63`](https://github.com/npm/npm/commit/981ce6395e7892dde2591b44e484e191f8625431)
836 [#15090](https://github.com/npm/npm/pull/15090)
837 Rewrite prune to use modern npm plumbing.
838 ([@iarna](https://github.com/iarna))
839
840* [`bc4b739`](https://github.com/npm/npm/commit/bc4b73911f58a11b4a2d28b49e24b4dd7365f95b)
841 [#15089](https://github.com/npm/npm/pull/15089)
842 Rename functions and variables in the module that computes what changes to
843 make to your installation.
844 ([@iarna](https://github.com/iarna))
845
846* [`2449f74`](https://github.com/npm/npm/commit/2449f74a202b3efdb1b2f5a83356a78ea9ecbe35)
847 [#15089](https://github.com/npm/npm/pull/15089)
848 When computing changes to make to your installation, use a function to add
849 new actions to take instead of just pushing on a list.
850 ([@iarna](https://github.com/iarna))
851
852#### IMPROVED LOGGING
853
854* [`335933a`](https://github.com/npm/npm/commit/335933a05396258eead139d27eea3f7668ccdfab)
855 [#15089](https://github.com/npm/npm/pull/15089)
856 Log when we remove obsolete dependencies in the tree.
857 ([@iarna](https://github.com/iarna))
858
859#### DOCUMENTATION
860
861* [`33ca4e6`](https://github.com/npm/npm/commit/33ca4e6db3c1878cbc40d5e862ab49bb0e82cfb2)
862 [#15157](https://github.com/npm/npm/pull/15157)
863 Update `npm cache` docs to use more consistent language
864 ([@JonahMoses](https://github.com/JonahMoses))
865
866#### DEPENDENCY UPDATES
867
868* [`c2d22fa`](https://github.com/npm/npm/commit/c2d22faf916e8260136a1cc95913ca474421c0d3)
869 [#15215](https://github.com/npm/npm/pull/15215)
870 `nopt@4.0.1`:
871 The breaking change is a small tweak to how empty string values are
872 handled. See the brand-new
873 [CHANGELOG.md for nopt](https://github.com/npm/nopt/blob/v4.0.1/CHANGELOG.md) for further
874 details about what's changed in this release!
875 ([@adius](https://github.com/adius),
876 [@samjonester](https://github.com/samjonester),
877 [@elidoran](https://github.com/elidoran),
878 [@helio](https://github.com/helio),
879 [@silkentrance](https://github.com/silkentrance),
880 [@othiym23](https://github.com/othiym23))
881* [`54d949b`](https://github.com/npm/npm/commit/54d949b05adefffeb7b5b10229c5fe0ccb929ac3)
882 [npm/lockfile#24](https://github.com/npm/lockfile/pull/24)
883 `lockfile@1.0.3`:
884 Handled case where callback was not passed in by the user.
885 ([@ORESoftware](https://github.com/ORESoftware))
886* [`54acc03`](https://github.com/npm/npm/commit/54acc0389b39850c0725d0868cb5e61317b57503)
887 `npmlog@4.0.2`:
888 Documentation update.
889 ([@helio-frota](https://github.com/helio-frota))
890* [`57f4bc1`](https://github.com/npm/npm/commit/57f4bc1150322294c1ea0a287ad0a8e457c151e6)
891 `osenv@0.1.4`:
892 Test changes.
893 ([@isaacs](https://github.com/isaacs))
894* [`bea1a2d`](https://github.com/npm/npm/commit/bea1a2d0db566560e13ecc1d5f42e55811269c88)
895 `retry@0.10.1`:
896 No changes.
897 ([@tim-kos](https://github.com/tim-kos))
898* [`6749e39`](https://github.com/npm/npm/commit/6749e395f868109afd97f79d36507e6567dd48fb)
899 [kapouer/marked-man#9](https://github.com/kapouer/marked-man/pull/9)
900 `marked-man@0.2.0`:
901 Add table support.
902 ([@gholk](https://github.com/gholk))
903
904### v4.0.5 (2016-12-01)
905
906It's that time of year! December is upon us, which means y'all are just going to
907be doing a lot less, in general, for the next month or so. The "Xmas Chasm", as
908we like to call it, has already begun. So for those of you reading it from the
909other side: Hi! Welcome back!
910
911This week's release is a relatively small one, involving just a few bugfixes and
912dependency upgrades. The CLI team has been busy recently with scoping out
913`npm@5`, and starting to do initial spec work for in-scope stuff.
914
915#### BUGFIXES
916
917On to the actual changes!
918
919* [`9776d8f`](https://github.com/npm/npm/commit/9776d8f70a0ea8d921cbbcab7a54e52c15fc455f)
920 [#15081](https://github.com/npm/npm/pull/15081)
921 `bundledDependencies` are intended to be left untouched by the installer, as
922 much as possible -- if they're bundled, we assume that you want to be
923 particular about the contents of your bundle.
924
925 The installer used to have a corner case where existing dependencies that had
926 bundledDependencies would get clobbered by as the installer moved stuff
927 around, even though the installer already avoided moving deps that were
928 themselves bundled. This is now fixed, along with the connected crasher, and
929 your bundledDeps should be left even more intact than before!
930 ([@iarna](https://github.com/iarna))
931* [`fc61c08`](https://github.com/npm/npm/commit/fc61c082122104031ccfb2a888432c9f809a0e8b)
932 [#15082](https://github.com/npm/npm/pull/15082)
933 Initialize nodes from bundled dependencies. This should address
934 [#14427](https://github.com/npm/npm/issues/14427) and related issues, but it's
935 turned out to be a tremendously difficult issue to reproduce in a test. We
936 decided to include it even pending tests, because we found the root cause of
937 the errors.
938 ([@iarna](https://github.com/iarna))
939* [`d8471a2`](https://github.com/npm/npm/commit/d8471a294ef848fc893f60e17d6ec6695b975d16)
940 [#12811](https://github.com/npm/npm/pull/12811)
941 Consider `devDependencies` when deciding whether to hoist a package. This
942 should resolve a variety of missing dependency issues some folks were seeing
943 when `devDependencies` happened to also be dependencies of your
944 `dependencies`. This often manifested as modules going missing, or only being
945 installed, after `npm install` was called twice.
946 ([@schmod](https://github.com/schmod))
947
948#### DEPENDENCY UPDATES
949
950* [`5978703`](https://github.com/npm/npm/commit/5978703da8669adae464789b1b15ee71d7f8d55d)
951 `graceful-fs@4.1.11`:
952 `EPERM` errors are Windows are now handled more gracefully. Windows users that
953 tended to see these errors due to, say, an antivirus-induced race condition,
954 should see them much more rarely, if at all.
955 ([@zkatr](https://github.com/zkat))
956* [`85b0174`](https://github.com/npm/npm/commit/85b0174ba9842e8e89f3c33d009e4b4a9e877c7d)
957 `request@2.79.0`
958 ([@zkat](https://github.com/zkat))
959* [`9664d36`](https://github.com/npm/npm/commit/9664d36653503247737630440bc2ff657de965c3)
960 `tap@8.0.1`
961 ([@zkat](https://github.com/zkat))
962
963#### MISCELLANEOUS
964
965* [`f0f7b0f`](https://github.com/npm/npm/commit/f0f7b0fd025daa2b69994130345e6e8fdaaa0304)
966 [#15083](https://github.com/npm/npm/pull/15083)
967 Removed dead code.
968 ([@iarna](https://github.com/iarna)) * [`bc32afe`](https://github.com/npm/npm/commit/bc32afe4d12e3760fb5a26466dc9c26a5a2981d5) [`c8a22fe`](https://github.com/npm/npm/commit/c8a22fe5320550e09c978abe560b62ce732686f4) [`db2666d`](https://github.com/npm/npm/commit/db2666d8c078fc69d0c02c6a3de9b31be1e995e9)
969 [#15085](https://github.com/npm/npm/pull/15085)
970 Change some network tests so they can run offline.
971 ([@iarna](https://github.com/iarna))
972* [`744a39b`](https://github.com/npm/npm/commit/744a39b836821b388ad8c848bd898c1d006689a9)
973 [#15085](https://github.com/npm/npm/pull/15085)
974 Make Node.js tests compatible with Windows.
975 ([@iarna](https://github.com/iarna))
976
977### v4.0.3 (2016-11-17)
978
979Hey you all, we've got a couple of bug fixes for you, a slew of
980documentation improvements and some improvements to our CI environment. I
981know we just got v4 out the door, but the CLI team is already busy planning
982v5. We'll have more for you in early December.
983
984#### BUG FIXES
985
986* [`45d40d9`](https://github.com/npm/npm/commit/45d40d96d2cd145f1e36702d6ade8cd033f7f332)
987 [`ba2adc2`](https://github.com/npm/npm/commit/ba2adc2e822d5e75021c12f13e3f74ea2edbde32)
988 [`1dc8908`](https://github.com/npm/npm/commit/1dc890807bd78a1794063688af31287ed25a2f06)
989 [`2ba19ee`](https://github.com/npm/npm/commit/2ba19ee643d612d103cdd8f288d313b00d05ee87)
990 [#14403](https://github.com/npm/npm/pull/14403)
991 Fix a bug where a scoped module could produce crashes when incorrectly
992 computing the paths related to their location. This patch reorganizes how path information
993 is passed in to eliminate the possibility of this sort of bug.
994 ([@iarna](https://github.com/iarna))
995 ([@NatalieWolfe](https://github.com/NatalieWolfe))
996* [`1011ec6`](https://github.com/npm/npm/commit/1011ec61230288c827a1c256735c55cf03d6228f)
997 [npm/npmlog#46](https://github.com/npm/npmlog/pull/46)
998 `npmlog@4.0.1`: Fix a bug where the progress bar would still display even if
999 you passed in `--no-progress`.
1000 ([@iarna](https://github.com/iarna))
1001
1002#### DOCUMENTATION UPDATES
1003
1004* [`c3ac177`](https://github.com/npm/npm/commit/c3ac177236124c80524c5f252ba8f6670f05dcd8)
1005 [#14406](https://github.com/npm/npm/pull/14406)
1006 Sync up the dispute policy included with the CLI with the [current official text](https://www.npmjs.com/policies/disputes).
1007 ([@mike-engel](https://github.com/mike-engel))
1008* [`9c663b2`](https://github.com/npm/npm/commit/9c663b2dd8552f892dc0205330bbc73a484ecd81)
1009 [#14627](https://github.com/npm/npm/pull/14627)
1010 Update build status branch in README.
1011 ([@cameronroe](https://github.com/cameronroe))
1012* [`8a8a0a3`](https://github.com/npm/npm/commit/8a8a0a3d490fc767def208f925cdff57e16e565b)
1013 [#14609](https://github.com/npm/npm/pull/14609)
1014 Update examples URLs of GitHub repos where those repos have moved to new URLs.
1015 ([@dougwilson](https://github.com/dougwilson))
1016* [`7a6425b`](https://github.com/npm/npm/commit/7a6425bcd4decde5d4b0af8b507e98723a07c680)
1017 [#14472](https://github.com/npm/npm/pull/14472)
1018 Document `sign-git-tag` in
1019 [npm-version(1)](https://github.com/npm/npm/blob/release-next/doc/cli/npm-version.md)'s
1020 configuration section.
1021 ([@strugee](https://github.com/strugee))
1022* [`f3087cc`](https://github.com/npm/npm/commit/f3087cc58c903d9a70275be805ebaf0eadbcbe1b)
1023 [#14546](https://github.com/npm/npm/pull/14546)
1024 Add a note about the dangers of configuring npm via uppercase env vars.
1025 ([@tuhoojabotti](https://github.com/tuhoojabotti))
1026* [`50e51b0`](https://github.com/npm/npm/commit/50e51b04a143959048cf9e1e4c8fe15094f480b0)
1027 [#14559](https://github.com/npm/npm/pull/14559)
1028 Remove documentation that incorrectly stated that we check `.npmrc` permissions.
1029 ([@iarna](https://github.com/iarna))
1030
1031##### OH UH, HELLO AGAIN NODE.JS 0.12
1032
1033* [`6f0c353`](https://github.com/npm/npm/commit/6f0c353e4e89b0378a4c88c829ccf9a1c5ae829d)
1034 [`f78bde6`](https://github.com/npm/npm/commit/f78bde6983bdca63d5fcb9c220c87e8f75ffb70e)
1035 [#14591](https://github.com/npm/npm/pull/14591)
1036 Reintroduce Node.js 0.12 to our support matrix. We jumped the gun when
1037 removing it. We won't drop support for it till the Node.js project does
1038 so at the end of December 2016.
1039 ([@othiym23](https://github.com/othiym23))
1040
1041#### TEST/CI UPDATES
1042
1043* [`aa73d1c`](https://github.com/npm/npm/commit/aa73d1c1cc22608f95382a35b33da252addff38e)
1044 [`c914e80`](https://github.com/npm/npm/commit/c914e80f5abcb16c572fe756c89cf0bcef4ff991)
1045* [`58fe064`](https://github.com/npm/npm/commit/58fe064dcc80bc08c677647832f2adb4a56b538a)
1046 [#14602](https://github.com/npm/npm/pull/14602)
1047 When running tests with coverage, use nyc's cache. This provides an 8x speedup!
1048 ([@bcoe](https://github.com/bcoe))
1049* [`ba091ce`](https://github.com/npm/npm/commit/ba091ce843af5d694f4540e825b095435b3558d8)
1050 [#14435](https://github.com/npm/npm/pull/14435)
1051 Remove an unused zero byte `package.json` found in the test fixtures.
1052 ([@baderbuddy](https://github.com/baderbuddy))
1053
1054#### DEPENDENCY UPDATES
1055
1056* [`442e01e`](https://github.com/npm/npm/commit/442e01e42d8a439809f6726032e3b73ac0d2b2f8)
1057 `readable-stream@2.2.2`:
1058 Bring in latest changes from Node.js 7.x.
1059 ([@calvinmetcalf](https://github.com/calvinmetcalf))
1060* [`bfc4a1c`](https://github.com/npm/npm/commit/bfc4a1c0c17ef0a00dfaa09beba3389598a46535)
1061 `which@1.2.12`:
1062 Remove unused require.
1063 ([@isaacs](https://github.com/isaacs))
1064
1065#### DEV DEPENDENCY UPDATES
1066
1067* [`7075b05`](https://github.com/npm/npm/commit/7075b054d8d2452bb53bee9b170498a48a0dc4e9)
1068 `marked-man@0.1.6`
1069 ([@kapouer](https://github.com/kapouer))
1070* [`3e13fea`](https://github.com/npm/npm/commit/3e13fea907ee1141506a6de7d26cbc91c28fdb80)
1071 `tap@8.0.0`
1072 ([@isaacs](https://github.com/isaacs))
1073
1074### v4.0.2 (2016-11-03)
1075
1076Hola, amigxs. I know it's been a long time since I rapped at ya, but I
1077been spending a lotta time quietly reflecting on all the things going on
1078in my life. I was, like, [in Japan for a while](https://gist.github.com/othiym23/c98bd4ef5d9fb3f496835bd481ef40ae),
1079and before that my swell colleagues [@zkat](https://github.com/zkat) and
1080[@iarna](https://github.com/iarna) have been very capably managing the release
1081process for quite a while. But I returned from Japan somewhat refreshed, very
1082jetlagged, and filled with a burning urge to get `npm@4` as stable as possible
1083before we push it out to the user community at large, so I decided to do this
1084release myself. (Also, huge thanks to Kat and Rebecca for putting out `npm@4`
1085so capably while I was on vacation! So cool to return to a major release having
1086gone so well without my involvement!)
1087
1088That said...
1089
1090#### NEVER TRUST AN X.0.0 RELEASE
1091
1092Even though 4.0.1 came out hard on the heels of 4.0.0 with a couple
1093critical fixes, we've found a couple other major issues that we want to
1094see fixed before making `npm@4` into `npm@latest`. Some of these are
1095arguably breaking changes on their own, so now is the time to get them
1096out if we're going to do so before `npm@5`, and all of them are pretty
1097significant blockers for a substantial number of users, so now is the
1098best time to fix them.
1099
1100##### PREPUBLISHONLY WHOOPS
1101
1102The code running the `publish*` lifecycle events was very confusingly written.
1103In fact, we didn't really figure out what it was doing until we added the new
1104`prepublishOnly` event and it was running people's scripts from the wrong
1105directory. We made it simpler. See the [commit
1106message](https://github.com/npm/npm/commit/8b32d67aa277fd7e62edbed886387a855f58387f)
1107for details.
1108
1109Because the change is no longer running publish events when publishing prebuilt
1110artifacts, it's technically a breaking / semver-major change. In the off chance
1111that the new behavior breaks any of y'all's workflows, let us know, and we can
1112roll some or all of this change back until `npm@5` (or forever, if that works
1113better for you).
1114
1115* [`8b32d67`](https://github.com/npm/npm/commit/8b32d67aa277fd7e62edbed886387a855f58387f)
1116 [#14502](https://github.com/npm/npm/pull/14502)
1117 Simplify lifecycle invocation and fix `prepublishOnly`.
1118 ([@othiym23](https://github.com/othiym23))
1119
1120##### G'BYE NODE.JS 0.10, 0.12, and 5.X; HI THERE, NODE 7
1121
1122With the advent of the second official Node.js LTS release, Node 6.x
1123'Boron', the Node.js project has now officially dropped versions 0.10
1124and 0.12 out of the maintenance phase of LTS. (Also, Node 5 was never
1125part of LTS, and will see no further support now that Node 7 has been
1126released.) As a small team with limited resources, the npm CLI team is
1127following suit and dropping those versions of Node from its CI test
1128matrix.
1129
1130What this means:
1131
1132* Your contributions will no longer block on the tests passing on 0.10 and 0.12.
1133* We will no longer block dependency upgrades on working with 0.10 and 0.12.
1134* Bugs filed on the npm CLI that are due to incompatibilities with 0.10
1135 or 0.12 (and older versions) will be closed with a strong urging to
1136 upgrade to a supported version of Node.
1137* On the flip side, we'll continue to (happily!) accept patches that
1138 address regressions seen when running the CLI with Node.js 0.10 and
1139 0.12.
1140
1141What this doesn't mean:
1142
1143* The CLI is going to start depending on ES2015+ features. npm continues
1144 to work, in almost all cases, all the way back to Node.js 0.8, and our
1145 long history of backwards compatibility is a source of pride for the
1146 team.
1147* We aren't concerned about the problems of users who, for whatever
1148 reason, can't update to newer versions of npm. As mentioned above, we're
1149 happy to take community patches intended to address regressions.
1150
1151We're not super interested in taking sides on what version of Node.js
1152you "should" be running. We're a workflow tool, and we understand that
1153you all have a diverse set of operational environments you need to be
1154able to support. At the same time, we _are_ a small team, and we need
1155to put some limits on what we support. Tracking what's supported by our
1156runtime's own team seems most practical, so that's what we're doing.
1157
1158* [`ab630c9`](https://github.com/npm/npm/commit/ab630c9a7a1b40cdd4f1244be976c25ab1525907)
1159 [#14503](https://github.com/npm/npm/pull/14503)
1160 Node 6 is LTS; 5.x, 0.10, and 0.12 are unsupported.
1161 ([@othiym23](https://github.com/othiym23))
1162* [`731ae52`](https://github.com/npm/npm/commit/731ae526fb6e9951c43d82a26ccd357b63cc56c2)
1163 [#14503](https://github.com/npm/npm/pull/14503)
1164 Update supported version expression.
1165 ([@othiym23](https://github.com/othiym23))
1166
1167##### DISENTANGLING SCOPE
1168
1169The new `Npm-Scope` header was previously reusing the `scope`
1170configuration option to pass the current scope back to your current
1171registry (which, as [described
1172previously](https://github.com/npm/npm/blob/release-next/CHANGELOG.md#send-extra-headers-to-registry), is meant to set up some upcoming
1173registry features). It turns out that had some [seriously weird
1174consequences](https://github.com/npm/npm/issues/14412) in the case where
1175you were already configuring `scope` in your own environment. The CLI
1176now uses separate configuration for this.
1177
1178* [`39358f7`](https://github.com/npm/npm/commit/39358f732ded4aa46d86d593393a0d6bca5dc12a)
1179 [#14477](https://github.com/npm/npm/pull/14477)
1180 Differentiate registry scope from project scope in configuration.
1181 ([@zkat](https://github.com/zkat))
1182
1183#### SMALLER CHANGES
1184
1185* [`7f41295`](https://github.com/npm/npm/commit/7f41295775f28b958a926f9cb371cb37b05771dd)
1186 [#14519](https://github.com/npm/npm/pull/14519)
1187 Document that as of `npm@4.0.1`, `npm shrinkwrap` now includes `devDependencies` unless
1188 instructed otherwise.
1189 ([@iarna](https://github.com/iarna))
1190* [`bdc2f9e`](https://github.com/npm/npm/commit/bdc2f9e255ddf1a47fd13ec8749d17ed41638b2c)
1191 [#14501](https://github.com/npm/npm/pull/14501)
1192 The `ENOSELF` error message is tricky to word. It's also an error that
1193 normally bites new users. Clean it up in an effort to make it easier
1194 to understand what's going on.
1195 ([@snopeks](https://github.com/snopeks), [@zkat](https://github.com/zkat))
1196
1197#### DEPENDENCY UPGRADES
1198
1199* [`a52d0f0`](https://github.com/npm/npm/commit/a52d0f0c9cf2de5caef77e12eabd7dca9e89b49c)
1200 `glob@7.1.1`:
1201 - Handle files without associated perms on Windows.
1202 - Fix failing case with `absolute` option.
1203 ([@isaacs](https://github.com/isaacs), [@phated](https://github.com/phated))
1204* [`afda66d`](https://github.com/npm/npm/commit/afda66d9afcdcbae1d148f589287583c4182d124)
1205 [isaacs/node-graceful-fs#97](https://github.com/isaacs/node-graceful-fs/pull/97)
1206 `graceful-fs@4.1.10`: Better backoff for EPERM on Windows.
1207 ([@sam-github](https://github.com/sam-github))
1208* [`e0023c0`](https://github.com/npm/npm/commit/e0023c089ded9161fbcbe544f12b07e12e3e5729)
1209 [npm/inflight#3](https://github.com/npm/inflight/pull/3)
1210 `inflight@1.0.6`: Clean up even if / when a callback throws.
1211 ([@phated](https://github.com/phated))
1212* [`1d91594`](https://github.com/npm/npm/commit/1d9159440364d2fe21e8bc15e08e284aaa118347)
1213 `request@2.78.0`
1214 ([@othiym23](https://github.com/othiym23))
1215
1216### v4.0.1 (2016-10-24)
1217
1218Ayyyy~ 🌊
1219
1220So thanks to folks who were running on `npm@next`, we managed to find a few
1221issues of notes in that preview version, and we're rolling out a small patch
1222change to fix them. Most notably, anyone who was using a symlinked `node` binary
1223(for example, if they installed Node.js through `homebrew`), was getting a very
1224loud warning every time they ran scripts. Y'all should get warnings in a more
1225useful way, now that we're resolving those path symlinks.
1226
1227Another fairly big change that we decided to slap into this version, since
1228`npm@4.0.0` is never going to be `latest`, is to make it so `devDependencies`
1229are included in `npm-shrinkwrap.json` by default -- if you do not want this, use
1230`--production` with `npm shrinkwrap`.
1231
1232#### BIG FIXES/CHANGES
1233
1234* [`eff46dd`](https://github.com/npm/npm/commit/eff46dd498ed007bfa77ab7782040a3a828b852d)
1235 [#14374](https://github.com/npm/npm/pull/14374)
1236 Fully resolve the path for `node` executables in both `$PATH` and
1237 `process.execPath` to avoid issues with symlinked `node`.
1238 ([@addaleax](https://github.com/addaleax))
1239* [`964f2d3`](https://github.com/npm/npm/commit/964f2d3a0675584267e6ece95b0115a53c6ca6a9)
1240 [#14375](https://github.com/npm/npm/pull/14375)
1241 Make including `devDependencies` in `npm-shrinkwrap.json` the default. This
1242 should help make the transition to `npm@5` smoother in the future.
1243 ([@iarna](https://github.com/iarna))
1244
1245#### BUGFIXES
1246
1247* [`a5b0a8d`](https://github.com/npm/npm/commit/a5b0a8db561916086fc7dbd6eb2836c952a42a7e)
1248 [#14400](https://github.com/npm/npm/pull/14400)
1249 Recently, we've had some consistent timeout failures while running the test
1250 suite under Travis. This tweak to tests should take care of those issues and
1251 Travis should go back to being reliably green.
1252 ([@iarna](https://github.com/iarna))
1253
1254#### DOC PATCHES
1255
1256* [`c5907b2`](https://github.com/npm/npm/commit/c5907b2fc1a82ec919afe3b370ecd34d8895c7a2)
1257 [#14251](https://github.com/npm/npm/pull/14251)
1258 Update links to Node.js downloads. They previously pointed to 404 pages.😬
1259 ([@ArtskydJ](https://github.com/ArtskydJ))
1260* [`0c122f2`](https://github.com/npm/npm/commit/0c122f24ff1d4d400975edda2b7262aaaf6f7d69)
1261 [#14380](https://github.com/npm/npm/pull/14380)
1262 Add note and clarification on when `prepare` script is run. Make it more
1263 consistent with surrounding descriptions.
1264 ([@SimenB](https://github.com/SimenB))
1265* [`51a62ab`](https://github.com/npm/npm/commit/51a62abd88324ba3dad18e18ca5e741f1d60883c)
1266 [#14359](https://github.com/npm/npm/pull/14359)
1267 Fixes typo in `npm@4` changelog.
1268 ([@kimroen](https://github.com/kimroen))
1269
1270### v4.0.0 (2016-10-20)
1271
1272Welcome to `npm@4`, friends!
1273
1274This is our first semver major release since the release of `npm@3` just over a
1275year ago. Back then, `@3` turned out to be a bit of a ground-shaking release,
1276with a brand-new installer with significant structural changes to how npm set up
1277your tree. This is the end of an era, in a way. `npm@4` also marks the release
1278when we move *both* `npm@2` and `npm@3` into maintenance: We will no longer be
1279updating those release branches with anything except critical bugfixes and
1280security patches.
1281
1282While its predecessor had some pretty serious impaact, `npm@4` is expected to
1283have a much smaller effect on your day-to-day use of npm. Over the past year,
1284we've collected a handful of breaking changes that we wanted to get in which are
1285only breaking under a strict semver interpretation (which we follow). Some of
1286these are simple usability improvements, while others fix crashes and serious
1287issues that required a major release to include.
1288
1289We hope this release sees you well, and you can look forward to an accelerated
1290release pace now that the CLI team is done focusing on sustaining work -- our
1291Windows fixing and big bugs pushes -- and we can start focusing again on
1292usability, features, and performance. Keep an eye out for `npm@5` in Q1 2017,
1293too: We're planning a major overhaul of `shrinkwrap` as well as various speed
1294and usability fixes for that release. It's gonna be a fun ride. I promise. 😘
1295
1296#### BRIEF OVERVIEW OF **BREAKING** CHANGES
1297
1298The following breaking changes are included in this release:
1299
1300* `npm search` rewritten to stream results, and no longer supports sorting.
1301* `npm scripts` no longer prepend the path of the node executable used to run
1302 npm before running scripts. A `--scripts-prepend-node-path` option has been
1303 added to configure this behavior.
1304* `npat` has been removed.
1305* `prepublish` has been deprecated, replaced by `prepare`. A `prepublishOnly`
1306 script has been temporarily added, which will *only* run on `npm publish`.
1307* `npm outdated` exits with exit code `1` if it finds any outdated packages.
1308* `npm tag` has been removed after a deprecation cycle. Use `npm dist-tag`.
1309* Partial shrinkwraps are no longer supported. `npm-shrinkwrap.json` is
1310 considered a complete installation manifest except for `devDependencies`.
1311* npm's default git branch is no longer `master`. We'll be using `latest` from
1312 now on.
1313
1314#### SEARCH REWRITE (**BREAKING**)
1315
1316Let's face it -- `npm search` simply doesn't work anymore. Apart from the fact
1317that it grew slower over the years, it's reached a point where we can no longer
1318fit the entire registry metadata in memory, and anyone who tries to use the
1319command now sees a really awful memory overflow crash from node.
1320
1321It's still going to be some time before the CLI, registry, and web team are able
1322to overhaul `npm search` altogether, but until then, we've rewritten the
1323previous `npm search` implementation to *stream* results on the fly, from both
1324the search endpoint and a local cache. In absolute terms, you won't see a
1325performance increase and this patch *does* come at the cost of sorting
1326capabilities, but what it does do is start outputting results as it finds them.
1327This should make the experience much better, overall, and we believe this is an
1328acceptable band-aid until we have that search endpoint in place.
1329
1330Incidentally, if you want a really nice search experience, we recommend checking
1331out [npms.io](http://npms.io), which includes a handy-dandy
1332[`npms-cli`](https://npm.im/npms-cli) for command-line usage -- it's an npm
1333search site that returns high-quality results quickly and is operated by members
1334of the npm community.
1335
1336* [`cfd43b4`](https://github.com/npm/npm/commit/cfd43b49aed36d0e8ea6c35b07ed8b303b69be61) [`2b8057b`](https://github.com/npm/npm/commit/2b8057be2e1b51e97b1f8f38d7f58edf3ce2c145)
1337 [#13746](https://github.com/npm/npm/pull/13746)
1338 Stream search process end-to-end.
1339 ([@zkat](https://github.com/zkat) and [@aredridel](https://github.com/aredridel))
1340* [`50f4ec8`](https://github.com/npm/npm/commit/50f4ec8e8ce642aa6a58cb046b2b770ccf0029db) [`70b4bc2`](https://github.com/npm/npm/commit/70b4bc22ec8e81cd33b9448f5b45afd1a50d50ba) [`8fb470f`](https://github.com/npm/npm/commit/8fb470fe755c4ad3295cb75d7b4266f8e67f8d38) [`ac3a6e0`](https://github.com/npm/npm/commit/ac3a6e0eba61fb40099b1370c74ad1598777def4) [`bad54dd`](https://github.com/npm/npm/commit/bad54dd9f1119fe900a8d065f8537c6f1968b589) [`87d504e`](https://github.com/npm/npm/commit/87d504e0a61bccf09f5e975007d018de3a1c5f50)
1341 [#13746](https://github.com/npm/npm/pull/13746)
1342 Updated search-related tests.
1343 ([@zkat](https://github.com/zkat))
1344* [`3596de8`](https://github.com/npm/npm/commit/3596de88598c69eb5bae108703c8e74ca198b20c)
1345 [#13746](https://github.com/npm/npm/pull/13746)
1346 `JSONStream@1.2.1`
1347 ([@zkat](https://github.com/zkat))
1348* [`4b09209`](https://github.com/npm/npm/commit/4b09209bb605f547243065032a8b37772669745f)
1349 [#13746](https://github.com/npm/npm/pull/13746)
1350 `mississippi@1.2.0`
1351 ([@zkat](https://github.com/zkat))
1352* [`b650b39`](https://github.com/npm/npm/commit/b650b39d42654abb9eed1c7cd463b1c595ca2ef9)
1353 [#13746](https://github.com/npm/npm/pull/13746)
1354 `sorted-union-stream@2.1.3`
1355 ([@zkat](https://github.com/zkat))
1356
1357#### SCRIPT NODE PATH (**BREAKING**)
1358
1359Thanks to some great work by [@addaleax](https://github.com/addaleax), we've
1360addressed a fairly tricky issue involving the node process used by `npm
1361scripts`.
1362
1363Previously, npm would prefix the path of the node executable to the script's
1364`PATH`. This had the benefit of making sure that the node process would be the
1365same for both npm and `scripts` unless you had something like
1366[`node-bin`](https://npm.im/node-bin) in your `node_modules`. And it turns out
1367lots of people relied on this behavior being this way!
1368
1369It turns out that this had some unintended consequences: it broke systems like
1370[`nyc`](https://npm.im/nyc), but also completely broke/defeated things like
1371[`rvm`](https://rvm.io/) and
1372[`virtualenv`](https://virtualenv.pypa.io/en/stable/) by often causing things
1373that relied on them to fall back to the global system versions of ruby and
1374python.
1375
1376In the face of two perfectly valid, and used alternatives, we decided that the
1377second case was much more surprising for users, and that we should err on the
1378side of doing what those users expect. Anna put some hard work in and managed to
1379put together a patch that changes npm's behavior such that we no longer prepend
1380the node executable's path *by default*, and adds a new option,
1381`--scripts-prepend-node-path`, to allow users who rely on this behavior to have
1382it add the node path for them.
1383
1384This patch also makes it so this feature is discoverable by people who might run
1385into the first case above, by warning if the node executable is either missing
1386or shadowed by another one in `PATH`. This warning can also be disabled with the
1387`--scripts-prepend-node-path` option as needed.
1388
1389* [`3fb1eb3`](https://github.com/npm/npm/commit/3fb1eb3e00b5daf37f14e437d2818e9b65a43392) [`6a7d375`](https://github.com/npm/npm/commit/6a7d375d779ba5416fd5df154c6da673dd745d9d) [`378ae08`](https://github.com/npm/npm/commit/378ae08851882d6d2bc9b631b16b8c875d0b9704)
1390 [#13409](https://github.com/npm/npm/pull/13409)
1391 Add a `--scripts-prepend-node-path` option to configure whether npm prepends
1392 the current node executable's path to `PATH`.
1393 ([@addaleax](https://github.com/addaleax))
1394* [`70b352c`](https://github.com/npm/npm/commit/70b352c6db41533b9a4bfaa9d91f7a2a1178f74e)
1395 [#13409](https://github.com/npm/npm/pull/13409)
1396 Change the default behaviour of npm to never prepending the current node
1397 executable’s directory to `PATH` but printing a warning in the cases in which
1398 it previously did.
1399 ([@addaleax](https://github.com/addaleax))
1400
1401#### REMOVE `npat` (**BREAKING**)
1402
1403Let's be real here -- almost no one knows this feature ever existed, and it's a
1404vestigial feature of the days when the ideal for npm was to distribute full
1405packages that could be directly developed on, even from the registry.
1406
1407It turns out the npm community decided to go a different way: primarily
1408publishing packages in a production-ready format, with no tests, build tools,
1409etc. And so, we say goodbye to `npat`.
1410
1411* [`e16c14a`](https://github.com/npm/npm/commit/e16c14afb6f52cb8b7adf60b2b26427f76773f2e)
1412 [#14329](https://github.com/npm/npm/pull/14329)
1413 Remove the npat feature.
1414 ([@iarna](https://github.com/iarna))
1415
1416#### NEW `prepare` SCRIPT. `prepublish` DEPRECATED (**BREAKING**)
1417
1418If there's anything that really seemed to confuse users, it's that the
1419`prepublish` script ran when invoking `npm install` without any arguments.
1420
1421Turns out many, many people really expected that it would only run on `npm
1422publish`, even if it actually did what most people expected: prepare the package
1423for publishing on the registry.
1424
1425And so, we've added a `prepare` command that runs in the exact same cases where
1426`prepublish` ran, and we've begun a deprecation cycle for `prepublish` itself
1427**only when run by `npm install`**, which will now include a warning any time
1428you use it that way.
1429
1430We've also added a `prepublishOnly` script which will execute **only** when `npm
1431publish` is invoked. Eventually, `prepublish` will stop executing on `npm
1432install`, and `prepublishOnly` will be removed, leaving `prepare` and
1433`prepublish` as two distinct lifecycles.
1434
1435* [`9b4a227`](https://github.com/npm/npm/commit/9b4a2278cee0a410a107c8ea4d11614731e0a943) [`bc32078`](https://github.com/npm/npm/commit/bc32078fa798acef0e036414cb448645f135b570)
1436 [#14290](https://github.com/npm/npm/pull/14290)
1437 Add `prepare` and `prepublishOnly` lifecyle events.
1438 ([@othiym23](https://github.com/othiym23))
1439* [`52fdefd`](https://github.com/npm/npm/commit/52fdefddb48f0c39c6e8eb4c118eb306c9436117)
1440 [#14290](https://github.com/npm/npm/pull/14290)
1441 Warn when running `prepublish` on `npm pack`.
1442 ([@othiym23](https://github.com/othiym23))
1443* [`4c2a948`](https://github.com/npm/npm/commit/4c2a9481b564cae3df3f4643766db4b987018a7b) [`a55bd65`](https://github.com/npm/npm/commit/a55bd651284552b93f7d972a2e944f65c1aa6c35)
1444 [#14290](https://github.com/npm/npm/pull/14290)
1445 Added `prepublish` warnings to `npm install`.
1446 ([@zkat](https://github.com/zkat))
1447* [`c27412b`](https://github.com/npm/npm/commit/c27412bb9fc7b09f7707c7d9ad23128959ae1abc)
1448 [#14290](https://github.com/npm/npm/pull/14290)
1449 Replace `prepublish` with `prepare` in `npm help package.json` documentation.
1450 ([@zkat](https://github.com/zkat))
1451
1452#### NO MORE PARTIAL SHRINKWRAPS (**BREAKING**)
1453
1454That's right. No more partial shrinkwraps. That means that if you have an
1455`npm-shrinkwrap.json` in your project, npm will no longer install anything that
1456isn't explicitly listed there, unless it's a `devDependency`. This will open
1457doors to some nice optimizations and make use of `npm shrinkwrap` just generally
1458smoother by removing some awful corner cases. We will also skip `devDependency`
1459installation from `package.json` if you added `devDependencies` to your
1460shrinkwrap by using `npm shrinkwrap --dev`.
1461
1462* [`b7dfae8`](https://github.com/npm/npm/commit/b7dfae8fd4dc0456605f7a921d20a829afd50864)
1463 [#14327](https://github.com/npm/npm/pull/14327)
1464 Use `readShrinkwrap` to read top level shrinkwrap. There's no reason for npm
1465 to be doing its own bespoke heirloom-grade artisanal thing here.
1466 ([@iarna](https://github.com/iarna))
1467* [`0ae1f4b`](https://github.com/npm/npm/commit/0ae1f4b9d83af2d093974beb33f26d77fcc95bb9) [`4a54997`](https://github.com/npm/npm/commit/4a549970dc818d78b6de97728af08a1edb5ae7f0) [`f22a1ae`](https://github.com/npm/npm/commit/f22a1ae54b5d47f1a056a6e70868013ebaf66b79) [`3f61189`](https://github.com/npm/npm/commit/3f61189cb3843fee9f54288fefa95ade9cace066)
1468 [#14327](https://github.com/npm/npm/pull/14327)
1469 Treat shrinkwrap as canonical. That is, don't try to fill in for partial
1470 shrinkwraps. Partial shrinkwraps should produce partial installs. If your
1471 shrinkwrap contains NO `devDependencies` then we'll still try to install them
1472 from your `package.json` instead of assuming you NEVER want `devDependencies`.
1473 ([@iarna](https://github.com/iarna))
1474
1475#### `npm tag` REMOVED (**BREAKING**)
1476
1477* [`94255da`](https://github.com/npm/npm/commit/94255da8ffc2d9ed6a0434001a643c1ad82fa483)
1478 [#14328](https://github.com/npm/npm/pull/14328)
1479 Remove deprecated tag command. Folks must use the `dist-tag` command from now
1480 on.
1481 ([@iarna](https://github.com/iarna))
1482
1483#### NON-ZERO EXIT CODE ON OUTDATED DEPENDENCIES (**BREAKING**)
1484
1485* [`40a04d8`](https://github.com/npm/npm/commit/40a04d888d10a5952d5ca4080f2f5d2339d2038a) [`e2fa18d`](https://github.com/npm/npm/commit/e2fa18d9f7904eb048db7280b40787cb2cdf87b3) [`3ee3948`](https://github.com/npm/npm/commit/3ee39488b74c7d35fbb5c14295e33b5a77578104) [`3fa25d0`](https://github.com/npm/npm/commit/3fa25d02a8ff07c42c595f84ae4821bc9ee908df)
1486 [#14013](https://github.com/npm/npm/pull/14013)
1487 Do `exit 1` if any outdated dependencies are found by `npm outdated`.
1488 ([@watilde](https://github.com/watilde))
1489* [`c81838a`](https://github.com/npm/npm/commit/c81838ae96b253f4b1ac66af619317a3a9da418e)
1490 [#14013](https://github.com/npm/npm/pull/14013)
1491 Log non-zero exit codes at `verbose` level -- this isn't something command
1492 line tools tend to do. It's generally the shell's job to display, if at all.
1493 ([@zkat](https://github.com/zkat))
1494
1495#### SEND EXTRA HEADERS TO REGISTRY
1496
1497For the purposes of supporting shiny new registry features, we've started
1498sending `Npm-Scope` and `Npm-In-CI` headers in outgoing requests.
1499
1500* [`846f61c`](https://github.com/npm/npm/commit/846f61c1dd4a033f77aa736ab01c27ae6724fe1c)
1501 [npm/npm-registry-client#145](https://github.com/npm/npm-registry-client/pull/145)
1502 [npm/npm-registry-client#147](https://github.com/npm/npm-registry-client/pull/147)
1503 `npm-registry-client@7.3.0`:
1504 * Allow npm to add headers to outgoing requests.
1505 * Add `Npm-In-CI` header that reports whether we're running in CI.
1506 ([@iarna](https://github.com/iarna))
1507* [`6b6bb08`](https://github.com/npm/npm/commit/6b6bb08af661221224a81df8adb0b72019ca3e11)
1508 [#14129](https://github.com/npm/npm/pull/14129)
1509 Send `Npm-Scope` header along with requests to registry. `Npm-Scope` is set to
1510 the `@scope` of the current top level project. This will allow registries to
1511 implement user/scope-aware features and services.
1512 ([@iarna](https://github.com/iarna))
1513* [`506de80`](https://github.com/npm/npm/commit/506de80dc0a0576ec2aab0ed8dc3eef3c1dabc23)
1514 [#14129](https://github.com/npm/npm/pull/14129)
1515 Add test to ensure `Npm-In-CI` header is being sent when CI is set in env.
1516 ([@iarna](https://github.com/iarna))
1517
1518#### BUGFIXES
1519
1520* [`bc84012`](https://github.com/npm/npm/commit/bc84012c2c615024b08868acbd8df53a7ca8d146)
1521 [#14117](https://github.com/npm/npm/pull/14117)
1522 Fixes a bug where installing a shrinkwrapped package would fail if the
1523 platform failed to install an optional dependency included in the shrinkwrap.
1524 ([@watilde](https://github.com/watilde))
1525* [`a40b32d`](https://github.com/npm/npm/commit/a40b32dc7fe18f007a672219a12d6fecef800f9d)
1526 [#13519](https://github.com/npm/npm/pull/13519)
1527 If a package has malformed metadata, `node.requiredBy` is sometimes missing.
1528 Stop crashing when that happens.
1529 ([@creationix](https://github.com/creationix))
1530
1531#### OTHER PATCHES
1532
1533* [`643dae2`](https://github.com/npm/npm/commit/643dae2197c56f1c725ecc6539786bf82962d0fe)
1534 [#14244](https://github.com/npm/npm/pull/14244)
1535 Remove some ancient aliases that we'd rather not have around.
1536 ([@zkat](https://github.com/zkat))
1537* [`bdeac3e`](https://github.com/npm/npm/commit/bdeac3e0fb226e4777d4be5cd3c3bec8231c8044)
1538 [#14230](https://github.com/npm/npm/pull/14230)
1539 Detect unsupported Node.js versions and warn about it. Also error on really
1540 old versions where we know we can't work.
1541 ([@iarna](https://github.com/iarna))
1542
1543#### DOC UPDATES
1544
1545* [`9ca18ad`](https://github.com/npm/npm/commit/9ca18ada7cc1c10b2d32bbb59d5a99dd1c743109)
1546 [#13746](https://github.com/npm/npm/pull/13746)
1547 Updated docs for `npm search` options.
1548 ([@zkat](https://github.com/zkat))
1549* [`e02a47f`](https://github.com/npm/npm/commit/e02a47f9698ff082488dc2b1738afabb0912793e)
1550 Move the `npm@3` changelog into the archived changelogs directory.
1551 ([@zkat](https://github.com/zkat))
1552* [`c12bbf8`](https://github.com/npm/npm/commit/c12bbf8c5a5dff24a191b66ac638f552bfb76601)
1553 [#14290](https://github.com/npm/npm/pull/14290)
1554 Document prepublish-on-install deprecation.
1555 ([@othiym23](https://github.com/othiym23))
1556* [`c246a75`](https://github.com/npm/npm/commit/c246a75ac8697f4ca11d316b7e7db5f24af7972b)
1557 [#14129](https://github.com/npm/npm/pull/14129)
1558 Document headers added by npm to outgoing registry requests.
1559 ([@iarna](https://github.com/iarna))
1560
1561#### DEPENDENCIES
1562
1563* [`cb20c73`](https://github.com/npm/npm/commit/cb20c7373a32daaccba2c1ad32d0b7e1fc01a681)
1564 [#13953](https://github.com/npm/npm/pull/13953)
1565 `signal-exit@3.0.1`
1566 ([@benjamincoe](https://github.com/benjamincoe))