Google Web Starter Kit
developers.google.com
developers.google.com
I've been using webpack [2] for a few years and wouldn't willingly go back to this style of writing web apps. Once you learn how to use it, the world is your oyster. You can write a loader or plugin to achieve pretty much any kind of requirement that comes your way.
Consider replacing sass with cssnext [3], or even directly using postcss along with the few plugins you need. As an example, you can use native css variables during development and compile em away for production. Another great addition is the :matches selector, which makes for much cleaner selectors in certain cases. I never really found much value in most other sass features.
Instead of running imagemin as part of your build process, consider installing imagemin-cli [4] and applying optimizations before checking in images. That way it only has to done once, regardless of how many times someone checks-out your repo.
Even if you enable ES2015 compilation with babel, you don't get any polyfills. That means trying to use standard ES2015 globals like Map, Set, or Promise will not work on older browsers. If you're gonna tell people they can add ES2015 support by changing a single line, it would seem prudent to mention this gotcha.
[0] https://github.com/facebookincubator/create-react-app
I think that CRA is either useless as it is too simple and confusing (in its first run, before you "eject"... what are those react scripts, for example?) or too far away down the road of "choose what technique is best for your project" once you "eject".
I rather consider using a "true" starter kit, with no helpers and not many applied opinions to it (like, no redux for example and/or no decision on how to handle CSS). With this principle in mind, I wrote my starter kit https://github.com/claudioc/react-with-typescript-starterkit (yes, there are many of them already, but I try for it to be a middle ground between something that you want to use to bootstrap an real new app and something you study to learn the _what_ you need to start and begin by yourself).
I know you meant well, and this is just the state of the world, but I can't help but feel like a dinosaur just because I spent the last 5 years focusing on server/cloud infrastructure.
Is there any hope for someone like me if I ever want to step back into it? I ask sincerely. It seems like every best-practice framework's compelling proposition these days is that it's "like XYZ, but fixes this obscure edge case", where XYZ is something that only came out 2 years ago, so I never used it, never mind understood properly.
[0] https://hackernoon.com/how-it-feels-to-learn-javascript-in-2...
Many people spend X hours a day obsessing about whether css-turd-polish.io is better than Sassy.js v4. If you spend those hours working on something productive, you're automatically ahead.
The framework churn is increasingly a perpetual motion machine for conference talks. Don't go to conferences and you won't feel like you're missing anything.
Anyone who has a solid grasp of (modern) JavaScript will be fine with any front end tech stack.
Ideally you would get a grasp of what they need to do and some idea on how they need to do it. If you don't then you should hire someone that does, or who you can feel almost absolute confidence in. Then let them do the hiring.
Just my two cents.
Understand that good programmers are kind of hard to find, but okay programmers with experience in XYZ stack are not. Why? Because any reasonably competent programmer can become familiar with a new framework or library in about a week or two. Being able to separate the signal from the noise, and architecture an application well within that framework? That's what you're looking for. The tools themselves aren't that important.
React is an incredibly safe bet as well. Facebook is so heavily invested in it that they have multiple engineers working on it full-time. Furthermore, since they actually use the framework, any breaking changes are required to have a clear migration path. They published a blog post [0] explaining their strategy for how they intend to handle version transitions, which I consider incredibly developer-friendly. Look at angular 1.x for an example of a horribly handled transition.
[0] https://facebook.github.io/react/blog/2016/02/19/new-version...
That doesn't mean you stop learning. It does mean you inject a slow low pass filter in your life and don't react to every little movement in technology. You can learn about them while realizing your end users don't care and, in general terms, these technologies have no material advantages in delivering what customers are after.
Engineers are not business people. Do no follow what someone with no business experience says because you'll find yourself jumping from tech to tech and no servicing your customers.
I'll note that plenty of these tools and libraries have been around longer than two years. If I remember correctly, Webpack came out in 2012 and React in 2013. I point out these two projects because they caused a fundamental shift in the way I approached web development, and neither is looking like it'll be going away soon.
My suggestion would be to try out create-react-app [0]. There's still some stumbling points, but it does a good job of showcases the general direction many people in the webdev development community have moved towards. It hides all the build stuff into a black box. As you become more comfortable with the ecosystem and the need arises, you can eject and access all these tools directly.
I totally agree that the webdev community should strive to do a better job at explaining the purpose of all these tools, but I don't think this problem is limited to them in the slightest. In fact, I can assure you I feel the exact same way you do when I look at many of these cloud / devops / server / backend tools.
Do I want chef, puppet, or ansible? Oh, but you need better dynamic configuration management and service discovery, so be sure to pick up consul or etcd. Remember KVM, jails, and vagrant? All those are dead, containers are the new hotness, say hello to Docker. If you wanna be web scale you'll really need Kubernetes, cuz you wanna be like Google, right? But also check out Deis or Flynn, so you can build your own cloud in the cloud. There's a few other HashiCorp products with nice-looking sites, but I don't even understand the problems they solve well enough to even try poking fun at em. Let's not forget databases! Remember MySQL? It cloned itself and changed its name to Maria. But it turns out that it totally sucks and everyone is using PostgreSQL. Those won't work if you're trying to be web scale, turns out RDBMs are a thing of the past, the future is all about NoSQL. Try out Mongo, it's so easy to use! But be sure to also check out Cassandra, CouchDB, and RethinkDB. They're all NoSQL, but different, but still the same [1]. If you're really set on being like Google, then CockroachDB is the only serious choice anyway. Is anything going slow? You'll have to add some caching with redis or memcached. It's time to jump on the real-time train too, so you'll need some pubsub magic, luckily you can use kafka, rabbitmq, or redis. I'll stop now, since I think this is already way too long. However, I'll note I didn't even mention big data, analytics, or monitoring.
In short, you're fine. Don't worry about it. Keep building things in jQuery. It works, there's plenty of documentation, and everyone's familiar with it.
I'd start here: https://github.com/verekia/js-stack-from-scratch
And then, once you've internalized what's going on here, break out create-react-app and just get to work.
https://guides.emberjs.com/v2.13.0/getting-started/quick-sta...
That's a curious choice. MDL isn't being developed further and is being replaced by "Material Components for the web" https://github.com/material-components/material-components-w...
From https://github.com/google/material-design-lite:
Limited support
Material Design Lite is now in limited support, with development having moved to the Material Components for the web repository.
No further development is taking place in MDL by the core team, but we are happy to review PRs, fix critical bugs and push out new releases. No breaking changes will be accepted.https://github.com/google/web-starter-kit
> Last release (v0.6.5) on December 13th
That choice is not that curious if you correct for project age.
The mess of Web development is choosing what to use. It's pretty fun once you get behind the wheel.
One of them can only be driven if you control every single circuit manually, the next is missing an engine, and another has no windows, roof, doors, or seats.
Each of the tools would probably be useful for some purpose in a way, but with the entire toolbox of JS utils combined, it’s just a fractal of bad design.
On the other hand, you can look over into the JVM world, and, well it just works. There’s one option for dependency management and handling of compilation and preprocessing (gradle), you don’t have to handle any complicated libraries or anything, you can very easily add annotation processors or asset preprocessors as easily as adding a new dependency, and basically everything works natively together.
I want to add preprocessing so my JVM 8 code works on JVM 6 or later? I simply add the retrolambda preprocessor, and am done. One LOC.
Configuring Babel in the JS world, on the other hand, ends up with several hundred lines of webpack or grunt or gulp configs, you end up dealing with either merging all assets or using system js or whatever the latest fad is.
The JS world has recreated all the complexity of the JVM world, but worse.
This complaint generally comes from the opposite direction—that the JS ecosystem provides "too much choice", which can lead to FOMO or analysis paralysis if you let it.
> On the other hand, you can look over into the JVM world, and, well it just works. There’s one option for dependency management and handling of compilation and preprocessing (gradle)...
Gradle, Maven, Buck, Pants, Bazel…
That’s exactly the issue. You have two hundred choices, but all are broken. Every single choice is missing something. You could patch them together, and get something that kinda works...
...or the developers of the two hundred solutions could work together on a handful of solutions, and have a handful of working solutions.
> Gradle, Maven, Buck, Pants, Bazel…
Buck, Pants, and Bazel are basically unused for now, as none of them handle dependencies properly, and they are almost exclusively used in large, corporate codebases with vendored dependencies.
They are as relevant to this discussion as Perforce is to a discussion about version control: Most startups or users will never have to deal with it.
And we get to keep the miracle that is robust sandboxing for dynamic code download and execution, and a choice of browsers from vendors consistently following one spec.
Even if you use TypeScript, the type system is subpar, the tooling for static analysis is mediocre, and you still need complicated transpilation steps.
As mentioned, I extremely hate the entire build and dependency management infrastructure of the JS world.
Would be interesting to transpile from more strongly typed languages also, that's probably where the mainstream is heading
Even if Gradle was the only option, you'd still have two choices of which language to write the build scripts in -- newcomer Kotlin or the legacy Apache Groovy.
scnr
Angular! Wait, Angular 2. No wait, Polymer. Sorry, how could I be so rude - Progressive Web App with no framework.
I'm curious why people keep asking this? Github is very active - many commits per day. There are multiple releases per year. Flutter (which uses Dart) got a fair amount of attention at Google I/O. Where do you look to decide on project activity?
I, who do not know much about this thing for sure but I do know that Google will walk away from things, got the impression that is what was happening.
Not fair, maybe, but that's the answer to the question that you asked.
I think this is pretty obvious. Dart was created to be an VM-optimizable language for the web.
I attended talks by it's creators in the early days, and this was the majority of the conversation.
Then other browsers refused to implement it and even stable Chrome never included DartVM, and the project announced it was giving up on that goal.
So with the raison d'etre gone, people wonder if the new language is still used. If infinite RAM had been invented three years ago, people would be asking the same question about Rust today, despite the fact that the language has more to offer than low-overhead maintainable memory management.
I was thinking that the decision not to ship with Chrome was very old news, but actually it was just two years ago [1]. Time flies!
Dart for the web is purely a compile-to-JavaScript language now. The last bit will be replacing Dartium with DDC [2].
The Dart VM is still around. It's used in Dart's command-line tools and in Flutter. Also, the Sass compiler is moving from Ruby to Dart. [3]
[1] https://techcrunch.com/2015/03/25/google-will-not-integrate-... [2] http://news.dartlang.org/2017/06/dart-124-faster-edit-refres... [3] http://sass.logdown.com/posts/1909151
Angular2 looks solid, but I'm happy with React despite the warts in the ecosystem.
Tech trends are capricious - perhaps they are covering all the bases and self-disrupting? There is a 2014 Ars Technica article titled "Google’s product strategy: Make two of everything"[1].
https://arstechnica.com/business/2014/10/googles-product-str...
create-react-app gets it.
This does not.
Wait, did I miss something? Wasn't it google who started the "vendor everything" philosophy in the first place?
But you can always use shrink-wrap or other package managers that guarantee immutability.
Oh, I guess I should say I love npm/yarn and use it as a core of all my projects. ️
You get everything you depend on, stuff it into a folder named third-party, and check it in forever (or until security bugs, features you need, etc). Include all and any licences, this is important.
When dealing with any software that's supposed to be our there for decades, the last thing you want it to have unplanned work because of missing libraries.
See anything with a "cute" license, such as WTFPL? Don't use it for work.
I needed some wtfpl code for something, and asked a team of corporate lawyers to evaluate it.
They deemed acceptable, and whitelisted it at one of the biggest software companies around.
Node would be even worse.
So the choice is either maintain a fork of every dependency or vendor them, and vendoring is considerably less painful imo.
(I'm not saying it's a good solution, mind you)
That way we can track and keep them in sync without having the problems you described.