A Yeoman generator for generating awesome module or app boilerplates! MEAN-stack (all parts optional) with scalability in mind and with Grunt and Bower sweetness..
The Klei generator is built with scalability in mind. Which means that it doesn't have one file per object type (think AngularJS directives e.g) and neither one directory per object type, which is really common but not particularly good in the long run.
Instead the Klei generator advocates (and creates, particularly the subgenerators) one directory per module. Here's a great read on scalable code organization with AngularJS.
The goal with the Klei generator is to create a great, easy to use and maintainable project structure and development environment for web development with full stack Javascript.
$ npm install -g yo
$ npm install -g generator-klei
This is only needed if "Client APP" or "Stylesheets" are to be chosen in the generator.
$ npm install -g bower
$ yo klei
$ grunt serve
Don't forget that your mongodb server should already be running! (if you chose MongoDB in the generator)
The generator doesn't yet generate a fully production ready configuration following all best practices, but at least you must do the following steps:
Build everything and run the static resource server (a connect
server) with:
$ grunt serve:dist
First build everything for distribution:
$ grunt dist
Then run the server:
$ NODE_ENV=production node src/index.js
N.B. You should be using something like Forever or similar to keep the server up and running.
The Klei Generator asks you what type of module you want to build, then you pick the parts you want from:
- REST API's - using Express.js
- MongoDB - using Mongoose
- Client - using AngularJS
- Stylesheets - using Stylus
- A scalable directory structure (Todo list example included)
- Not one directory per object type, which doesn't scale well, but instead one per REST mount point (backend) and one per view (frontend)
- A fully configured Gruntfile with livereload, serverreload, linting, concatenation, minification, testing etc.
- Automounting of API routes using exctrl
- No more editing of your html layout when adding scripts and stylesheets to your project, thanks to grunt-injector
- This includes Bower installed components (which have a main section in their bower.json)
- Both frontend and backend unit testing with Mocha and Chai!
- Frontend tests is run with Karma
- All necessary files are injected automatically into your
karma.conf.js
with the grunt-injector
- Subgenerators to easy add new API's, etc. (see Subgenerator section below)
- and more.. There's even more to come!
Try it out!
Usage:
$ yo klei:api "<you new api name here>"
Or just:
$ yo klei:api
And follow the guide.
The name you give to your new API will be camelized and used as: ./src/api/<newApiNameHere>/<newApiNameHere>.controller.js
which in turn will be mounted at the url: /api/<newApiNameHere>
.
The generator will ask if you want to create a new Mongoose model as well.
Please feel free to contribute and help with building the best boilerplate for a great developer experience! I gladly accept pull requests!