Why nobody ever mentions Vue? 🤣
Just kidding, I assume you've considered that as well and for some reason you've moved on.
What do you mean by "enterprise application"? It's quite a generic (and in my opinion a little bit overused) term. Do you mean that it must adhere to some pre-existing standard? Are there constraints or requirements involved? Does the fact that you seem to know React better helps? Is the team already knowledgeable on either of them?
I read your post and thought "well, he's leaning towards Angular", but then I read your comment and I thought "well, he's leaning towards React now" :D
In a sense I don't think there's a wrong choice to make here because all the major libraries have either a big company backing them or a big community with companies using them. You can build great apps with either.
What if you build a proof of concept with each technology and then decide? Can you afford that?
If onboarding new devs is a big factor probably Vue needs to be considered as well, it's the easiest to grasp and omakase (which also means most devs use Vue in the same way with the same libraries):
React has the advantage over Vue to be everywhere right now so it might be easier to find devs (but I live in my bubble where Angular doesn't really appear so I'm definitely biased on this)
+1 to Vue: it has a "standard" libraries for common issues so you can create a "framework" based on it with optional features and well-known packages. And you can also write your code in style you like more: HTML centric like Angular or functional style with JSX like React (without so much boilerplate) and even combine them in different modules.
At my job, recently we started to create the biggest project (it definitely an enterprise level project) since we started Vue and with my experience from projects, I don't see any troubles with well designed Vue code base.
I also don't like that fact that companies follow trends. For example, the Russian company Yandex, which created the BEM concept, a few years ago had its own js library to handle stuff in BEM style. Now they use React almost everywhere. I don't like it, because they had some solution and just threw it out instead of improving it. It's like a monopoly or globalization in web development, the lack of competitiveness
I love Vue! It's just not there yet to propose in a big company IMO, where sometimes even React is cool an new. It's also about change. Angular was pretty common, now React starts to become pretty common. And that is basically what I mean by "enterprise": Slow change, long chains of approval and lots of people working on one project. In environments like this, changing frameworks is a huuuge deal.
Got it! It makes sense, it's the youngest of the three and the one with likely the smallest community.
I hope you find a way to discern between the other two. See if you can build a couple MVPs with the devs and judge on those.
I work for the largest credit union in the state and our projects certainly classify as "enterprise." We have no problem using Vue in our applications and we've implemented it in 20+ apps so far.
I evaluated all three of the big front end frameworks and, even though I had the most experience with Vue personally, it, by far, made the most sense to our team.
Angular is complex, there's a lot of boilerplate and, while TypeScript was initially interesting to our C# devs, along with the similar structing to .NET, learning it well required more time than we were willing to put aside for it. Not only that, but we felt like it would have slowed down our development time because, while it was robust, we were writing a lot more code and code reviews themselves became more difficult.
React is awesome. Personally, I love most of its concepts and the more functional approach, but its lack of structure became difficult because there are barely any rules enforced. Sure, your organization can adopt certain patterns, but on projects where you're up against short deadlines, these are the first things to go out the window. You can always go back and refactor, but that time rarely happens for us and I hate that mindset. A lot of the code on unstructured React applications starts to look like spaghetti code from the jQuery days, which is exactly what we were trying to avoid.The functional style is also pretty foreign to our .NET guys who would have to work on the front end occasionally. Moreover, I also feel like React is, by far, the least stable of the big three. Not necessarily in up time or codebase, but more that the React team doesn't really seem to know what they want and rather than making core concepts better in new releases, choose to just release more and more new features, which is a time sink to learn.
Also - I'm not a fan of Redux and ReactRouter being community controlled projects (Yes, I realize some of the React Core Team contributes to them, but they are not Facebook projects), they're both fantastic libraries, but these are key features that are a necessity in most large applications; for the React team to not have their own implementation is strange. While React has added some features lately to remedy the reliance on Redux, that's just another thing our team would've had to learn. Moreover, the way routing is done within ReactRouter is just totally backwards to me; defining routes inside your view as components makes no sense.
Vue strikes a happy medium between structure and freedom for us. Vue, VueRouter and Vuex are all part of the core Vue ecosystem and the Single File Component structure means you can pick up working on an application anywhere and fairly easily understand what's happening. The only thing I feel needs more work in Vue is their validation packages - I'm a huge fan of the concepts of Vuelidate but they keep changing their API to the point where if I were to update older apps, they'd break. VeeValidate is a very robust package but it can add a lot of unnecessary weight if you don't need a whole lot from it. I'm also not huge on the DOM-based validation vs model-based. I like the data-driven concepts of Vue and feel like VeeValidate doesn't really adhere to those same notions. I'd also love to see immutability built into Vuex, as that's bitten me a few times in the past, where it wouldn't have been an issue in Redux, but you learn to counteract it after you make the mistake the first couple of times :D
Great overview, thanks!
We're a place where coders share, stay up-to-date and grow their careers.
We strive for transparency and don't collect excess data.