nod

NodeJS module generator/boilerplate.

Features

Babel - Write next generation JavaScript today.

- Write next generation JavaScript today. Jest - JavaScript testing framework used by Facebook.

- JavaScript testing framework used by Facebook. ESLint - Make sure you are writing a quality code.

- Make sure you are writing a quality code. Prettier - Enforces a consistent style by parsing your code and re-printing it.

- Enforces a consistent style by parsing your code and re-printing it. Flow - A static type checker for JavaScript used heavily within Facebook.

- A static type checker for JavaScript used heavily within Facebook. Travis CI - Automate tests and linting for every push or pull request.

- Automate tests and linting for every push or pull request. Documentation - A documentation system so good, you’ll actually write documentation.

- A documentation system so good, you’ll actually write documentation. Conventional Changelog - Generate a changelog from git metadata.

Install

The easiest way to use nod is through the Yeoman Generator.

$ npm install -g yo generator-nod $ yo nod

If you don’t want to use the generator, you can also download or git clone this repo

$ git clone https://github.com/diegohaz/nod my-module $ cd my-module $ rm -rf .git $ npm install # or yarn

Just make sure to edit package.json , README.md and LICENSE files accordingly with your module’s info.

Commands

$ npm test # run tests with Jest $ npm run coverage # run tests with coverage and open it on browser $ npm run lint # lint code $ npm run docs # generate docs $ npm run build # generate docs and transpile code

Publish

$ npm version patch|minor|major $ npm publish

It’ll automatically run test , lint , docs , build , generate CHANGELOG.md , and push commits and tags to the remote repository.

Removing stuff

Flow 1. Remove `.flowconfig` file. 2. Remove `flow` from `package.json`: ```diff "scripts": { - "flow": "flow check", - "flowbuild": "flow-copy-source src dist", - "prebuild": "npm run docs && npm run clean && npm run flowbuild", + "prebuild": "npm run docs && npm run clean", }, "devDependencies": { - "@babel/preset-flow": "^7.0.0", - "eslint-plugin-flowtype": "^2.50.0", - "eslint-plugin-flowtype-errors": "^3.5.1", - "flow-bin": "^0.81.0", - "flow-copy-source": "^2.0.2", } ``` 3. Remove `flow` from `.babelrc`: ```diff "presets": [ - "@babel/preset-flow" ] ``` 4. Remove `flow` from `.eslintrc`: ```diff "extends": [ - "plugin:flowtype/recommended", - "prettier/flowtype" ], "plugins": [ - "flowtype", - "flowtype-errors" ], "rules": { - "flowtype-errors/show-errors": "error" } ``` 5. Run `yarn`.

Documentation 1. Remove `documentation` from `package.json`: ```diff "scripts": { - "docs": "documentation readme src --section=API", - "postdocs": "git add README.md", - "prebuild": "npm run docs && npm run clean", + "prebuild": "npm run clean", }, "devDependencies": { - "documentation": "^8.0.0", } ``` 2. Run `yarn`.

Adding stuff

TypeScript 1. Install dependencies: ```sh yarn add -D @babel/preset-typescript @types/jest eslint-import-resolver-typescript eslint-plugin-typescript typescript typescript-eslint-parser ``` 2. Update `package.json`: ```diff + "types": "dist/ts/src", "scripts": { + "type-check": "tsc --noEmit", - "lint": "eslint .", + "lint": "eslint . --ext js,ts,tsx", - "build": "babel src -d dist", + "build": "tsc --emitDeclarationOnly && babel src -d dist -x .js,.ts,.tsx", }, "lint-staged": { - "*.js": [ + "*.{js,ts,tsx}": [ - "eslint --fix", + "eslint --fix --ext js,ts,tsx", "git add" ] } ``` 3. Create `tsconfig.json` ```json { "compilerOptions": { "outDir": "dist/ts", "target": "esnext", "module": "esnext", "moduleResolution": "node", "jsx": "react", "strict": true, "declaration": true, "noFallthroughCasesInSwitch": true, "noImplicitReturns": true, "noUnusedLocals": true, "noUnusedParameters": true, "stripInternal": true } } ``` 4. Update `.babelrc`: ```diff "presets": [ + "@babel/preset-typescript" ] ``` 5. Update `.eslintrc` with these settings: ```json "settings": { "import/resolver": { "node": true, "eslint-import-resolver-typescript": true } }, "overrides": [ { "files": ["**/*.ts", "**/*.tsx"], "parser": "typescript-eslint-parser", "plugins": [ "typescript" ], "rules": { "no-undef": "off", "no-unused-vars": "off", "no-restricted-globals": "off" } } ] ``` 6. Create `jest.config.js`: ```js module.exports = { moduleFileExtensions: ["js", "jsx", "ts", "tsx"], testMatch: ["**/?(*.)+(spec|test).(j|t)s?(x)"], transform: { "\\.(j|t)sx?$": "babel-jest" } }; ``` 7. Run `yarn`.

License

MIT © Diego Haz