JS und React Best-Practice

Spiele zur Zeit etwas mit ReactJS herum und da kommen mir doch ein paar Fragen auf bezüglich der Best-Practices.
Grundsätzlich ist das ganze erstmal toll. Aber irgendwie stören mich doch ein paar Punkte.

Zum einen verwende ich ES6, also Klassen und JSX, also XML-Erweiterung.
Die Folge davon ist, dass es ein Build-Prozess braucht, der das ganze nach ES5 transpilliert.

Das ist dann auch schon der erste Punkt der mich stört.
Einfach coden und das ganze ausführen, wäre schöner.
Die Build-Umgebung ist absurd riesig. Um ein Projekt anzulegen nutze ich create-react-app https://github.com/facebookincubator/create-react-app
Das braucht erstmal 5 Minuten um alles für ein Hello World anzulegen, lädt das halbe Internet runter und packt es in einen node_modules Folder, der mal so 80 MB schwer ist?!?

Alternative wäre ES5 nutzen und auf JSX verzichten. Funktioniert, sieht aber im Vergleich schlechter, mühseliger aus und würde mittelfristig auch nur dazu führen, dass man sich eigene Abstraktionen für React.createElement erstellen würde. Weshalb dies also vorerst mal nicht interessant ist.

Die Frage, die bleibt ist, wenn es eh schon einen Build-Prozess braucht, bei dem am Ende ES5 rauskommt, warum nicht gleich auf JavaScript verzichten und was “richtiges” nehmen? Wobei React als Vorgehensweise, Framework gesetzt bleibt.
Alternative 1, wäre ClojureScript und om https://github.com/omcljs/om
Clojure als Sprache ist ok, om.dom als Alternative für JSX ist auch gut.
Alternative 2, wäre statt JavaScript entweder Kotlinjs oder Scalajs eben mit React. Vorteil wäre, dass man sich den ganzen Unfug der manchmal mit JS einherkommt erspart.

Was sind da eure Meinungen dazu? Weitere Alternativen und Beweggründe?

Jaja, NodeJS/gulp/npm :slight_smile:

Hatten letztes Jahr viel Spass damit, als ein Entwickler seine leftpad JS funktion zurueckgezogen hatte und das „halbe Internet“ kaputtging.
How one developer just broke Node, Babel and thousands of projects in 11 lines of JavaScript • The Register

Das ganze JS „gefrickel“ bewegt sich so schnell wie sonst nix, aber stabil und zuverlaessig geht anders…

Anstatt npm nutzt man seit ein paar Wochen yarn, ist schneller, um Tests zu schreiben braucht man nur ein halbes dutzend libs (QUnit/Mocha + Chai + Enzyme und weiss der Teufel was), und bei einer der Test libs (weiss gerade nicht welche) geben die asserts immer true zurueck falls man bei der Expression einen Syntaxerror hat… :o)

ScalaJS oder KotlinJS klingen fuer mich noch unreifer…

Man hat X-Wege um etwas umzusetzen, und waehrend man etwas umsetzt, kommen nochmal ein paar neue Wege hinzu, ausgereift ist nix davon, willkommen bei JS :slight_smile:

Bezueglich der package.json, du solltest du auf Versionranges verzichten (was leider default ist), um das ganze reproduzierbar zu halten.

Falls du Maven nutzt um ein Java/JS Projekt zu bauen, sieh dir frontend-maven-plugin (GitHub - eirslett/frontend-maven-plugin: "Maven-node-grunt-gulp-npm-node-plugin to end all maven-node-grunt-gulp-npm-plugins." A Maven plugin that downloads/installs Node and NPM locally, runs NPM install, Grunt, Gulp and/or Karma.), da kann man dann die Versionen der Tools/Plattform zumindest richtig einstellen.

Hier noch etwas zur Aufheiterung bez. was da so alles im node_modules Ordner drinnen ist: https://medium.com/friendship-dot-js/i-peeked-into-my-node-modules-directory-and-you-wont-believe-what-happened-next-b89f63d21558#.5vy6vec6g

Es wäre überlegenswert Dart als Programmiersprache zu verwenden. In meinen Augen wirkt das am ehesten noch ausgereifte und unterstützte Sprache.

*** Edit ***

Falls du doch gerne ohne JSX auskommen willst, aber trotzdem ein Framework verwenden willst, wäre Vue.js womöglich interessant. https://medium.com/js-dojo/react-or-vue-which-javascript-ui-library-should-you-be-using-543a383608d#.qbhudg20j