generator-mnm
generator-mnm copied to clipboard
Yeoman generator to create node modules using npm scripts as the build system

Create node modules writing ES6/ES7 today compiled with Babel, tested with ava, bundled with rollup and linted with standard on top of npm scripts
Install
$ npm install -g yo generator-mnm
Usage
Usage:
yo mnm:app [options] [<name>]
Options:
-h, --help # Print the generator's options and usage
--skip-cache # Do not remember prompt answers Default: false
--skip-install # Do not automatically install dependencies Default: false
-a, --all # Ask all questions Default: false
-y, --yes # Skip some questions, like $ npm init -y Default: false
Arguments:
name # module name
If provided the module will be created inside ./<name>/
otherwise it will be created in the current directory
Examples:
$ yo mnm
$ yo mnm myAwesomeModule
Type: String Required: false
Example
$ yo mnm -y
create package.json
create README.md
create .gitignore
create src/index.js
create test/index.js
create .travis.yml
create .babelrc
create rollup.config.js
Features
- Made out of many other generators, the main generator only creates a
package.json
file and a minimal.gitignore
file - Composable, since the logic to create the README, cli and other files is on their own subgenerator
- Babel transpiles the code/tests
- standard to lint the code
- ava for testing
- yargs to parse cli arguments (optional)
- rollup to create a common js compatible bundle
- npm scripts as the build system
Example
Check https://github.com/maurizzzio/generator-mnm-example
List of npm scripts included
Common tasks
task | description |
---|---|
npm test |
ava |
npm run build |
rollup --config |
npm run lint |
standard |
npm run clean |
Removes all the files inside dist/ |
Watching files
task | description |
---|---|
npm run test:watch |
Same as npm test but with --watch |
npm run build:watch |
Same as npm run build but with --watch |
Pre/Post hooks
Task | description |
---|---|
npm run prebuild |
Run before build , npm clean -s && npm lint -s |
npm run preversion |
Run before version , npm run build |
Useful npm commands that you should know
-
npm version major|minor|patch
bumps the package version -
npm run
lists all available scripts
Why?
This project is heavily inspired by this article by Keith Cirkel where he describes that the existing build system tools attempt to solve the problems that exist among them "covering up the inadequacies of the other tools while also surfacing their own".
James Halliday who is the creator of many awesome packages like browserify
and tape
also wrote an article where he points out that the command npm run
is "perfectly adequate for everything while maintaining a very tiny configuration footprint."
Articles to read:
- Why we should stop using grunt
- How to use npm as a build tool
- Task automation with run
- Choose grunt, gulp or npm
Inspiration projects
- https://github.com/yeoman/generator-node
- https://github.com/vinniegarcia/ES6-module-starter
- https://github.com/sindresorhus/generator-nm
- https://github.com/bucaran/generator-rise
- https://github.com/iamstarkov/generator-zen
- https://github.com/keithamus/npm-scripts-example 's awesome
package.json
file
I'd like to thank iamstarkov for his awesome work on generators that are actually composable
Composability
Just plug in any of the subgenerators or the app
generator itself on your generator
Generators used in this project
- generator-babel
- generator-git-init
- generator-license
- generator-mnm/generators/src
- generator-mnm/generators/test
- generator-mnm/generators/cli
- generator-mnm/generators/readme
Workflow
# equivalent to npm init -y
yo mnm -y
# see https://www.npmjs.com/package/ghrepo
ghrepo -m "initial commit"
# see https://www.npmjs.com/package/travisjs
travisjs hook # or travis enable with the travis gem
# if a cli is needed
yo mnm:cli
Development
-
npm test
-
npm test:ci
run the tests (open./test/ci/.tmp
to see a generated)
License
2015-2016 MIT © Mauricio Poppe