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 unsupported (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 <= 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)) 969* [`bc32afe`](https://github.com/npm/npm/commit/bc32afe4d12e3760fb5a26466dc9c26a5a2981d5) [`c8a22fe`](https://github.com/npm/npm/commit/c8a22fe5320550e09c978abe560b62ce732686f4) [`db2666d`](https://github.com/npm/npm/commit/db2666d8c078fc69d0c02c6a3de9b31be1e995e9) 970 [#15085](https://github.com/npm/npm/pull/15085) 971 Change some network tests so they can run offline. 972 ([@iarna](https://github.com/iarna)) 973* [`744a39b`](https://github.com/npm/npm/commit/744a39b836821b388ad8c848bd898c1d006689a9) 974 [#15085](https://github.com/npm/npm/pull/15085) 975 Make Node.js tests compatible with Windows. 976 ([@iarna](https://github.com/iarna)) 977 978### v4.0.3 (2016-11-17) 979 980Hey you all, we've got a couple of bug fixes for you, a slew of 981documentation improvements and some improvements to our CI environment. I 982know we just got v4 out the door, but the CLI team is already busy planning 983v5. We'll have more for you in early December. 984 985#### BUG FIXES 986 987* [`45d40d9`](https://github.com/npm/npm/commit/45d40d96d2cd145f1e36702d6ade8cd033f7f332) 988 [`ba2adc2`](https://github.com/npm/npm/commit/ba2adc2e822d5e75021c12f13e3f74ea2edbde32) 989 [`1dc8908`](https://github.com/npm/npm/commit/1dc890807bd78a1794063688af31287ed25a2f06) 990 [`2ba19ee`](https://github.com/npm/npm/commit/2ba19ee643d612d103cdd8f288d313b00d05ee87) 991 [#14403](https://github.com/npm/npm/pull/14403) 992 Fix a bug where a scoped module could produce crashes when incorrectly 993 computing the paths related to their location. This patch reorganizes how path information 994 is passed in to eliminate the possibility of this sort of bug. 995 ([@iarna](https://github.com/iarna)) 996 ([@NatalieWolfe](https://github.com/NatalieWolfe)) 997* [`1011ec6`](https://github.com/npm/npm/commit/1011ec61230288c827a1c256735c55cf03d6228f) 998 [npm/npmlog#46](https://github.com/npm/npmlog/pull/46) 999 `npmlog@4.0.1`: Fix a bug where the progress bar would still display even if 1000 you passed in `--no-progress`. 1001 ([@iarna](https://github.com/iarna)) 1002 1003#### DOCUMENTATION UPDATES 1004 1005* [`c3ac177`](https://github.com/npm/npm/commit/c3ac177236124c80524c5f252ba8f6670f05dcd8) 1006 [#14406](https://github.com/npm/npm/pull/14406) 1007 Sync up the dispute policy included with the CLI with the [current official text](https://www.npmjs.com/policies/disputes). 1008 ([@mike-engel](https://github.com/mike-engel)) 1009* [`9c663b2`](https://github.com/npm/npm/commit/9c663b2dd8552f892dc0205330bbc73a484ecd81) 1010 [#14627](https://github.com/npm/npm/pull/14627) 1011 Update build status branch in README. 1012 ([@cameronroe](https://github.com/cameronroe)) 1013* [`8a8a0a3`](https://github.com/npm/npm/commit/8a8a0a3d490fc767def208f925cdff57e16e565b) 1014 [#14609](https://github.com/npm/npm/pull/14609) 1015 Update examples URLs of GitHub repos where those repos have moved to new URLs. 1016 ([@dougwilson](https://github.com/dougwilson)) 1017* [`7a6425b`](https://github.com/npm/npm/commit/7a6425bcd4decde5d4b0af8b507e98723a07c680) 1018 [#14472](https://github.com/npm/npm/pull/14472) 1019 Document `sign-git-tag` in 1020 [npm-version(1)](https://github.com/npm/npm/blob/release-next/doc/cli/npm-version.md)'s 1021 configuration section. 1022 ([@strugee](https://github.com/strugee)) 1023* [`f3087cc`](https://github.com/npm/npm/commit/f3087cc58c903d9a70275be805ebaf0eadbcbe1b) 1024 [#14546](https://github.com/npm/npm/pull/14546) 1025 Add a note about the dangers of configuring npm via uppercase env vars. 1026 ([@tuhoojabotti](https://github.com/tuhoojabotti)) 1027* [`50e51b0`](https://github.com/npm/npm/commit/50e51b04a143959048cf9e1e4c8fe15094f480b0) 1028 [#14559](https://github.com/npm/npm/pull/14559) 1029 Remove documentation that incorrectly stated that we check `.npmrc` permissions. 1030 ([@iarna](https://github.com/iarna)) 1031 1032##### OH UH, HELLO AGAIN NODE.JS 0.12 1033 1034* [`6f0c353`](https://github.com/npm/npm/commit/6f0c353e4e89b0378a4c88c829ccf9a1c5ae829d) 1035 [`f78bde6`](https://github.com/npm/npm/commit/f78bde6983bdca63d5fcb9c220c87e8f75ffb70e) 1036 [#14591](https://github.com/npm/npm/pull/14591) 1037 Reintroduce Node.js 0.12 to our support matrix. We jumped the gun when 1038 removing it. We won't drop support for it till the Node.js project does 1039 so at the end of December 2016. 1040 ([@othiym23](https://github.com/othiym23)) 1041 1042#### TEST/CI UPDATES 1043 1044* [`aa73d1c`](https://github.com/npm/npm/commit/aa73d1c1cc22608f95382a35b33da252addff38e) 1045 [`c914e80`](https://github.com/npm/npm/commit/c914e80f5abcb16c572fe756c89cf0bcef4ff991) 1046* [`58fe064`](https://github.com/npm/npm/commit/58fe064dcc80bc08c677647832f2adb4a56b538a) 1047 [#14602](https://github.com/npm/npm/pull/14602) 1048 When running tests with coverage, use nyc's cache. This provides an 8x speedup! 1049 ([@bcoe](https://github.com/bcoe)) 1050* [`ba091ce`](https://github.com/npm/npm/commit/ba091ce843af5d694f4540e825b095435b3558d8) 1051 [#14435](https://github.com/npm/npm/pull/14435) 1052 Remove an unused zero byte `package.json` found in the test fixtures. 1053 ([@baderbuddy](https://github.com/baderbuddy)) 1054 1055#### DEPENDENCY UPDATES 1056 1057* [`442e01e`](https://github.com/npm/npm/commit/442e01e42d8a439809f6726032e3b73ac0d2b2f8) 1058 `readable-stream@2.2.2`: 1059 Bring in latest changes from Node.js 7.x. 1060 ([@calvinmetcalf](https://github.com/calvinmetcalf)) 1061* [`bfc4a1c`](https://github.com/npm/npm/commit/bfc4a1c0c17ef0a00dfaa09beba3389598a46535) 1062 `which@1.2.12`: 1063 Remove unused require. 1064 ([@isaacs](https://github.com/isaacs)) 1065 1066#### DEV DEPENDENCY UPDATES 1067 1068* [`7075b05`](https://github.com/npm/npm/commit/7075b054d8d2452bb53bee9b170498a48a0dc4e9) 1069 `marked-man@0.1.6` 1070 ([@kapouer](https://github.com/kapouer)) 1071* [`3e13fea`](https://github.com/npm/npm/commit/3e13fea907ee1141506a6de7d26cbc91c28fdb80) 1072 `tap@8.0.0` 1073 ([@isaacs](https://github.com/isaacs)) 1074 1075### v4.0.2 (2016-11-03) 1076 1077Hola, amigxs. I know it's been a long time since I rapped at ya, but I 1078been spending a lotta time quietly reflecting on all the things going on 1079in my life. I was, like, [in Japan for a while](https://gist.github.com/othiym23/c98bd4ef5d9fb3f496835bd481ef40ae), 1080and before that my swell colleagues [@zkat](https://github.com/zkat) and 1081[@iarna](https://github.com/iarna) have been very capably managing the release 1082process for quite a while. But I returned from Japan somewhat refreshed, very 1083jetlagged, and filled with a burning urge to get `npm@4` as stable as possible 1084before we push it out to the user community at large, so I decided to do this 1085release myself. (Also, huge thanks to Kat and Rebecca for putting out `npm@4` 1086so capably while I was on vacation! So cool to return to a major release having 1087gone so well without my involvement!) 1088 1089That said... 1090 1091#### NEVER TRUST AN X.0.0 RELEASE 1092 1093Even though 4.0.1 came out hard on the heels of 4.0.0 with a couple 1094critical fixes, we've found a couple other major issues that we want to 1095see fixed before making `npm@4` into `npm@latest`. Some of these are 1096arguably breaking changes on their own, so now is the time to get them 1097out if we're going to do so before `npm@5`, and all of them are pretty 1098significant blockers for a substantial number of users, so now is the 1099best time to fix them. 1100 1101##### PREPUBLISHONLY WHOOPS 1102 1103The code running the `publish*` lifecycle events was very confusingly written. 1104In fact, we didn't really figure out what it was doing until we added the new 1105`prepublishOnly` event and it was running people's scripts from the wrong 1106directory. We made it simpler. See the [commit 1107message](https://github.com/npm/npm/commit/8b32d67aa277fd7e62edbed886387a855f58387f) 1108for details. 1109 1110Because the change is no longer running publish events when publishing prebuilt 1111artifacts, it's technically a breaking / semver-major change. In the off chance 1112that the new behavior breaks any of y'all's workflows, let us know, and we can 1113roll some or all of this change back until `npm@5` (or forever, if that works 1114better for you). 1115 1116* [`8b32d67`](https://github.com/npm/npm/commit/8b32d67aa277fd7e62edbed886387a855f58387f) 1117 [#14502](https://github.com/npm/npm/pull/14502) 1118 Simplify lifecycle invocation and fix `prepublishOnly`. 1119 ([@othiym23](https://github.com/othiym23)) 1120 1121##### G'BYE NODE.JS 0.10, 0.12, and 5.X; HI THERE, NODE 7 1122 1123With the advent of the second official Node.js LTS release, Node 6.x 1124'Boron', the Node.js project has now officially dropped versions 0.10 1125and 0.12 out of the maintenance phase of LTS. (Also, Node 5 was never 1126part of LTS, and will see no further support now that Node 7 has been 1127released.) As a small team with limited resources, the npm CLI team is 1128following suit and dropping those versions of Node from its CI test 1129matrix. 1130 1131What this means: 1132 1133* Your contributions will no longer block on the tests passing on 0.10 and 0.12. 1134* We will no longer block dependency upgrades on working with 0.10 and 0.12. 1135* Bugs filed on the npm CLI that are due to incompatibilities with 0.10 1136 or 0.12 (and older versions) will be closed with a strong urging to 1137 upgrade to a supported version of Node. 1138* On the flip side, we'll continue to (happily!) accept patches that 1139 address regressions seen when running the CLI with Node.js 0.10 and 1140 0.12. 1141 1142What this doesn't mean: 1143 1144* The CLI is going to start depending on ES2015+ features. npm continues 1145 to work, in almost all cases, all the way back to Node.js 0.8, and our 1146 long history of backwards compatibility is a source of pride for the 1147 team. 1148* We aren't concerned about the problems of users who, for whatever 1149 reason, can't update to newer versions of npm. As mentioned above, we're 1150 happy to take community patches intended to address regressions. 1151 1152We're not super interested in taking sides on what version of Node.js 1153you "should" be running. We're a workflow tool, and we understand that 1154you all have a diverse set of operational environments you need to be 1155able to support. At the same time, we _are_ a small team, and we need 1156to put some limits on what we support. Tracking what's supported by our 1157runtime's own team seems most practical, so that's what we're doing. 1158 1159* [`ab630c9`](https://github.com/npm/npm/commit/ab630c9a7a1b40cdd4f1244be976c25ab1525907) 1160 [#14503](https://github.com/npm/npm/pull/14503) 1161 Node 6 is LTS; 5.x, 0.10, and 0.12 are unsupported. 1162 ([@othiym23](https://github.com/othiym23)) 1163* [`731ae52`](https://github.com/npm/npm/commit/731ae526fb6e9951c43d82a26ccd357b63cc56c2) 1164 [#14503](https://github.com/npm/npm/pull/14503) 1165 Update supported version expression. 1166 ([@othiym23](https://github.com/othiym23)) 1167 1168##### DISENTANGLING SCOPE 1169 1170The new `Npm-Scope` header was previously reusing the `scope` 1171configuration option to pass the current scope back to your current 1172registry (which, as [described 1173previously](https://github.com/npm/npm/blob/release-next/CHANGELOG.md#send-extra-headers-to-registry), is meant to set up some upcoming 1174registry features). It turns out that had some [seriously weird 1175consequences](https://github.com/npm/npm/issues/14412) in the case where 1176you were already configuring `scope` in your own environment. The CLI 1177now uses separate configuration for this. 1178 1179* [`39358f7`](https://github.com/npm/npm/commit/39358f732ded4aa46d86d593393a0d6bca5dc12a) 1180 [#14477](https://github.com/npm/npm/pull/14477) 1181 Differentiate registry scope from project scope in configuration. 1182 ([@zkat](https://github.com/zkat)) 1183 1184#### SMALLER CHANGES 1185 1186* [`7f41295`](https://github.com/npm/npm/commit/7f41295775f28b958a926f9cb371cb37b05771dd) 1187 [#14519](https://github.com/npm/npm/pull/14519) 1188 Document that as of `npm@4.0.1`, `npm shrinkwrap` now includes `devDependencies` unless 1189 instructed otherwise. 1190 ([@iarna](https://github.com/iarna)) 1191* [`bdc2f9e`](https://github.com/npm/npm/commit/bdc2f9e255ddf1a47fd13ec8749d17ed41638b2c) 1192 [#14501](https://github.com/npm/npm/pull/14501) 1193 The `ENOSELF` error message is tricky to word. It's also an error that 1194 normally bites new users. Clean it up in an effort to make it easier 1195 to understand what's going on. 1196 ([@snopeks](https://github.com/snopeks), [@zkat](https://github.com/zkat)) 1197 1198#### DEPENDENCY UPGRADES 1199 1200* [`a52d0f0`](https://github.com/npm/npm/commit/a52d0f0c9cf2de5caef77e12eabd7dca9e89b49c) 1201 `glob@7.1.1`: 1202 - Handle files without associated perms on Windows. 1203 - Fix failing case with `absolute` option. 1204 ([@isaacs](https://github.com/isaacs), [@phated](https://github.com/phated)) 1205* [`afda66d`](https://github.com/npm/npm/commit/afda66d9afcdcbae1d148f589287583c4182d124) 1206 [isaacs/node-graceful-fs#97](https://github.com/isaacs/node-graceful-fs/pull/97) 1207 `graceful-fs@4.1.10`: Better backoff for EPERM on Windows. 1208 ([@sam-github](https://github.com/sam-github)) 1209* [`e0023c0`](https://github.com/npm/npm/commit/e0023c089ded9161fbcbe544f12b07e12e3e5729) 1210 [npm/inflight#3](https://github.com/npm/inflight/pull/3) 1211 `inflight@1.0.6`: Clean up even if / when a callback throws. 1212 ([@phated](https://github.com/phated)) 1213* [`1d91594`](https://github.com/npm/npm/commit/1d9159440364d2fe21e8bc15e08e284aaa118347) 1214 `request@2.78.0` 1215 ([@othiym23](https://github.com/othiym23)) 1216 1217### v4.0.1 (2016-10-24) 1218 1219Ayyyy~ 1220 1221So thanks to folks who were running on `npm@next`, we managed to find a few 1222issues of notes in that preview version, and we're rolling out a small patch 1223change to fix them. Most notably, anyone who was using a symlinked `node` binary 1224(for example, if they installed Node.js through `homebrew`), was getting a very 1225loud warning every time they ran scripts. Y'all should get warnings in a more 1226useful way, now that we're resolving those path symlinks. 1227 1228Another fairly big change that we decided to slap into this version, since 1229`npm@4.0.0` is never going to be `latest`, is to make it so `devDependencies` 1230are included in `npm-shrinkwrap.json` by default -- if you do not want this, use 1231`--production` with `npm shrinkwrap`. 1232 1233#### BIG FIXES/CHANGES 1234 1235* [`eff46dd`](https://github.com/npm/npm/commit/eff46dd498ed007bfa77ab7782040a3a828b852d) 1236 [#14374](https://github.com/npm/npm/pull/14374) 1237 Fully resolve the path for `node` executables in both `$PATH` and 1238 `process.execPath` to avoid issues with symlinked `node`. 1239 ([@addaleax](https://github.com/addaleax)) 1240* [`964f2d3`](https://github.com/npm/npm/commit/964f2d3a0675584267e6ece95b0115a53c6ca6a9) 1241 [#14375](https://github.com/npm/npm/pull/14375) 1242 Make including `devDependencies` in `npm-shrinkwrap.json` the default. This 1243 should help make the transition to `npm@5` smoother in the future. 1244 ([@iarna](https://github.com/iarna)) 1245 1246#### BUGFIXES 1247 1248* [`a5b0a8d`](https://github.com/npm/npm/commit/a5b0a8db561916086fc7dbd6eb2836c952a42a7e) 1249 [#14400](https://github.com/npm/npm/pull/14400) 1250 Recently, we've had some consistent timeout failures while running the test 1251 suite under Travis. This tweak to tests should take care of those issues and 1252 Travis should go back to being reliably green. 1253 ([@iarna](https://github.com/iarna)) 1254 1255#### DOC PATCHES 1256 1257* [`c5907b2`](https://github.com/npm/npm/commit/c5907b2fc1a82ec919afe3b370ecd34d8895c7a2) 1258 [#14251](https://github.com/npm/npm/pull/14251) 1259 Update links to Node.js downloads. They previously pointed to 404 pages. 1260 ([@ArtskydJ](https://github.com/ArtskydJ)) 1261* [`0c122f2`](https://github.com/npm/npm/commit/0c122f24ff1d4d400975edda2b7262aaaf6f7d69) 1262 [#14380](https://github.com/npm/npm/pull/14380) 1263 Add note and clarification on when `prepare` script is run. Make it more 1264 consistent with surrounding descriptions. 1265 ([@SimenB](https://github.com/SimenB)) 1266* [`51a62ab`](https://github.com/npm/npm/commit/51a62abd88324ba3dad18e18ca5e741f1d60883c) 1267 [#14359](https://github.com/npm/npm/pull/14359) 1268 Fixes typo in `npm@4` changelog. 1269 ([@kimroen](https://github.com/kimroen)) 1270 1271### v4.0.0 (2016-10-20) 1272 1273Welcome to `npm@4`, friends! 1274 1275This is our first semver major release since the release of `npm@3` just over a 1276year ago. Back then, `@3` turned out to be a bit of a ground-shaking release, 1277with a brand-new installer with significant structural changes to how npm set up 1278your tree. This is the end of an era, in a way. `npm@4` also marks the release 1279when we move *both* `npm@2` and `npm@3` into maintenance: We will no longer be 1280updating those release branches with anything except critical bugfixes and 1281security patches. 1282 1283While its predecessor had some pretty serious impaact, `npm@4` is expected to 1284have a much smaller effect on your day-to-day use of npm. Over the past year, 1285we've collected a handful of breaking changes that we wanted to get in which are 1286only breaking under a strict semver interpretation (which we follow). Some of 1287these are simple usability improvements, while others fix crashes and serious 1288issues that required a major release to include. 1289 1290We hope this release sees you well, and you can look forward to an accelerated 1291release pace now that the CLI team is done focusing on sustaining work -- our 1292Windows fixing and big bugs pushes -- and we can start focusing again on 1293usability, features, and performance. Keep an eye out for `npm@5` in Q1 2017, 1294too: We're planning a major overhaul of `shrinkwrap` as well as various speed 1295and usability fixes for that release. It's gonna be a fun ride. I promise. 1296 1297#### BRIEF OVERVIEW OF **BREAKING** CHANGES 1298 1299The following breaking changes are included in this release: 1300 1301* `npm search` rewritten to stream results, and no longer supports sorting. 1302* `npm scripts` no longer prepend the path of the node executable used to run 1303 npm before running scripts. A `--scripts-prepend-node-path` option has been 1304 added to configure this behavior. 1305* `npat` has been removed. 1306* `prepublish` has been deprecated, replaced by `prepare`. A `prepublishOnly` 1307 script has been temporarily added, which will *only* run on `npm publish`. 1308* `npm outdated` exits with exit code `1` if it finds any outdated packages. 1309* `npm tag` has been removed after a deprecation cycle. Use `npm dist-tag`. 1310* Partial shrinkwraps are no longer supported. `npm-shrinkwrap.json` is 1311 considered a complete installation manifest except for `devDependencies`. 1312* npm's default git branch is no longer `master`. We'll be using `latest` from 1313 now on. 1314 1315#### SEARCH REWRITE (**BREAKING**) 1316 1317Let's face it -- `npm search` simply doesn't work anymore. Apart from the fact 1318that it grew slower over the years, it's reached a point where we can no longer 1319fit the entire registry metadata in memory, and anyone who tries to use the 1320command now sees a really awful memory overflow crash from node. 1321 1322It's still going to be some time before the CLI, registry, and web team are able 1323to overhaul `npm search` altogether, but until then, we've rewritten the 1324previous `npm search` implementation to *stream* results on the fly, from both 1325the search endpoint and a local cache. In absolute terms, you won't see a 1326performance increase and this patch *does* come at the cost of sorting 1327capabilities, but what it does do is start outputting results as it finds them. 1328This should make the experience much better, overall, and we believe this is an 1329acceptable band-aid until we have that search endpoint in place. 1330 1331Incidentally, if you want a really nice search experience, we recommend checking 1332out [npms.io](http://npms.io), which includes a handy-dandy 1333[`npms-cli`](https://npm.im/npms-cli) for command-line usage -- it's an npm 1334search site that returns high-quality results quickly and is operated by members 1335of the npm community. 1336 1337* [`cfd43b4`](https://github.com/npm/npm/commit/cfd43b49aed36d0e8ea6c35b07ed8b303b69be61) [`2b8057b`](https://github.com/npm/npm/commit/2b8057be2e1b51e97b1f8f38d7f58edf3ce2c145) 1338 [#13746](https://github.com/npm/npm/pull/13746) 1339 Stream search process end-to-end. 1340 ([@zkat](https://github.com/zkat) and [@aredridel](https://github.com/aredridel)) 1341* [`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) 1342 [#13746](https://github.com/npm/npm/pull/13746) 1343 Updated search-related tests. 1344 ([@zkat](https://github.com/zkat)) 1345* [`3596de8`](https://github.com/npm/npm/commit/3596de88598c69eb5bae108703c8e74ca198b20c) 1346 [#13746](https://github.com/npm/npm/pull/13746) 1347 `JSONStream@1.2.1` 1348 ([@zkat](https://github.com/zkat)) 1349* [`4b09209`](https://github.com/npm/npm/commit/4b09209bb605f547243065032a8b37772669745f) 1350 [#13746](https://github.com/npm/npm/pull/13746) 1351 `mississippi@1.2.0` 1352 ([@zkat](https://github.com/zkat)) 1353* [`b650b39`](https://github.com/npm/npm/commit/b650b39d42654abb9eed1c7cd463b1c595ca2ef9) 1354 [#13746](https://github.com/npm/npm/pull/13746) 1355 `sorted-union-stream@2.1.3` 1356 ([@zkat](https://github.com/zkat)) 1357 1358#### SCRIPT NODE PATH (**BREAKING**) 1359 1360Thanks to some great work by [@addaleax](https://github.com/addaleax), we've 1361addressed a fairly tricky issue involving the node process used by `npm 1362scripts`. 1363 1364Previously, npm would prefix the path of the node executable to the script's 1365`PATH`. This had the benefit of making sure that the node process would be the 1366same for both npm and `scripts` unless you had something like 1367[`node-bin`](https://npm.im/node-bin) in your `node_modules`. And it turns out 1368lots of people relied on this behavior being this way! 1369 1370It turns out that this had some unintended consequences: it broke systems like 1371[`nyc`](https://npm.im/nyc), but also completely broke/defeated things like 1372[`rvm`](https://rvm.io/) and 1373[`virtualenv`](https://virtualenv.pypa.io/en/stable/) by often causing things 1374that relied on them to fall back to the global system versions of ruby and 1375python. 1376 1377In the face of two perfectly valid, and used alternatives, we decided that the 1378second case was much more surprising for users, and that we should err on the 1379side of doing what those users expect. Anna put some hard work in and managed to 1380put together a patch that changes npm's behavior such that we no longer prepend 1381the node executable's path *by default*, and adds a new option, 1382`--scripts-prepend-node-path`, to allow users who rely on this behavior to have 1383it add the node path for them. 1384 1385This patch also makes it so this feature is discoverable by people who might run 1386into the first case above, by warning if the node executable is either missing 1387or shadowed by another one in `PATH`. This warning can also be disabled with the 1388`--scripts-prepend-node-path` option as needed. 1389 1390* [`3fb1eb3`](https://github.com/npm/npm/commit/3fb1eb3e00b5daf37f14e437d2818e9b65a43392) [`6a7d375`](https://github.com/npm/npm/commit/6a7d375d779ba5416fd5df154c6da673dd745d9d) [`378ae08`](https://github.com/npm/npm/commit/378ae08851882d6d2bc9b631b16b8c875d0b9704) 1391 [#13409](https://github.com/npm/npm/pull/13409) 1392 Add a `--scripts-prepend-node-path` option to configure whether npm prepends 1393 the current node executable's path to `PATH`. 1394 ([@addaleax](https://github.com/addaleax)) 1395* [`70b352c`](https://github.com/npm/npm/commit/70b352c6db41533b9a4bfaa9d91f7a2a1178f74e) 1396 [#13409](https://github.com/npm/npm/pull/13409) 1397 Change the default behaviour of npm to never prepending the current node 1398 executable’s directory to `PATH` but printing a warning in the cases in which 1399 it previously did. 1400 ([@addaleax](https://github.com/addaleax)) 1401 1402#### REMOVE `npat` (**BREAKING**) 1403 1404Let's be real here -- almost no one knows this feature ever existed, and it's a 1405vestigial feature of the days when the ideal for npm was to distribute full 1406packages that could be directly developed on, even from the registry. 1407 1408It turns out the npm community decided to go a different way: primarily 1409publishing packages in a production-ready format, with no tests, build tools, 1410etc. And so, we say goodbye to `npat`. 1411 1412* [`e16c14a`](https://github.com/npm/npm/commit/e16c14afb6f52cb8b7adf60b2b26427f76773f2e) 1413 [#14329](https://github.com/npm/npm/pull/14329) 1414 Remove the npat feature. 1415 ([@iarna](https://github.com/iarna)) 1416 1417#### NEW `prepare` SCRIPT. `prepublish` DEPRECATED (**BREAKING**) 1418 1419If there's anything that really seemed to confuse users, it's that the 1420`prepublish` script ran when invoking `npm install` without any arguments. 1421 1422Turns out many, many people really expected that it would only run on `npm 1423publish`, even if it actually did what most people expected: prepare the package 1424for publishing on the registry. 1425 1426And so, we've added a `prepare` command that runs in the exact same cases where 1427`prepublish` ran, and we've begun a deprecation cycle for `prepublish` itself 1428**only when run by `npm install`**, which will now include a warning any time 1429you use it that way. 1430 1431We've also added a `prepublishOnly` script which will execute **only** when `npm 1432publish` is invoked. Eventually, `prepublish` will stop executing on `npm 1433install`, and `prepublishOnly` will be removed, leaving `prepare` and 1434`prepublish` as two distinct lifecycles. 1435 1436* [`9b4a227`](https://github.com/npm/npm/commit/9b4a2278cee0a410a107c8ea4d11614731e0a943) [`bc32078`](https://github.com/npm/npm/commit/bc32078fa798acef0e036414cb448645f135b570) 1437 [#14290](https://github.com/npm/npm/pull/14290) 1438 Add `prepare` and `prepublishOnly` lifecycle events. 1439 ([@othiym23](https://github.com/othiym23)) 1440* [`52fdefd`](https://github.com/npm/npm/commit/52fdefddb48f0c39c6e8eb4c118eb306c9436117) 1441 [#14290](https://github.com/npm/npm/pull/14290) 1442 Warn when running `prepublish` on `npm pack`. 1443 ([@othiym23](https://github.com/othiym23)) 1444* [`4c2a948`](https://github.com/npm/npm/commit/4c2a9481b564cae3df3f4643766db4b987018a7b) [`a55bd65`](https://github.com/npm/npm/commit/a55bd651284552b93f7d972a2e944f65c1aa6c35) 1445 [#14290](https://github.com/npm/npm/pull/14290) 1446 Added `prepublish` warnings to `npm install`. 1447 ([@zkat](https://github.com/zkat)) 1448* [`c27412b`](https://github.com/npm/npm/commit/c27412bb9fc7b09f7707c7d9ad23128959ae1abc) 1449 [#14290](https://github.com/npm/npm/pull/14290) 1450 Replace `prepublish` with `prepare` in `npm help package.json` documentation. 1451 ([@zkat](https://github.com/zkat)) 1452 1453#### NO MORE PARTIAL SHRINKWRAPS (**BREAKING**) 1454 1455That's right. No more partial shrinkwraps. That means that if you have an 1456`npm-shrinkwrap.json` in your project, npm will no longer install anything that 1457isn't explicitly listed there, unless it's a `devDependency`. This will open 1458doors to some nice optimizations and make use of `npm shrinkwrap` just generally 1459smoother by removing some awful corner cases. We will also skip `devDependency` 1460installation from `package.json` if you added `devDependencies` to your 1461shrinkwrap by using `npm shrinkwrap --dev`. 1462 1463* [`b7dfae8`](https://github.com/npm/npm/commit/b7dfae8fd4dc0456605f7a921d20a829afd50864) 1464 [#14327](https://github.com/npm/npm/pull/14327) 1465 Use `readShrinkwrap` to read top level shrinkwrap. There's no reason for npm 1466 to be doing its own bespoke heirloom-grade artisanal thing here. 1467 ([@iarna](https://github.com/iarna)) 1468* [`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) 1469 [#14327](https://github.com/npm/npm/pull/14327) 1470 Treat shrinkwrap as canonical. That is, don't try to fill in for partial 1471 shrinkwraps. Partial shrinkwraps should produce partial installs. If your 1472 shrinkwrap contains NO `devDependencies` then we'll still try to install them 1473 from your `package.json` instead of assuming you NEVER want `devDependencies`. 1474 ([@iarna](https://github.com/iarna)) 1475 1476#### `npm tag` REMOVED (**BREAKING**) 1477 1478* [`94255da`](https://github.com/npm/npm/commit/94255da8ffc2d9ed6a0434001a643c1ad82fa483) 1479 [#14328](https://github.com/npm/npm/pull/14328) 1480 Remove deprecated tag command. Folks must use the `dist-tag` command from now 1481 on. 1482 ([@iarna](https://github.com/iarna)) 1483 1484#### NON-ZERO EXIT CODE ON OUTDATED DEPENDENCIES (**BREAKING**) 1485 1486* [`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) 1487 [#14013](https://github.com/npm/npm/pull/14013) 1488 Do `exit 1` if any outdated dependencies are found by `npm outdated`. 1489 ([@watilde](https://github.com/watilde)) 1490* [`c81838a`](https://github.com/npm/npm/commit/c81838ae96b253f4b1ac66af619317a3a9da418e) 1491 [#14013](https://github.com/npm/npm/pull/14013) 1492 Log non-zero exit codes at `verbose` level -- this isn't something command 1493 line tools tend to do. It's generally the shell's job to display, if at all. 1494 ([@zkat](https://github.com/zkat)) 1495 1496#### SEND EXTRA HEADERS TO REGISTRY 1497 1498For the purposes of supporting shiny new registry features, we've started 1499sending `Npm-Scope` and `Npm-In-CI` headers in outgoing requests. 1500 1501* [`846f61c`](https://github.com/npm/npm/commit/846f61c1dd4a033f77aa736ab01c27ae6724fe1c) 1502 [npm/npm-registry-client#145](https://github.com/npm/npm-registry-client/pull/145) 1503 [npm/npm-registry-client#147](https://github.com/npm/npm-registry-client/pull/147) 1504 `npm-registry-client@7.3.0`: 1505 * Allow npm to add headers to outgoing requests. 1506 * Add `Npm-In-CI` header that reports whether we're running in CI. 1507 ([@iarna](https://github.com/iarna)) 1508* [`6b6bb08`](https://github.com/npm/npm/commit/6b6bb08af661221224a81df8adb0b72019ca3e11) 1509 [#14129](https://github.com/npm/npm/pull/14129) 1510 Send `Npm-Scope` header along with requests to registry. `Npm-Scope` is set to 1511 the `@scope` of the current top level project. This will allow registries to 1512 implement user/scope-aware features and services. 1513 ([@iarna](https://github.com/iarna)) 1514* [`506de80`](https://github.com/npm/npm/commit/506de80dc0a0576ec2aab0ed8dc3eef3c1dabc23) 1515 [#14129](https://github.com/npm/npm/pull/14129) 1516 Add test to ensure `Npm-In-CI` header is being sent when CI is set in env. 1517 ([@iarna](https://github.com/iarna)) 1518 1519#### BUGFIXES 1520 1521* [`bc84012`](https://github.com/npm/npm/commit/bc84012c2c615024b08868acbd8df53a7ca8d146) 1522 [#14117](https://github.com/npm/npm/pull/14117) 1523 Fixes a bug where installing a shrinkwrapped package would fail if the 1524 platform failed to install an optional dependency included in the shrinkwrap. 1525 ([@watilde](https://github.com/watilde)) 1526* [`a40b32d`](https://github.com/npm/npm/commit/a40b32dc7fe18f007a672219a12d6fecef800f9d) 1527 [#13519](https://github.com/npm/npm/pull/13519) 1528 If a package has malformed metadata, `node.requiredBy` is sometimes missing. 1529 Stop crashing when that happens. 1530 ([@creationix](https://github.com/creationix)) 1531 1532#### OTHER PATCHES 1533 1534* [`643dae2`](https://github.com/npm/npm/commit/643dae2197c56f1c725ecc6539786bf82962d0fe) 1535 [#14244](https://github.com/npm/npm/pull/14244) 1536 Remove some ancient aliases that we'd rather not have around. 1537 ([@zkat](https://github.com/zkat)) 1538* [`bdeac3e`](https://github.com/npm/npm/commit/bdeac3e0fb226e4777d4be5cd3c3bec8231c8044) 1539 [#14230](https://github.com/npm/npm/pull/14230) 1540 Detect unsupported Node.js versions and warn about it. Also error on really 1541 old versions where we know we can't work. 1542 ([@iarna](https://github.com/iarna)) 1543 1544#### DOC UPDATES 1545 1546* [`9ca18ad`](https://github.com/npm/npm/commit/9ca18ada7cc1c10b2d32bbb59d5a99dd1c743109) 1547 [#13746](https://github.com/npm/npm/pull/13746) 1548 Updated docs for `npm search` options. 1549 ([@zkat](https://github.com/zkat)) 1550* [`e02a47f`](https://github.com/npm/npm/commit/e02a47f9698ff082488dc2b1738afabb0912793e) 1551 Move the `npm@3` changelog into the archived changelogs directory. 1552 ([@zkat](https://github.com/zkat)) 1553* [`c12bbf8`](https://github.com/npm/npm/commit/c12bbf8c5a5dff24a191b66ac638f552bfb76601) 1554 [#14290](https://github.com/npm/npm/pull/14290) 1555 Document prepublish-on-install deprecation. 1556 ([@othiym23](https://github.com/othiym23)) 1557* [`c246a75`](https://github.com/npm/npm/commit/c246a75ac8697f4ca11d316b7e7db5f24af7972b) 1558 [#14129](https://github.com/npm/npm/pull/14129) 1559 Document headers added by npm to outgoing registry requests. 1560 ([@iarna](https://github.com/iarna)) 1561 1562#### DEPENDENCIES 1563 1564* [`cb20c73`](https://github.com/npm/npm/commit/cb20c7373a32daaccba2c1ad32d0b7e1fc01a681) 1565 [#13953](https://github.com/npm/npm/pull/13953) 1566 `signal-exit@3.0.1` 1567 ([@benjamincoe](https://github.com/benjamincoe)) 1568