The State of JavaScript 2017
stateofjs.com
stateofjs.com
In general I think tooling needs to improve, and neither Webpack nor Gulp are painless. Neither is maven, I suppose...
We used a ~20 line configuration file found on Gist to replace our ~400 line gulp build. It resulted in better optimisation, less hassle and "Just Worked™".
We wanted to add a few more things to our configuration, literally just took running `npm install some_package`, followed by requiring it in the webpack configuration.
Having to find it on gist because the official documentation is so lacking that nobody can figure out how to configure the thing except by following examples is the main problem that leads people to fear webpack configuration and to cargo cult magical config files that they are afraid to touch.
Mature tools can be understood in principle and configured without needing to see "how someone else did it."
I think lot of people don't even try to read the official doc and just look for a work-out-of-the-box conf to copy/paste. Probably because they think it's not worth it learning a tool you configure one time and never touch again.
And that's a valid audience for the tool.
Good documentation would support this audience too, with plenty of examples and recipes. Even a repository of documented common use-cases (which must exist for Webpack's automated testing, right?)
I don't care if I can just plop a simple webpack without thinking in and it will handle everything I need, because I will always need more - and besides which I have my own gulp files I can just plop in without thinking too because I wrote them and I know exactly what will happen.
The only issues I hit back then was complex cases back in the 1.X days. But if all you wanted was an app with prod/development mode that compiled javascript, css, let you import assets, minify in production and hash file names for long term caching, it's pretty simple considering everyone wants these to work slightly differently.
I don't know a more "understood in principle" tool than Webpack. There are no magical invocations just `webpack` and you are done. Plugins are usually just a require and adding to your plugins array.
I also think the maturity of a tool is in being easily understood just by reviewing someone else's config. To me, that speaks volumes for how simple and easy it is to get up and running in webpack.
With async import I am able to do code splitting. With react-intl-cra I can pull formatted messages out of my code. I had to add a grunt file to compile LESS into src, but it was easy to integrate with my package.json scripts.
Though you usually don't even need that much. Just using the node-sass or less compilers directly usually work fine. Or use something like Glamor or Styled Components to punt on the problem altogether.
{test: /\.less$/i, use: ExtractTextPlugin.extract(['css-loader', 'less-loader'])}
Edit: forgot a brace.
I can eject the app from Create-React-App and get a normal WebPack project, but I won't do that unless it's absolutely necessary because the huge community of Create-React-App devs are taking care of my config for me.
here's one for less: https://www.npmjs.com/package/create-react-scripts-less
also here are the official docs: https://github.com/facebookincubator/create-react-app/blob/m...
I felt the exact same way as you, but recently went through their tutorial/docs and was able to get a pretty good (and simple) setup without much fuss at all - a dev build, webpack dev server, and prod build. I’m only a short bit into actually proving it out for myself, but so far I was surprised since my first experience being quite negative too.
Personally I use then together - Gulp runs the tasks, one of which is bundling, which gets done by webpack. Of the two gulp was way harder to get working, for me at least.
Yeah npm can run tasks by itself just fine.
All modern high level languages have very good cross-platform system libraries and build tools for those languages usually use that language to run. Occasionally you'll run into someone that's still using Makefiles and have to break out msys but other than that it's generally fine.
I'm not trying to be inflammatory at all. I just never had any luck with any Ruby/Rails type stuff when I was forced to use Windows. I ended up resorting to JRuby.
What complex things are you doing that Windows compat creates problems? (presuming you've got some form of bash on Windows) I tend to tuck any complexity into JS devDependency libraries when using npm scripts which takes care of most cross-platform issues.
And it's not an either-or case in the real world. Our company has a big Webpack config that does a lot, and still we have 15+ scripts as well (static analysis, inserting copyright headers, sourcemap uploads, 3rd party vendoring, release scripts...). Some things are better in WP (building), while some things are just simpler with a shell script.
- it's a single, central document listing your important pipelines and their purposes - anyone unfamiliar with your setup can look at the scripts property and get a very good idea very quickly
- it's auto-detected and even auto-parsed by some tools (a Ctrl-Shift-B in vscode, for example, will allow me to select a build pipeline - there's no more well-supported central format for arbitrary loose shell scripts)
- it's a consistent entry point. If you edit your npm script to point to a separate shell script, or to run webpack/whatever instead - anything external (IDEs, CI configs) pointing to npm need not change
The above are not unique to npm, but it's a well-supported, well-understood, and very simple setup that does the above.
EDIT: (Asking this in the context of the grandparent comment suggesting getting rid of build systems in favour of NPM scripts)
The most complex "shell scripts" I've actually written for this specific purpose are simple ordered command lists, with occasional exit code checks, where appropriate. So I'm not so much talking about "writing and debugging" - this is more "replacing semicolons with newlines in a very long one-liner"
I do actually put one-liners into npm scripts instead quite often - it's a trade-off, depending on the pipeline.
Single line shell pipelines :) Exactly why I made this - https://github.com/jeswin/basho/
Even better is that you can find all the "hooks" on an instance by doing `compiler.hooks` so now you get a far better authoring experience :-D
I just think it's unfortunate that the tool needed someone to develop another tool to make it truly usable. Good software should be simple to use and configure, not dense and opaque.
I think something that individuals who try to make comparisons to their backend tooling that "just works" is that none of these tool have ecosystem constraints like the Web. I wanted to really talk about something that is important to understand about tooling, and why webpack might have some of the features it does.
In the web, you should only ship no more then ~<200kb of JavaScript (uncompressed), for your initial download. From there, you should be "dynamically" delivering JavaScript asynchronously in bundles/chunks. In addition, there are multiple module types that exist in the JavaScript ecosystem that libraries are published in. Sadly, some of the most popular libraries are being published with AMD Modules, or CommonJS, or no module system at all, and there is no consistency or way to know this about those modules without looking at their source code. Therefore, webpack out of the box supports the ability to load all of them. Not only that, but we employ a set of plugins that help optimize code using complex topological sorting, (aka things you'd probably never want to implement or hand optimize yourself) to ensure that your delivered code is the smallest possible.
Compare this to C++, or any "build" static toolchains. There are really _no_ size limits for the amount of dependencies or code that needs to be linked together. Therefore, there is no care in the world for application developers if they are generating 600GB Video Games, 10MB-100MB Applications, etc. Think if there was 5 ways to write C++ Modules/Java Modules, etc. and you had to apply the same constraints as the Web. (You'd probably see a lot more webpack's or a lot more convention tools that wrap things like webpack).
Anyways, as a maintainer of the project, we can't say this enough: "We are owned by our community". This means that if there are things we aren't doing right, that we owe you to make things easier to use, more conventional, when needed, and progressive in a way that lets you layer features and need on top of an awesome, and fast core product <3.
So if you have great ideas, please let me know. :-D
BTW, your documentation effects inspired me partly for making the documentation of https://serverjs.io/documentation/
Huh? Seriouosly? Embedded devices can be any size people want? Some software I develop uses C, Go, etc. and it would be nice to not have to worry about built artifact sizes. Admittedly I find it kind of fitting and funny that someone who maintains a popular JS library thinks that the web is the only (?) platform with build size (and possibly other) constraints, haha.
Anyway, I do appreciate your work in helping maintain an open source project, so keep that up.
Man I wish it was easier to convince people of this. I'm fighting with some teams at work who are shipping 2mb+ compressed with several seconds just for parse time...and all of the webpack tooling and features are needed just to keep it there (when it should be used to bring it down within that 200kbish threshold). And they feel its normal.
I don't think all developers should have to deal with Webpack directly, for most developers a generic Webpack config generated by something like create-react-app should be good enough.
Of course this doesn't mean that Webpack itself should not try to improve, however users should be mindful of what a hard problem the tool is trying to solve.
Not being current on JavaScript for the past couple years (which is about all it takes to be totally out of date - but I digress), I guess these are out of style, in favor of ES2015 import statements? The webpack docs [0] really don't say anything about that, just that they're supported.
As a consumer of webpack and $random_library should I care? Should I prefer a library with import over AMD or does webpack make that irrelevant?
I can't tell from these docs, but previous experience tells me this is the kind of thing that has the potential to trip me up later when it's a huge pain to switch everything.
AMD modules can effectively only be consumed by a browser, or a browser-focused bundling tool, since AMD was designed for the "cascading waterfall" loading approach. Anecdotally, I see no new libraries being written in AMD format, and some that are written in AMD are looking at transitioning to ES6 modules.
CommonJS modules are intended for synchronous loading under Node, and tools like Webpack and Browserify can wrap them up to be used in a browser.
ES6 modules are designed to be statically analyzable, which is a key factor in "tree shaking" to drop unused code out of a generated bundle. However, the ES6 spec only defined the syntax for modules, not how they should be loaded. Major browsers have finally implemented native support for ES6 modules, but there's still a lot of complexity around how they're going to be implemented in Node [0].
There's also complexity around how lib authors publish packages to NPM. The most compatible approach is to author lib code as ES6 modules and whatever syntax additions you want, then compile it to CommonJS and ES5 before publishing. However, that loses out on any possible benefits from tree shaking. See this Twitter thread with discussion from Dan Abramov [1].
For more info on the history and differences between various JS module formats, see the "Javascript Module Formats" section of my React/Redux links list [2].
[0] https://medium.com/the-node-js-collection/the-current-state-...
[1] https://twitter.com/dan_abramov/status/938090483166924800
[2] https://github.com/markerikson/react-redux-links/blob/master...
Quite possibly because one of the biggest backers of the AMD format, Dojo* is now transitioning to ES6 modules.
*I really gotta hand it to those folks. They pioneer quite a bit of tech. Sometimes it sticks, sometimes it falls by the wayside, and sometimes it returns as someone else's "idea".
There's also a growing trend among some major libraries to publish NPM packages only as ESM and use an shim like @std/esm to load them in Node:
This response comes off as kind of snide, as does the post it responds to; I don't care to tone police, so that's fine, but I do want to try to understand the perspectives here.
I'm imagining you're coming from a place of: you have a (fantastic) tool with unique challenges, and it's incredibly frustrating to have that tool judged a) based on requirements it wasn't designed around and b) (likely?) based on older versions of your tool that has since been improved. Those are fair things to take issue with.
A couple things, though: "Hey thanks for the candid opinion!!!" - This seems pretty obviously disingenuous. "Maybe it's been awhile since you have taken a look at our documentation!" - Comes from the position that OP is simply out of touch, and that their issues aren't valid. They may or may not be, but this is "Maybe you're wrong!" and not "Maybe there's been a misunderstanding!" "So if you have great ideas, please let me know. :-D" - In context with the above, this is more like "Let me know when you actually have a great idea" than it is like "Please open an issue or pull request so we can actually fix it". The OP does clearly have an issue with Webpack - "You spend 2 days getting it into some semblance of a working state, and never touch it for fear of introducing a new issue" - and that issue can be addressed, if developed into something more actionable, or may already be solved by the improved documentation of 2.0 & 3.0. As it stands, though, it seems more likely to me that nothing comes out of it, which is a shame.
Not trying to put words in your mouth, I just expect you're more frustrated and want to make a better tool than you are trying to necessarily defend your tool, and I'm not sure you're communicating the former over the latter. Would love clarification if I've misinterpreted something, or correction if I seem totally off the mark. And again, lest I come off more aggressive/dismissive than I intend - thank you for all your work developing and maintaining Webpack. I imagine it's a relatively thankless task for the breadth of what it offers.
Between the multiple exclamation points, emotes, PR fluff and the content itself I was actually unsure if this is a parody account or not but it seems to be a genuine Microsoft person.
There are also slimmer/newer/zero config alternatives like:
React really isn't tied to webpack - babel maybe. If you're just using webpack for the basic functionally of babel automation and es6 import resolution it's trivial to setup but probably not the best tool for the job.
Writing modern JS is a peace of cake, it's better to understand 100% of the codebase than to use way too much magic APIs. (well I understand the whole computer, all layers, from hardware to operating system, to software - so there is no magic for me, that helps a lot)
I've built pipelines with rollup and browserify, both which have problems and I'm not entirely happy with but I found an improvement over webpack.
[0] My project allowed users to have a single JS file that would be able to `import` npm modules and the have the bundler compile all of the dependencies into a single tree-shaken vendor.js, while modifying the main file’s imports to be human-readable es5. Webpack’s es6 import code was tightly coupled to the format of its output.
I also recently went through the process of refactoring our build to use Webpack 3.8. The documentation is a LOT better. Their introductory docs especially. I feel like I finally understand parts of WP 1.x after reading the 2.x/3.x docs.
Gulp and Webpack really are two separate things. Gulp is basically like Ant had a baby with NPM scripts. Webpack is closer to Maven, but Maven really tries to do a LOT more.
For any project, start with NPM scripts for your task running, then include gulp if/when you actually need them. Same goes with Webpack: don't include it in every project just because you think you might need it eventually.
Meanwhile, react.js has over half the participants saying: "I've USED it before, and WOULD use it again".
It is possible, but not a good option, to also use React without a build step by either skipping JSX (ugly and cumbersome to use) or by using the Babel runtime (large, not really meant for production).
I coded with Angular 1 for 2 years and had to open the doc each time I wanted to use ngRepeat…
I just wanted to render a list components or conditionally render something.
When I made the move to React - following the painful Angular2 beta update - I was so relieved to just use Javascript again.
It's been amazing writing templates that are just functions in a clean language like jade/pug. Jsx still has a lot of boiler plate.
https://github.com/tdumitrescu/virtual-jade
Also has a webpack loader https://github.com/tdumitrescu/virtual-jade-loader
Most of all I love this kind of libs that work well with other libs. It's like Lego programming. Choose bricks you like and stack them.
Not a framework, but library.
And while React is simple, you quickly have to add a router, some state management etc., so instead of a small simple library most React-projects I have seen end up being a custom framework.
Re. animations, etc., those aren't too hard with lifecycle methods, which, if I understand correctly, Mithril copied from React.
Modals: https://reactjs.org/docs/portals.html
Or animations (in react-native at least, but if you click the link you'll see it works for the web just as well): https://www.webpackbin.com/bins/-KfKys3S2mgEH9UsE8GL
In Vue you're pretty much in the rain. The community isn't encouraged to explore due to half-baked-in solutions, and baked in stuff in general is browser-complacent and thereby very limited. So you get css class animation groups (=react-animation-group), state is a one trick pony tied to the lib, theming isn't considered. There are so many open gaps and holes in the eco system at large, i'm scratching my head over how this would possibly be a plus or easier to the developer. It is often not.
Mind elaborating on this? I'm about to start a project that will use SSR, and I'm really interested where Vue (which would otherwise be my preference) might limit me.
To me, it's one of the easiest frameworks to teach and maintain.
While I believe React is technically a more correct way to write applications, it can be very heavy-handed. Vue is a great compromise for mixed front-end / full-stack teams.
A bit of apples and oranges comparison but writing Vue felt just like first time I wrote Python many years ago: FUN
I write a lot of embedded Javascript (based on Spidermonkey) so I was happy to find that vue seems to make the same decisions I often make in my own code.
I am sure React is great for full time webdev of heavy SPAs but learning curve feels longer, plus the whole framework feels heavier.
1. Setup prettier, using the defaults, with the recommended pre-commit git hook
2. Never talk about code formatting again
(Don't like the prettier defaults? Please refer to bullet point #2)
Also, though, eslint offers a bunch of non-style code correctness checks, which is something prettier doesn't even try to do. So the general advice is to use eslint with all the style rules off, and use prettier to handle style.
Webpack uses the "configure a black box + add a bunch of plugins" approach to the front-end build pipeline, whereas I recently used Gulp to create a beautiful build workflow using Rollup, Babel ES6, JSX, Sass, and a basic livereload webserver in less than 80 lines of very readable, plain javascript code that would take roughly 5 minutes to explain to a new developer on my team faced with build pipeline modifications.
I also don't think many people understand that using Webpack encourages non-ES6 import semantics that will break your source code if you ever decide to switch from Webpack. Encouraging things like "import app.css" seems like it might confuse junior developers who don't understand what's going on under the hood, or have to eventually work in non-Webpack systems.
Sorry for the rant here, haha, I'm a huge fan of these surveys and love taking the opportunity to talk crap on build tools / frameworks :).
Overengineered? I feel like un-engineered is the right word for it. I use it, but I dread touching anything in my config, cause every time I do, something breaks.
I've tried gulp and grunt, and both of those are pretty bad as well. Different problems, but problems nonetheless. I'd love to see Parcel deliver on their promises, but as of right now it's alpha level for even basic use cases.
Gulp takes the philosophy that build is code. You hand code all of your pipelines. That's works perfectly fine for simple applications where all you're doing is writing code in a single language (like say just javascript for a node backend), but I've found that it is an unadulterated nightmare trying to get things to work across types of files, as is required by front end development. Your HTML, Javascript, and CSS interact with each other in several different ways, and things no longer fit into a neat pipelines abstraction...it resembles a graph more than anything. Throw in transpilers or compilers, parallel processing pipelines (like for sourcemaps), and it quickly becomes buggy chaos.
I maintain that the best abstraction for a build system is that found in Make. Make is actually brilliant in some respects...it is a language for declaratively building a data flow between processing pipelines, but allowing you to use a Bash-ish imperative style to build those pipelines. The problems of Make are many: not everything uses files as inputs or outputs, not everything has a 1:1 input-output ratio, dynamically selecting inputs or naming outputs is horrendously buggy, etc.. But the concept and philosophy behind it are brilliant. If there is any build system of the future, it will be borrowing heavily from Make.
I don't think I understand how HTML, CSS, and Javascript interaction makes Gulp development complicated. My CSS files are totally separate from my HTML/javascript, and are just included directly in my index.html. I use JSX with React to do inline HTML markup inside my .js files, which Babel handles just fine through its transform-react-jsx plugin, included easily in a one-line command in my Gulpfile which is just a very simple "babel" function call configurable via a regular .babelrc file.
Basically, I have yet to hit any limitations with the "build-is-code" philosophy, despite years of people telling me it's an awful and horrible thing to do. I can't forsee my <75 line Gulpfile growing too much, as the plugin ecosystem is robust and I already have all the features I could possibly want.
For reference, here is my simple Gulp setup. Each line is easily readable and explainable to anyone who knows basic Javascript (and a single Node.js primitive called "pipe").
As I asked another commentor: If you can point me to a clear tutorial on Make that lets me do all the things this Gulpfile does with extreme ease, I'll abandon Gulp and use Make exclusively for all front-end projects.
https://gist.github.com/c-johnson/b66d376b686c16efeb26484e89...
Plus there's no incremental building - all CSS or JS is rebuilt on every save, your server doesn't build the project when it starts and it can't do things like hot module replacement or CSS injection - the latter of which BrowerSync can do.
I'm guessing you're using this on your smaller personal projects, where doing a complete rebuild on every save is fast enough not to be an issue, and reloading the page on every change won't be a pain when experimenting with new features or debugging complicated UI issues.
If someone wrote a "makefiles for web dummies" tutorial that told me exactly how to do things everything in bash I know how to do with javascript, I'd love to read it.
I've written more makefiles for Java projects when I despised Eclipse than for any other reason. I'm sure that's completely wrong and fucking awful, but it worked really, really well.
Also, Webpack is a sequence of one-liner incantations that do things that would be annoying to by hand, like starting a websocket server to talk to your application to hot-swap the code.
The declarative config is an improvement over Gulp and Makefiles for that reason. Same reason I prefer pom.xml over build.gradle.
Portable - run on mac, windows, linux, others.
Embedded - ship with the project.
JS friendly / Integrated - for instance you can read and write from JSON/JS/APIs easily. Tons of plugins adapted to web and mobile related concerns. Try to minify CSS with make?
Adapted to modern hardware constraints - for instance, sharing global deps is not the default best practice anymore since HD space is not at premium anymore. Multicore/multithread is the default option, not behind a flag. I/O is the modern constraint, not RAM.
Limited knowledge to get started - imagine it is the first app you are making in JS, you just learned the diff between the browser and the server ;). Gulp takes you from where you are, make requires knowledge of Linux, bash, env variables, probably apt-get/yum, make itself. A place you have never been before.
Modern doc - it's my opinion, but man is an awful doc interface. No quickstart, it has a TOC, not a menu and no search bar sig.
Innovative 'cause no legacy - we wouldn't have investigated hot reloading, smart watch mode, "better" pkg mgmt.
Easier to debug.
No context switch ...
noed.js
Also really looking forward to seeing how Reason shifts between this year and next... :)
Since hearing about it we have a port of a large project in progress and whilst the typing is nice, the improvement in build time alone looks like making it a worthwhile exercise.
Big things to come I suspect, particularly with it feeling like such a natural progression of so much of FB's recent JS work.
Seems like a natural fit. Wasn't the whole Fiber architecture inspired Algebraic Effects, natively possible in OCaml?
Sebastian Markbåge even toyed with adding algebraic effects to JS... wild stuff:
https://esdiscuss.org/topic/one-shot-delimited-continuations...
I'd love to see an explicit "percentage of those who've used it who would use it again" number for each library, easily glanceable. I think that's what most of us are probably doing in our heads when looking at this data.
Frontend frameworks: https://i.imgur.com/Sd1g5zw.png
State management frameworks: https://i.imgur.com/HCD32bo.png
Edit: I know i'm probably getting down-voted for this, but even though the effect is brief, it's really jarring -- similar to the "<blink>" tag.
Agreed on wanting it earlier, but the results are still super valuable.
Angular 2 should be noted as Angular.
Starting with the latest version of Angular is generally the best idea, though you may be tied to earlier versions depending on what other modules you want to use. For example, the npm version of ng-bootstrap is still tied to Angular 4 (though one can easily build one that does from the github repo). I would recommend starting with ng-cli as most (older) books will start you off with some other build system (e.g., system-js, an older webpack plugin).
If you don't know a ton of other frameworks, tools and the like AND need to get something built this quarter, learn the latest version of Angular 1.x
Otherwise, learn Angular 2, Typescript and all the other stuff that people use for building etc. all at once, focusing heavily on Typescript and core Angular concepts first.
Those horses have left the barn.
My org has been dealing with Angular and AngularJs for the past two years and developers and non-developers alike get confused or unclear all the time when we try to communicate about the two. The only thing that's been successful has been to describe them as "Angular 1.x" and "Angular 2+".
On top of that, when doing searches for documentation and issues, it's still absolutely necessary to add "2" to searches for the right version of the framework.
It would have been a lot easier on the world if 1.x was the last version of anything called Angular and Google named the new thing FooBarJS.
But Google knows how software teams work. Names and versions are easier to evaluate than trying things out or running comparative analysis.
Teams hire "Angular" developers which usually means "1 or 2" even though it very much shouldn't.
Teams will set aside time to "upgrade to Angular 2" more freely than they would set aside time to "switch to a different framework, FooBar.js", even though with Angular 2, those are the same.
Even if teams would set aside time to "Upgrade to new framework", they're much more likely to do a alternatives analysis if it's not just a version number changing.
That said, I think this hurts developers and teams, and I think it's loosely nefarious, but it was probably necessary for Angular 2 to get the adoption it has today.
Surely that can't be — see the "Other tools" page.
In the way a pile of half decomposed meat by-products is "richer" than a surgical instrument.
/\
----+---- / \ ----+----
+----+ +------- | / \ | +------- +----+
|the | | | /------\ | | | of |
+----+ +------+ | / \ | +----- +----+
| | | |
+-----+-+-----+ -------+ | +----+ | +-------
+-----+ +-----+ +-+----+-+ ( ) ++
| | | | ' ||
| | +--+ +-+ +-+ +--+ | | ++---+ +-+/--+ +++ +++--++ |+--+
| | +++--+++ \\ // +++--+++ +-+----+ +++---+ +-----+ ++| ||+--+++ |+--+
| | || || \\ // || || +----+-+ || || || || || ||
| | +++--+|| \V/ +++--+|| | | +++---+ +-++-+ +++-+||+--+++ ++--+
| | +--+++ V +--+++ | | ++---+ +----+ +---+||+--++ +--+
+-+ +-+----+-+ ||
+-+-----++ +----+ ||
+-----+ /\/\ -----+ +---+ /\/\ ++
/ / / | +----+ | | | \ \ \
\/\ / +----+ | | | | \ /\/
/ | | | | | \
/ | | | | | \
+----- +----+ | |
Will you be wise enough to escape the JavaScript Jungle? Take the challenge to find out!I really like all this information and the way it's presented.
- Developers likes newer tools more than older tools
- Developers who work with newer tools are paid less than developers working with older tools
These points are not really surprising.
So, I'm asking you - as an ye olde php (and laravel) guy, where would one even start? I guess node.js and expressjs is where I look first and then branch out? Also, what's with the build systems? Isn't it js?
Overall very pleasant experience.
Edit: woops, forgot to say what I actually wanted to say! You don't need to write everything in one language. I actually abhorred that idea, and glad I found a stack that 1. doesn't need much maintenance 2. doesn't force me to spend countless hours learning about why XYZ is better than ABC and how QRT were wrong about this and that and learning 100 different new concepts and terms. I put together the stack myself, and it worked without me having to bend my programming knowledge to the particular task. There's value in this.
So I don't think you are the only one :D
It is opinionated (as in, it picks a single option; webpack instead of gulp, react instead of angular or vue), but I think it does a good job of introducing things in isolation. I ran through the tutorial a couple times after I was more familiar with things.
One language, running on a JVM on the server and compiled to JavaScript on the browser.
On the client side, I personally use vue.js + webpack. It works for me. With the nicely focussed supporting libraries (vuex, vue-router, vue-resource), I find it easy to write performant, maintainable code.
I've also written a few react apps. It's basically a slightly different approach to the same problem. It's a more mature community and has better testing solutions.
Either are good bets. For a build system I prefer webpack despite the apparent complexity. It's really just a way to transform node.js module into modules you can use in the browser. Gulp is an option but if going that route I'd just use npm scripts
Both PHP and JavaScript started as ill-conceived and/or rushed-up projects that due to (different) circumstances became hugely popular, and thus, the warts and faults started to be addressed and corrected little by little.
In this "correction" process, PHP 7 is much more farther away (more advanced, more mature) than the current state of Javascript, so i'd advise to stick to PHP 7; for the front-end, if you want to explore what you could do with heavy front-ends (i.e. Single page apps), try something like ClojureScript rather than straight JS.
https://superuser.com/questions/318912/how-to-override-the-c...
* { font-weight: 400 !important; }
The idiom of ephemeral, throw away, spaghetti of dependencies was born out of the way the web platform moved forward, the short lived nature of websites and web apps, and the spread of developers with different backgrounds that were working on it all.
If we were using Javascript to develop native windows apps then I am sure the ecosystem would be very different. However, that would be dumb, right? cough
As much as I would like to have something different for the browser (such as Scheme, as originally envisioned, or Lua, which would have been a better fit), the world has moved on.
Only hope is to compile to javascript or webassembly (or "transpile", as js folks like to call it).
Now wasm has our hopes up again but without direct dom access.
You get 90% of the functionality at 10% of the complexity, and your back end looks essentially the same as it always has, in whatever language you want.
Perhaps "AngularJS" and "Angular 2" would make an appropriate compromise between being correct and being clear to people not as familiar with the Angulars' release histories.