Along with aiming to use the bleeding-edge of JavaScript (within reason- and all thanks to Babel), this repository represents a choice of frameworks and libraries I think work well together for an enjoyable NodeJS and frontend coding experience.
A short rundown of the various technologies:
- Koa - A Node server framework with an eye on the future, using the async-await syntax. Server code compiled back to a widely adopted standard of JavaScript using Babel.
- Marko - Fast HTML rendering engine, into which we slot in our React-generated HTML
- MobX - Awesome state management library, makes it so easy I feel like I'm cheating somehow. State stores initialized on the server, altered by some actions depending on request, and then passed over to the client to continue its state-altering journey.
- ReactJS - Build views on the server according to state and then inject functionality into those already built views on the client, and continue calling MobX actions and re-rendering accordingly
- React-Router - A routing solution for ReactJS. Works great with server-side rendering too, catching all possible routes we may want to render.
- Javascript compiled with Webpack - A bundler that reads your entry JavaScript and various other files and creates a distribution build of them (using various options and plugins) for efficient client-side delivery
- Client Javascript mostly involves more React and MobX goodness for great interaction
Folder | What's in it |
---|---|
/client |
/react
/styles
|
/crossover |
/api
/constants
/mobx
entry.js
|
/images |
Self explanatory |
/server |
babel-server.js
server.js
|
npm install
Or, even better (if you are using yarn
):
yarn install
To start the development server (which is what you want most of the time)
npm run dev
To start the production server is the usual npm start
, but the code has to be built first, so:
npm run build
npm start
Or for quick production testing npm run build-start
Before deployment to a production server, your code should always be built first- so that the default npm start
can be used to spin up quickly.
I'm using the babel-register
module which is required before any other server code and automatically converts any further requires / imports to ES5 javascript. This is for development purposes only (npm run dev
) - as recommended.
The server code (and the React code which is used on the server) is then built into the /built
folder for production use ( npm start
)