Yevhen Klymentiev
dark
light
console
darkness
y.klymentiev@gmail.com
Reusable Snippets|Practical utility code for everyday use — custom-built and ready to share

BE Node.js (JS)

This guide provides a step-by-step setup for a modern Node.js backend project using JavaScript, including ESLint, Prettier, Husky, Jest, commit hooks, and semantic-release.

1. Install core dev dependencies

File
Copied!
1npm install -D \
2  eslint prettier \
3  eslint-config-prettier eslint-plugin-prettier \
4  eslint-plugin-node \
5  jest supertest @types/jest \
6  husky lint-staged \
7  @commitlint/config-conventional @commitlint/cli \
8  semantic-release @semantic-release/changelog @semantic-release/git \
9  @semantic-release/github @semantic-release/commit-analyzer \
10  @semantic-release/release-notes-generator

2. Create .eslintrc.js

JavaScript
Copied!
1module.exports = {
2  env: {
3    node: true,
4    es2021: true,
5    jest: true,
6  },
7  extends: [
8    'eslint:recommended',
9    'plugin:node/recommended',
10    'plugin:prettier/recommended'
11  ],
12  parserOptions: {
13    ecmaVersion: 'latest',
14    sourceType: 'module',
15  },
16  rules: {
17    'prettier/prettier': 'error',
18    'node/no-unsupported-features/es-syntax': 'off',
19  },
20};

3. Create .prettierrc

JSON
Copied!
1{
2  "singleQuote": true,
3  "trailingComma": "all",
4  "printWidth": 100,
5  "tabWidth": 2,
6  "semi": true
7}

4. Add Husky + lint-staged

Add to package.json:

JSON
Copied!
1{
2  "scripts": {
3    "prepare": "husky install"
4  },
5  "lint-staged": {
6    "*.js": ["eslint --fix", "prettier --write"],
7    "*.json": ["prettier --write"]
8  }
9}

Enable hooks:

File
Copied!
1npx husky install
2npx husky add .husky/pre-commit "npx lint-staged"
3npx husky add .husky/commit-msg "npx --no -- commitlint --edit \"$1\""

5. Create jest.config.js

JavaScript
Copied!
1module.exports = {
2  testEnvironment: 'node',
3  testMatch: ['**/tests/**/*.test.js'],
4};

6. Create release.config.js

JavaScript
Copied!
1module.exports = {
2  branches: ['main'],
3  plugins: [
4    '@semantic-release/commit-analyzer',
5    '@semantic-release/release-notes-generator',
6    ['@semantic-release/changelog', {
7      changelogFile: 'CHANGELOG.md'
8    }],
9    ['@semantic-release/git', {
10      assets: ['CHANGELOG.md', 'package.json'],
11      message: 'chore(release): ${nextRelease.version} [skip ci]\n\n${nextRelease.notes}'
12    }],
13    '@semantic-release/github'
14  ]
15};

7. Add common npm scripts to package.json

JSON
Copied!
1{
2  "scripts": {
3    "start": "node src/index.js",
4    "dev": "nodemon src/index.js",
5    "lint": "eslint .",
6    "format": "prettier --write .",
7    "test": "jest",
8    "test:watch": "jest --watch",
9    "release": "semantic-release"
10  }
11}
Codebase: Dev Env Setup -> BE Node.js (JS) | Yevhen Klymentiev