NEAR Stack - A node.js Full Stack
About
This will be a template framework that will allow us to easily create new Node.js servers in the future, simply by cloning the repository. It is tuned to our liking and understanding, so that we can know where everything is and how everything works.
NEAR stands for Node, Express, AngularJS, and RethinkDB. Of course, there are plenty of other packages included in the stack as well, but those form the foundation.
Goals
- Full Stack - boilerplate content for all aspects of web app development, from the frontend to the backend to the databases.
- Flexible Deployment & Scalability - completely designed from the ground up to be deployed with minimal effort to as many servers as necessary.
- Automation - usage of task runners and scripts as much as possible to allow us to focus on development almost exclusively, and not have to worry about too much other stuff.
- Adaptability - easily be able to adapt the stack for any application involving node.js, from a simple html static server to a complex websocket server/client combo.
Tools
- Server Platform: Node.js. I think we've pretty much decided on this one from the start.
- Application Framework: Express. No other options are mature enough to be useful yet.
- MVW (Model-View-Whatever) Framework: AngularJS. While Express handles the framework on the server-side, AngularJS takes care of everything on the client-side.
- Templating Engine: Swig. Swig offers everything we need in a rendering (templating) engine while performing very well.
- Database: RethinkDB. RethinkDB seems to be superior in many ways to MongoDB, and while it's not quite a standard in the node.js world, it may well be one day.
- Task Runner: Gulp. Gulp will automate all tasks during production and development.
- Client-side Package Manager: Bower. Bower is like a client-side npm, in many ways.
- Test Runner: Karma. We will use Jasmine in conjunction with Karma.
- Administration & Authentication: Passport.
- Utilities: Lo-Dash.
- CSS Preprocessor: Sass.
Suggested
- Module Loader: RequireJS or Browserify. Kind of a similar thing to Grunt and Gulp, in that RequireJS is the more mature of the two, but Browserify is a new take on the idea. Browserify uses the node.js
require()
function to include modules, which is definitely an interesting take.
- Monkey Testing Application: Gremlins.js. Very useful for quality assurance.
Other Considerations