It may sound logical, but unfortunately breaks a lot of existing angular projects and there is no kosher way to configure it to work.
For example both Rust’s stdweb and emscripten are detecting node/browser to load wasm file by appropriate method, they will not work in angular 6 project.
The auto import of providers is my favorite feature in this. Now you can just define something as @Injectable() and make it available in the module automatically. Big improvement over older versions
Yay. I thought I was done with work for the day but I'm going to start seeing how this update goes. I doubt I will be allowed to spend much time updating packages during the week.
What is the backwards compatibility and support model for Angular? I just don't have time to chase after things that move this quickly, not and fulfill all my other responsibilities. I'm supporting a mature application that has a front-end started less than eighteen months ago with AngularJS. Maintenance and support on third-party components we use is already starting to dry up. Rewriting things every six months is not reasonable for our team, much as we really ought to stay up to date.
I suppose we'll muddle along until things really break down, but this pace of change is not sustainable, particularly when so much of it just seems like churn for churn's sake.
You probably are not aware how many (rather big) projects out there are still on angular 1 with no upgrade plan at all. Last time I turned down a job offer because of a similar scenario.
It was 2016 when we started this front-end rewrite, away from a mess of jQuery and Razor view spaghetti. Angular 2 was brand new, without much support for third-party components we used, and AngularJS looked like the mature option. Probably should have bet the other horse, but c'est la vie.
We recently began migrating a 4 year old and constantly growing angularjs 1.4 app to react. With angular2react and ngreact we don't face a lot of hard decisions, because we may use angular comps in react and vice versa. We have bootstrapped a angular 4/5 app at the same time, but react just feels right.
Vue feels much more like the natural successor to angular 1 than angular 6 or react are. The least ceremony to getting sh## done framework. React is just a view layer. You are going to have to pull in libraries for routing and state management (at least)
I spent 3 months evaluating all 3 with a poc app and vue was the clear winner for me
Angular 6 and all future main releases will be supported for 18 months.
As for backwards compatibility, as was described in the presentation on the new renderer they are working on, 600 apps at Google are built on Angular, so there is a great deal of internal pressure to make sure backwards compatibility is a constant consideration.
Along those lines, one of the big tooling features in this release is the upgrade command in the CLI, which can allow packages to self update themselves across your codebase (i.e. if there's a breaking API change, they can rewrite that API call accordingly automatically during package upgrades). This is new, so it's yet to be determined how common and painless the usage will be.
"rewrite your app in the newest version" is more commonly known as upgrading... 18 months support seems fairly reasonable depending on how breaking new releases are.
And they will tell you upgrade is painless, but it's still work. And then if you have many dependancies (and the npm culture is to make every single function a package...), one of them will be painful, another one will stop working, etc.
And now in this devops world, the same devs will do server maintenance. The next 10 years are going to be so fun to watch.
I'm not sure what you mean by "churn for churn's sake"?
The AngularJS to Angular upgrade step is a big one. But, the latter is unquestionably a better framework once you're using it. It only needs to be done once, and it can be done gradually, if you're willing to ship both frameworks for a while. The upgrade modules they provide for running AngularJS code in Angular (and vice-versa) were a bit dodgy at first, but they are excellent now.
Once you're on Angular, there's no need for any 6-month rewrites. We upgraded about a year and a half ago, and we've kept up to date without facing any problems with backwards incompatible changes or upgrade pain. The Angular team has done a lot of work on improving the framework's internals, but the actual conceptual model and interfaces have remained stable.
Plus, if you use Angular CLI, you're also isolated from churn in the build tool world. You don't have to worry about juggling compatible versions of Webpack and its myriad loaders and plugins. It's all hidden away. Having wasted far too many hours of my life hacking on Grunt, then Gulp, then Webpack configs, that's reason enough to use Angular for me.
well actually my company has a mixed Angular+AngularJS application.
AngularJS really sucks compared to Angular. Angular is a extremely polished framework. However the size is a problem..
Currently upgrading from 5 to 6 was simple. We didn't need to upgrade 'angular' code. (we just used https://update.angular.io/) basically took me two hours (replacing all rxjs code) (code base is 35k lines of typescript and 14k lohtml)
The biggest pain between 5 and 6 is basically rxjs not angular per se and for that there is rxjs-compat.
However the only problem with angular would've been if people would've used the old Http Client, however we started with 4 and directly used 'HttpClient' which also is way better since you can easily have interceptors around it.
For the most part, they’re not part of the same discussion. TypeScript/JavaScript is still a sensible language and execution environment for interaction driven browser concerns.
That said, there are some interesting implied ambitions for Angular. The AngularDart project, the Bezel project, the AngularCompiler more generally as a point of special focus...
What I really like with SFC's is that with some thought you get genuinely scoped components meaning you can build your UI much like something like XAML/WPF which for the kind of interfaces I build is fantastic.
Combined with QuickType, C# and TypeScript it's productive as hell.
I'd offer the opposite perspective: I started a recent app in React, and I wish I'd stuck with Angular.
The core of the React render model is beautiful. It's far quicker to start writing and using a new component in React than in Angular, and the functional nature of React components feels good and highly productive. At first.
But the problem is, around that beautiful core, the React community has built a mass of libraries, meta-frameworks, techniques and practices that are decidedly less beautiful. After a while, I really found myself missing features from Angular, and struggling to replicate them by wiring together a hodge-podge React++ framework. Instead of being productive, I was wasting an inordinate amount of time trying to discover what the current micro-framework de-jour was for handling a particular problem in React.
For example, Angular supports view encapsulation. So you can write CSS targeting a component, and the framework will ensure that the style rules you write apply only to the HTML rendered by that components, without leaking to other parts of the app. This really is a godsend for properly isolating components in a reusable way. With React, there's a myriad of libraries for doing CSS, but most seem to be abandoned, and none seem to offer as straightforward or as easy style encapsulation as what Angular provides out of the box.
It was a similar story with forms. Which are a rich, reactive API in Angular, but seem to be an afterthought in React. And with dependency injection, both of singleton services and components elsewhere in the hierarchy.
I expect if you go all in on Redux, you can eventually build up a reasonable facsimile of what Angular provides. But from a standing start I think Angular is a much more productive framework, just because it's actually trying to be a framework, whereas React seems to be stuck somewhere between being a UI library and a framework, leaving the community to somewhat badly fill in the gaps.
React's functional components and JSX abstraction lend to it's ability to render to any target, which is powerful in and of itself. Furthermore since they are all-in-one functions or classes, they are composible and flexible in a way that Angular components are not. The component is the core of a complex UI program. Worth the up front cost of researching the top one or two solutions for forms or CSS management, and gaining all the benefits of the massive React ecosystem, in my opinion, as well as having the flexibility to evolve more easily when things change (as they always do), than buy all in on a framework. Especially for long lived applications, flexibility and adaptiveness is paramount.
The Meiosis pattern cristalizes the essential complexity of centralized state management (flux/redux), with no boiler plate, and little to no extra library code...
And that's exactly what he's talking about, and how many patterns do you have? Because we only have one, the Angular way, you can't imagine how an opinionated framework simplifies the life of working in large teams and hiring new people that can be productive quickly because they all pretty much follow the same design guidelines
I like the flexibility React provides. I’m working on two React apps right now. One using Apollo and the other Redux. The two libraries fit each app’s unique needs very well. One app really is a single page (it’s a drag and drop design tool) and so doesn’t have a router. I like that I can just bring in exactly what I need.
But the problem is, around that beautiful core, the React community has built a mass of libraries, meta-frameworks, techniques and practices that are decidedly less beautiful.
This is exactly what I have found working with React for the past couple years. Once you factor in the React ecosystem, things get messy/ugly and decidedly unproductive.
Exactly my experience, when they've introduced Context API in the latest version of react (16.3?) I and was seeing all these blog posts about them on all my feeds, i looked them up and tried to understand what the fuss was all about, and when I finally understood, I was like "Ok so it's solving exactly the same problem that @Injectable Services solve, but in a way more convoluted manner)
We started with Angular.js (1) and then migrated all our projects to 2+ as soon as it left beta. At this point we also evaluated react and later took a look at vue.
The main reason why we stick with Angular are the baked-in best practices and the tooling (angular-cli). Especially if you work on larger projects and have several people working on them, (opinionated) Angular simply makes your life a lot easier. With react (and vue) you have to make so many small decisions when setting up your project, that especially less experienced developers are tempted to make potentially "bad" design decisions (e.g. testing framework, bundling, routing, state management, ... you name it).
At this point in React's lifecycle, there are one or two top choices for each category you mention (ie MobX vs Redux, Jest vs Jasmine, etc) for folks worried about making "bad choices" well I would ask, what makes a choice bad? Is it that a particular state management library is a bad fit for your application? In that case, where it's possible that a library is a bad fit, then how can it be that a one-size-fits-all framework is going to not equally have potential to be a "bad" choice, except with a lot more buy in and difficulty to change down the road?
What were your main issues with Angular? I've been using it over the last year or so (coming from a React background) and I must say I'm quite pleased with how well it works for the team and I.
Probably good for starting new projects. The ecosystem looks clean with separation of concerns. Not worth the pain migrating old projects to Angular 2/3/4/5/6/n, unless you have the resources to do so.
Yet more confirmation that my team has made the correct choice in switching to a mostly vanilla JS development stack (we still use RiotJS for one-way template binding). I was there for the beginning of Angular and it got me hooked on single page applications, but what I am seeing now is the antithesis of productivity.
No one building a website for a business should be using this stuff, unless they drank so much frontend framework kool-aid that they cant find their car keys without an NPM command anymore. I don't care how many internal projects at google use this framework. Our business doesn't have billions of dollars to incinerate on attempts to prove a point.
The means of successfully executing SPA and managing your UX state are not intrinsically linked with using someone's subjective interpretation of how it should go (aka a frontend framework). Treat the browser and the DOM like an actual canvas and stop looking through the perspectives of others to see it. Focus on what you want to build, not the tools you use to build it. The fact that there are literally hundreds of angular-style frontend frameworks with wildly different approaches should be a warning sign to developers looking for a consistent basis upon which to build shit.
> Focus on what you want to build, not the tools you use to build it.
This is an interesting comment to me because, by essentially building your own framework, that onus is now completely on you. If you want to implement code splitting or tree shaking or whatever, you have to figure that out for yourself. That's time taken away from building product features. Whereas other frameworks can offer this out of the box because smart people in the open source community have figured that all out for you.
In addition, no one coming into your organisation has any continuity of knowledge, so they have to learn all the proprietary ways your app is set up, which is more time lost.
In addition to your in addition, the experience gained learning and using a proprietary framework isn't "resume-able" in the same way putting React or Angular is. That could mean a significant difference in salary, and it's also why I'm shopping around for new work right now. Like it or not, it matters.
I also did what the parent did. I'm using mine on several enterprise projects. And I'd also argue that devs spend //more// time implementing updates due to framework churn than for maintaining their own framework. After mine was "done", it was done. There is no code churn, all the features are in, tight code, etc,...so now I only spend time creating/expanding my products.
The discussion today about React v6 is exactly what we get to dismiss (as well as any along the way from v2 - v5) since our framework work is done.
Granted, you're absolutely correct when you say new devs have to learn all the proprietary ways of your framework. But even then, since the framework is such a small percent of the overall knowledge dump for a new hire, I'd argue, that it's not much of a concern. It'll take months to learn the systems, and maybe a week(?) to learn the framework.
And to be fully honest, I haven't learned React/Angular/Vue (did learn KnockoutJS back in the day), and if I need to hunt for a job, then yes I'm behind the curve.
> After mine was "done", it was done. There is no code churn, all the features are in
Do you actually believe that? Or does your organization not believe in software maintenance and opts to rewrite entire apps instead? In my experience, Enterprise^w software is never "done". A common conclusion to your story is "I've been asked to modify/refactor this app that has ben unchanged since 2005" - sure it's perfectly crafted, but it's in ECMAScript 3. Also Best practices shift over time.
Amen. Using your own vanilla JS architecture gives you flexibility and future proof. It is easier to hire new devs and train them. A little documentation and a template project go a long way to getting uniform projects.
I was joyfully expecting this upgrade and checked the release notes daily during the RC phase. Don't let the quick 'major' version changes shock you, upgrading 4 -> 5 was easy and I expect the same for this upgrade.
A big thanks to everyone involved in shaping this release and ensuring the upgradability for the past major versions, including the huge effort in making it possible to continuously migrate from AngularJS. <3
If you care for the details behind my experiences:
We have begun migrating a ~80k loc AngularJS codebase first to TypeScript in 2016, which was the preparation for the Angular upgrade starting Q1 this year. Now we are roughly 80% migrated to Angular 5 (in the meantime we did the upgrade from 4 to 5 in a few hours thanks to https://update.angular.io/), the rest running with ui-router hybrid [1] and ngUpgrade [2] and now are looking forward to moving the rest to Angular and upgrading to 6.0.
Coming from AngularJS where many things are done without a proper reason, I have started to embrace and even somewhat love Angular for the niceties it brings it. When you already embraced TypeScript, it is a breeze to work with and I cannot recommend it enough (for large-scale frontends this is).
The one pitfall I always ended up with during the migration was that AngularJS attribute directives cannot be converted to Angular and then downgraded (In the hybrid app, the entry component is always(?) AngularJS and up from there), which is a large part of the remaining AngularJS code. There are a few workarounds but they did not seem to work properly. If anyone has suggestions on that part.
Out of interest, have you looked into EmberJS? That has by far the smoothest upgrade process I've come across. One CLI command upgrades your dependencies, does a diff against a new greenfield project and applies the changes to your application, and also runs any codemods to migrate your code to a new pattern.
I did not look into it mainly because we cannot afford a rewrite, and the ngUpgrade module provided us with a way to write new code without replacing everything in one go (and breaking the entire frontend in between).
That's what I'm wondering. I can see a lot of material vouching for the quality of React Native, but I see very little consistently coming out for the Angular competitors in the mobile sphere.
For what it's worth, I really like Angular for web development, but I don't know much about the mobile side of things yet. I've just started to look into it.
> There are a few workarounds but they did not seem to work properly. If anyone has suggestions on that part.
Actually with angular-hybrid you do not need to use a AngularJS entryComponent.
The only thing that needs to be AngularJS is the bootstrap component.
Also AngularJS components can be Upgraded easily and Angular2+ Components can be downgraded easily, too.
The only problems are old school Directives which can be wrapped in a component for interop or just rewritten.
You can even remove angular-hybrid when you just "upgrade" all your AngularJS code that is used in routes. (you still need to have a AngularJS rootElement and than inject a downgraded ui-view).
i.e. you can't have `bootstrap: [UIView]` however using `<root-element></root-element>` in your index.html while
root element is like that:
This upgrade looks absolutely fantastic. The Elements piece in particular looks amazing, and has the potential to be a real game changer for shops that have a diverse set of applications that they use, and need large scale re-use of components.
At the mid-size corporation that I work at, we just standardized all Javascript development on Angular from a mismash of a ton of technologies. Angular seems very well suited for this role.
There was a interesting statistic recently that showed that Angular was dominating "east coast" applications (traditional financial services, pharma, insurance, manufacturing, established CS) while React was most popular in "west coast" applications - primarily silicon valley, etc.
I'm glad these two technologies are here to push each other.
>At the mid-size corporation that I work at, we just standardized all Javascript development on Angular from a mismash of a ton of technologies. Angular seems very well suited for this role.
In my experience centralisation and fixation on specific technology leads to stagnation quickly. IMO you should allow teams to choose their own tools. How else will you improve?
To quote one of Akin's laws which were on HN yesterday, "better is the enemy of good".
It's really good when one technology is used throughout an organization to achieve the same purpose. At some point, the technology you use is actually good enough, and incremental improvements to "keep up with the times" are simply distractions from the real work. And if at some point you find that your tech has truly stagnated, at least you're stagnated together, and can modernize together at the same time.
The problem is how will you find that your tech has stagnated? If nobody experiments with new tech - who will teach others? How will that knowledge come into your corp? Hiring new people to do that will not work, because:
- People being hired will be evaluated by legacy people (different thinking will be considered disadvantage during interviews)
- Legacy people will not listen to new hires since they have no credibility and it "has been the way it was always done"
These are solvable problems. Just because a group of engineers agree on a standard tool, doesn't mean that they are blind to the world around them, or that they are now doomed to be single minded "legacy" people. I'm sorry if in your experience this hasn't been the case. Maintaining a balance between using modern technology and having a healthy "if it ain't broke, don't fix it" attitude is certainly do-able.
But when every team is doing it's own version of the same thing, that's another story. It can be crushing to productivity, in fact it's likely to be the deciding factor if some types work get done at all. And, unlike your concerns about preventing stagnation, the only way to solve that problem is to stop doing it.
This sounds like how you'd end up doing web development in the least efficient way possible. There is a ton of space for reuse, the web is dead simple and the same pattern shows up over and over and over.
You can reuse almost as much without forcing one framework for all teams - making it not least efficient way possible. Not using one tool will encourage team to explore new possibilities, alternatives, learn new paradigms and thinking. In long term this is certainly more effective.
Web is not dead simple (I consider web to be frontend development in this context). Why I would consider web to be hard:
- it is harder to do frontend development than backend, because you write code which is sent to one of thousand different compilers, creating another layer of difficulty. Versus controlled environment where your backend code is being run
- While there are only few patterns which are applied to FE development, there are many new features(PWAs, real time syncs,..) coming into web. Taking advantage of them requires learning, coding and refactoring. You might say - this is just reinventing the wheel - while partly that is true, developers will still need to learn, adapt knowledge to web, build tools.
I came in here to try and get a feel for what front-end developers these days think of the new Angular vs React. I don't have any stake in this game, since I'm not currently working on anything front-end. I'm pleasantly surprised to see that, instead of the half-expected Angular bash-fest, there seems to be a number of people praising Angular over the React ecosystem.
When I last did front-end, I was using Angular 1.x, and despite some warts, I did like the overall architecture of it, and how it provided all of the important components for you and gave you an overall app organization. It felt like quite a change to try and build an app with React and experience the world of having to pick and glue together a bunch of components with ever-evolving build systems. This makes me more interested in trying to build something in the new Angular.
Ignoring Angular since the start, this headline and comments made it like I need check this out again, but, Angluar2+ seems like in decline in trend(comparing to React and even Vue), is this not true all of a sudden now?
In case anyone else has not been following Angular very closely, apparently AngularJS is version one, based on JavaScript, while Angular refers to version 2 and higher, which use Typescript. A major difference seems to be that Angular is more geared towards one-way binding. Two-way binding was from what I gather a common complaint from the React side, saying it's slow and leads to complex and unexpected behavior.
85 comments
[ 0.27 ms ] story [ 149 ms ] threadThe ng update command will make updating a lot easier, this has been bugging me with the fast release cycle Angular is using.
(e.g. using fs.readFile() when running in Node, while using window.fetch() when running in a browser.)
It seems that Angular team made a decision to not have out-of-the-box support for projects using such packages even in the future [1].
[1] https://github.com/angular/angular-cli/issues/9827#issuecomm...
For example both Rust’s stdweb and emscripten are detecting node/browser to load wasm file by appropriate method, they will not work in angular 6 project.
No one using React uses them. Google can't break free of old Java habits.
This article had more on it https://blog.ninja-squad.com/2018/05/04/what-is-new-angular-...
I suppose we'll muddle along until things really break down, but this pace of change is not sustainable, particularly when so much of it just seems like churn for churn's sake.
E.g. in my company we use AngularJS because of that.
I spent 3 months evaluating all 3 with a poc app and vue was the clear winner for me
There is nothing wrong with using setState()... You don't have to pull in Redux, which itself is like 100 LOC minus the sanity checks & comments.
As for backwards compatibility, as was described in the presentation on the new renderer they are working on, 600 apps at Google are built on Angular, so there is a great deal of internal pressure to make sure backwards compatibility is a constant consideration.
Along those lines, one of the big tooling features in this release is the upgrade command in the CLI, which can allow packages to self update themselves across your codebase (i.e. if there's a breaking API change, they can rewrite that API call accordingly automatically during package upgrades). This is new, so it's yet to be determined how common and painless the usage will be.
Does that mean that every 18 months you'd have to rewrite your app in the newer angular version? And if not, what does it mean?
Don't know why I got downvoted but ok I guess.
And they will tell you upgrade is painless, but it's still work. And then if you have many dependancies (and the npm culture is to make every single function a package...), one of them will be painful, another one will stop working, etc.
And now in this devops world, the same devs will do server maintenance. The next 10 years are going to be so fun to watch.
The AngularJS to Angular upgrade step is a big one. But, the latter is unquestionably a better framework once you're using it. It only needs to be done once, and it can be done gradually, if you're willing to ship both frameworks for a while. The upgrade modules they provide for running AngularJS code in Angular (and vice-versa) were a bit dodgy at first, but they are excellent now.
Once you're on Angular, there's no need for any 6-month rewrites. We upgraded about a year and a half ago, and we've kept up to date without facing any problems with backwards incompatible changes or upgrade pain. The Angular team has done a lot of work on improving the framework's internals, but the actual conceptual model and interfaces have remained stable.
Plus, if you use Angular CLI, you're also isolated from churn in the build tool world. You don't have to worry about juggling compatible versions of Webpack and its myriad loaders and plugins. It's all hidden away. Having wasted far too many hours of my life hacking on Grunt, then Gulp, then Webpack configs, that's reason enough to use Angular for me.
Currently upgrading from 5 to 6 was simple. We didn't need to upgrade 'angular' code. (we just used https://update.angular.io/) basically took me two hours (replacing all rxjs code) (code base is 35k lines of typescript and 14k lohtml)
The biggest pain between 5 and 6 is basically rxjs not angular per se and for that there is rxjs-compat. However the only problem with angular would've been if people would've used the old Http Client, however we started with 4 and directly used 'HttpClient' which also is way better since you can easily have interceptors around it.
> Rewriting things every six months is not reasonable for our team
I'm not sure why you think you'd need to rewrite things. Where are you getting your information?
That said, there are some interesting implied ambitions for Angular. The AngularDart project, the Bezel project, the AngularCompiler more generally as a point of special focus...
Combined with QuickType, C# and TypeScript it's productive as hell.
The core of the React render model is beautiful. It's far quicker to start writing and using a new component in React than in Angular, and the functional nature of React components feels good and highly productive. At first.
But the problem is, around that beautiful core, the React community has built a mass of libraries, meta-frameworks, techniques and practices that are decidedly less beautiful. After a while, I really found myself missing features from Angular, and struggling to replicate them by wiring together a hodge-podge React++ framework. Instead of being productive, I was wasting an inordinate amount of time trying to discover what the current micro-framework de-jour was for handling a particular problem in React.
For example, Angular supports view encapsulation. So you can write CSS targeting a component, and the framework will ensure that the style rules you write apply only to the HTML rendered by that components, without leaking to other parts of the app. This really is a godsend for properly isolating components in a reusable way. With React, there's a myriad of libraries for doing CSS, but most seem to be abandoned, and none seem to offer as straightforward or as easy style encapsulation as what Angular provides out of the box.
It was a similar story with forms. Which are a rich, reactive API in Angular, but seem to be an afterthought in React. And with dependency injection, both of singleton services and components elsewhere in the hierarchy.
I expect if you go all in on Redux, you can eventually build up a reasonable facsimile of what Angular provides. But from a standing start I think Angular is a much more productive framework, just because it's actually trying to be a framework, whereas React seems to be stuck somewhere between being a UI library and a framework, leaving the community to somewhat badly fill in the gaps.
Works great along w react
How does that prove his point?
This is exactly what I have found working with React for the past couple years. Once you factor in the React ecosystem, things get messy/ugly and decidedly unproductive.
I'll most likely be moving on to Vuejs.
- styles scoping: CSSinJS (many libs exist, I like react-jss)
- forms: they are just simple to handle using state
Yet more confirmation that my team has made the correct choice in switching to a mostly vanilla JS development stack (we still use RiotJS for one-way template binding). I was there for the beginning of Angular and it got me hooked on single page applications, but what I am seeing now is the antithesis of productivity.
No one building a website for a business should be using this stuff, unless they drank so much frontend framework kool-aid that they cant find their car keys without an NPM command anymore. I don't care how many internal projects at google use this framework. Our business doesn't have billions of dollars to incinerate on attempts to prove a point.
The means of successfully executing SPA and managing your UX state are not intrinsically linked with using someone's subjective interpretation of how it should go (aka a frontend framework). Treat the browser and the DOM like an actual canvas and stop looking through the perspectives of others to see it. Focus on what you want to build, not the tools you use to build it. The fact that there are literally hundreds of angular-style frontend frameworks with wildly different approaches should be a warning sign to developers looking for a consistent basis upon which to build shit.
This is an interesting comment to me because, by essentially building your own framework, that onus is now completely on you. If you want to implement code splitting or tree shaking or whatever, you have to figure that out for yourself. That's time taken away from building product features. Whereas other frameworks can offer this out of the box because smart people in the open source community have figured that all out for you.
In addition, no one coming into your organisation has any continuity of knowledge, so they have to learn all the proprietary ways your app is set up, which is more time lost.
The discussion today about React v6 is exactly what we get to dismiss (as well as any along the way from v2 - v5) since our framework work is done.
Granted, you're absolutely correct when you say new devs have to learn all the proprietary ways of your framework. But even then, since the framework is such a small percent of the overall knowledge dump for a new hire, I'd argue, that it's not much of a concern. It'll take months to learn the systems, and maybe a week(?) to learn the framework.
And to be fully honest, I haven't learned React/Angular/Vue (did learn KnockoutJS back in the day), and if I need to hunt for a job, then yes I'm behind the curve.
Do you actually believe that? Or does your organization not believe in software maintenance and opts to rewrite entire apps instead? In my experience, Enterprise^w software is never "done". A common conclusion to your story is "I've been asked to modify/refactor this app that has ben unchanged since 2005" - sure it's perfectly crafted, but it's in ECMAScript 3. Also Best practices shift over time.
A big thanks to everyone involved in shaping this release and ensuring the upgradability for the past major versions, including the huge effort in making it possible to continuously migrate from AngularJS. <3
If you care for the details behind my experiences:
We have begun migrating a ~80k loc AngularJS codebase first to TypeScript in 2016, which was the preparation for the Angular upgrade starting Q1 this year. Now we are roughly 80% migrated to Angular 5 (in the meantime we did the upgrade from 4 to 5 in a few hours thanks to https://update.angular.io/), the rest running with ui-router hybrid [1] and ngUpgrade [2] and now are looking forward to moving the rest to Angular and upgrading to 6.0.
Coming from AngularJS where many things are done without a proper reason, I have started to embrace and even somewhat love Angular for the niceties it brings it. When you already embraced TypeScript, it is a breeze to work with and I cannot recommend it enough (for large-scale frontends this is).
The one pitfall I always ended up with during the migration was that AngularJS attribute directives cannot be converted to Angular and then downgraded (In the hybrid app, the entry component is always(?) AngularJS and up from there), which is a large part of the remaining AngularJS code. There are a few workarounds but they did not seem to work properly. If anyone has suggestions on that part.
[1] https://github.com/ui-router/angular-hybrid [2] https://angular.io/guide/upgrade
For what it's worth, I really like Angular for web development, but I don't know much about the mobile side of things yet. I've just started to look into it.
But Ionic uses Angular internally -> Cordova-> PhoneGap (mobile)
. Ionic app never feels completely right as components are not as much optimized as platform native.
. If Apple/Google comes up with a new look/style for default components, good luck chasing and updating libs.
If you are targeting for mobile-app and web, just go with react-native.
Actually with angular-hybrid you do not need to use a AngularJS entryComponent. The only thing that needs to be AngularJS is the bootstrap component.
Also AngularJS components can be Upgraded easily and Angular2+ Components can be downgraded easily, too. The only problems are old school Directives which can be wrapped in a component for interop or just rewritten.
You can even remove angular-hybrid when you just "upgrade" all your AngularJS code that is used in routes. (you still need to have a AngularJS rootElement and than inject a downgraded ui-view).
i.e. you can't have `bootstrap: [UIView]` however using `<root-element></root-element>` in your index.html while root element is like that:
`.component('rootElement', {template: '<ui-view></ui-view>'})`
It sucks to create AngularJS wrapper components in Angular since you need to create two, i.e. from AngularJS component:
You need to create the following ng2+ components: and than have another which can be used in routes: and finally you can use it happily in your Ng2StateDeclaration (P.S.: I just did that today)At the mid-size corporation that I work at, we just standardized all Javascript development on Angular from a mismash of a ton of technologies. Angular seems very well suited for this role.
There was a interesting statistic recently that showed that Angular was dominating "east coast" applications (traditional financial services, pharma, insurance, manufacturing, established CS) while React was most popular in "west coast" applications - primarily silicon valley, etc.
I'm glad these two technologies are here to push each other.
In my experience centralisation and fixation on specific technology leads to stagnation quickly. IMO you should allow teams to choose their own tools. How else will you improve?
It's really good when one technology is used throughout an organization to achieve the same purpose. At some point, the technology you use is actually good enough, and incremental improvements to "keep up with the times" are simply distractions from the real work. And if at some point you find that your tech has truly stagnated, at least you're stagnated together, and can modernize together at the same time.
But when every team is doing it's own version of the same thing, that's another story. It can be crushing to productivity, in fact it's likely to be the deciding factor if some types work get done at all. And, unlike your concerns about preventing stagnation, the only way to solve that problem is to stop doing it.
Web is not dead simple (I consider web to be frontend development in this context). Why I would consider web to be hard: - it is harder to do frontend development than backend, because you write code which is sent to one of thousand different compilers, creating another layer of difficulty. Versus controlled environment where your backend code is being run - While there are only few patterns which are applied to FE development, there are many new features(PWAs, real time syncs,..) coming into web. Taking advantage of them requires learning, coding and refactoring. You might say - this is just reinventing the wheel - while partly that is true, developers will still need to learn, adapt knowledge to web, build tools.
When I last did front-end, I was using Angular 1.x, and despite some warts, I did like the overall architecture of it, and how it provided all of the important components for you and gave you an overall app organization. It felt like quite a change to try and build an app with React and experience the world of having to pick and glue together a bunch of components with ever-evolving build systems. This makes me more interested in trying to build something in the new Angular.