Node.js module generator/boilerplate with Babel, Jest, Flow, Documentation and more
NodeJS module generator/boilerplate.
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.
$ 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
$ npm release
$ npm publish
It’ll automatically run test
, lint
, docs
, build
, generate CHANGELOG.md
, and push commits and tags to the remote repository.
Remove .flowconfig
file.
Remove flow
from package.json
:
"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",
}
Remove flow
from .babelrc
:
"presets": [
- "@babel/preset-flow"
]
Remove flow
from .eslintrc
:
"extends": [
- "plugin:flowtype/recommended",
- "prettier/flowtype"
],
"plugins": [
- "flowtype",
- "flowtype-errors"
],
"rules": {
- "flowtype-errors/show-errors": "error"
}
Run yarn
.
Remove documentation
from package.json
:
"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",
}
Run yarn
.
Install dependencies:
yarn add -D @babel/preset-typescript @types/jest @typescript-eslint/eslint-plugin @typescript-eslint/parser typescript
Update package.json
:
+ "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"
]
}
Create tsconfig.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
}
}
Update .babelrc
:
"presets": [
+ "@babel/preset-typescript"
]
Update .eslintrc
with these settings:
"settings": {
"import/resolver": {
"node": {
"extensions": [".js", ".jsx", ".ts", ".tsx"]
}
}
},
"overrides": [
{
"files": ["**/*.ts", "**/*.tsx"],
"parser": "@typescript-eslint/parser",
"parserOptions": {
"project": "./tsconfig.json"
},
"plugins": [
"@typescript-eslint"
],
"rules": {
"no-undef": "off",
"no-unused-vars": "off",
"no-restricted-globals": "off"
}
}
]
This function says hello.
name
string Some name to say hello for. (optional, default "Haz"
)Returns string The hello.
MIT © Diego Haz