Hacker News new | ask | show | jobs
by mbStavola 1780 days ago
That's what the "V2" signifies: a major, (potentially) breaking change.

I'm not surprised nor upset that V2 is radically different. It's all in the versioning scheme!

2 comments

Eh. They're allowed to do that as per a literal definition of semver, but they turned it into a completely different tool with completely different usage patterns and use cases. It's one thing to have to make some small tweaks to handle an isolated breaking change in a dependency. It's another matter entirely to have a perfectly good core part of your stack deprecated out of the blue and told that you need to rewrite every line of code that it touches.

I see this as analogous to the Angular 2 situation, except that Google actually did a good job maintaining Angular 1 (retroactively named "Angular.js") for a number of years afterwards and providing a solid migration path. Everyone who had staked their projects and businesses on the future of Angular 1 was understandably annoyed.

All that being said, while I have problems with specifics of their approach, I actually think Yarn made the right call on this. After NPM caught up with v7, it became a bit of a wasted effort to have two redundant projects that were almost drop-in replacements for one another. Yarn staking out a different path at least justifies its continued existence.

What I think could have been better is if they'd put an explicit acknowledgement in the migration docs that Yarn 2 wasn't going to be a good fit for all users of Yarn 1, and a recommendation of NPM 7 as an alternative successor to Yarn 1 for such users. An even nicer gesture would have been if they'd written an alternate migration doc for Yarn 1 -> NPM 7.

It's more than that. It broke working projects because v2 was opt-out, not opt-in.

If they'd made a new tool/project called "yarn2", leaving "yarn" alone, that would've been fine.

It’s opt-in though?

You install it into your repository, and it gets vendored.

The yarn 1 binary on your machine will use yarn 2/3 if it’s in the repo, otherwise it will just run yarn 1 as normal.