Tue Oct 18 2016

Yarn!

Yarn is a new JS package manager that promises to be fast, secure, and reliable. My initial experience is that it is fast. I'm excited about making time to use it for real at work. Kudos to the developers!

Yarn description

It was announced by Facebook and has been worked on by real luminaries. There's real weight behind it!

Repeatable builds

Anyone that uses NPM has probably been hit by their build suddenly failing because a dependency of a dependency of a dependency has introduced a breaking change in a patch version update. To be fair to the JS community these issues tend to be fixed quickly but that's no use while it is broken. So the fact that Yarn includes npm shrinkwrap without me having to figure out how shrinkwrap works is a boon.

Fast builds

But the biggest reason I'm excited is that yarn has a cache of downloaded packages. Because people don't check node modules into source control and npm doesn't cache them we all download lodash and its friends over and over and over again. The build for the main project I work on at the moment spends 5 minutes downloading npm packages. I resent each of those 5 minutes. each. and. every. one.

How to convert an existing project

you type:

yarn

seriously that's it!

and you'll see something like this

Yarn run

There you can see that the first run for this project with few dependencies was 2.25s but subsequent runs are more like 0.75s

NPM is consistently around 4 seconds for the same project.

NPM run for the same project

If the difference was really only between 4 and 0.75 seconds I wouldn't be too excited (although not relying on other people's infrastructure to build and deploy is a big dealâ„¢)

But setting up a project with fifteen dependencies had a much more striking improvement. NPM took over a minute, yarn a little under 5 seconds.

yarn being awesome

I'm excited to get our build agents set up to see what yarn turns the five minute plus npm run at work into.

evolution

So yarn made a sensible decision. It doesn't reinvent the wheel, doesn't ask us to abandon things that work. But it promises to reduce impact of changing dependencies, reduce necessity of an external network when building software, and reduce the time spent building software. Those are really great things to improve.