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
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
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
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
:
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:
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
Copied!
1module.exports = {
2 testEnvironment: 'node',
3 testMatch: ['**/tests/**/*.test.js'],
4};
6. Create release.config.js
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
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}