I tried creating my first javascript isomorphic application with IMA.js framework (https://github.com/seznam/IMA.js-skeleton ). At first glance I have a few questions:
Calling "gulp.dev" opens new Chrome window.
a) Why Chrome? Can I change it? What if I use Firefox? What if I don't have Chrome at all?
b) Why can't I close the window?
There's recommendation for using IMAError. Why is that?
Why do I have to forward $Utils to props? What is it's function?
How exactly communicates Controller with View?
I will try answer your questions:
IMA.js has unit tests that are launched on file saved. For running IMA.js and your tests is used Karma. Karma need some launcher.
a) Chrome is used as a default launcher for Karma. In karma.conf it is possible to change one loader to another one (Firefox, Opera, ...)
b) You need this browser window for tests. When PhantomJS 2.0 launcher will be released, it will be the default launcher. After this change it will run in background.
IMAError is inherited from native error. But it gives you the option to add other parameters into error data - for example: status code, url etc. It solves some issues with stack, too.
$Utils is the set of utilities, helpers or tools for React components. It allows you to pass whatever you want into the component. For example: Router for link generation, Dictionary for translations, EventBus for firing events to controller etc. $Utils are automatically available in this.utils property inside every component that have $Utils property set.
Controller is setting React state of view. (See https://medium.com/react-tutorials/react-state-14a6d4f736f5) From View to Controller communication you could use EventBus or whatever you want (Dispatcher).