Let’s cut the crap, as great as Npm is for front-end and Node.js development, it has some pretty glaring issues.
Firstly, code is pulled down without any kind of integrity checks being done, so you could be pulling down anything. Secondly, Npm takes forever to install dependencies (downloading as well as unpacking), it is the bane of my existence. Lastly, Npm has no concept of caching modules.
A lot of the Aurelia projects that I work with all use the same versions and I have a few Aurelia projects I am working on which all re-download the same packages every time I npm install which is painful.
This is where Yarn comes into the fray. A drop-in Npm replacement made in collaboration with Facebook, Google and Tilde. Being a new tool it is missing support for things like installing from Github and Npm private modules, but other than that, it mostly matches Npm 1:1.
The concept of an Npm replacement isn’t entirely new, but the fact such a slew of large companies are behind it makes this such a bigger deal than some might realise. For years Npm has been stagnant, suffered from numerous issues and honestly I can’t remember a long period of time where Npm issues didn’t arise.
Look at these comparison benchmarks to see just how much better it is (especially when the cache has been warmed). To install it all you need to do is type npm install yarn -g and then go into your existing Npm based project which has your package.json and type yarn .
There is no buy-in, Yarn works alongside Npm so your team can be comprised of developers wanting to stick with Npm or developers wanting to use Yarn. If you want to remove it, just go back to using Npm and that’s it.
The Npm team published a post welcoming Yarn to the ecosystem, but we all know if Facebook and other contributors keep improving Yarn, Npm has a chance of becoming redundant.
If I were Npm right now, I would be terrified. They’ve had years to get things right and even the latest Npm 3 release was a nightmare taking substantially longer to install dependencies because of the progress bar.
I have already switched over to it for all of my Aurelia based applications and subsequent Node.js based applications as well.