Skip to main content

MERN

The MERN configuration includes a set of recommended ESLint rules optimized for MongoDB, Express, React, and Node.js stack projects. These rules enforce consistent naming conventions, clean coding practices, and overall maintainability for MERN projects.

MERN Rules Overview

Rule DescriptionLegacy ConfigurationFlat ConfigurationSeverity
Enforce kebab-case for filenames@mindfiredigital/hub/file-kebabcasehub/file-kebabcaseerror
Enforce camelCase for variables@mindfiredigital/hub/vars-camelcasehub/vars-camelcaseerror
Enforce PascalCase for class names@mindfiredigital/hub/class-pascalcasehub/class-pascalcaseerror
Enforce camelCase for function names@mindfiredigital/hub/function-camelcasehub/function-camelcaseerror
Enforce descriptive function names@mindfiredigital/hub/function-descriptivehub/function-descriptivewarn
Enforce React component names to match their filenames@mindfiredigital/hub/react-component-name-match-filenamehub/react-component-name-match-filenameerror
Enforce PascalCase for React component filenames@mindfiredigital/hub/react-filename-pascalcasehub/react-filename-pascalcaseerror

These rules promote consistency, readability, and maintainability in your codebase, specifically for projects using the MERN stack.

Example: Extending the MERN Config

To apply the recommended MERN ESLint rules in your project, extend the MERN config preset from the ESLint Plugin Hub in your ESLint configuration file.

For eslint.config.mjs:

import hub from '@mindfiredigital/eslint-plugin-hub';
import globals from 'globals';

export default [
// Extends the mern config preset from the plugin
hub.configs['flat/mern'],
{
languageOptions: {
globals: globals.builtin,
parserOptions: {
ecmaVersion: 2022,
sourceType: 'module',
ecmaFeatures: {
jsx: true,
},
},
},
// Add any additional rules or overrides here
},
];

For .eslintrc.cjs:

module.exports = {
env: {
browser: true,
es2024: true,
},
extends: ['plugin:@mindfiredigital/hub/mern'],
parserOptions: {
ecmaVersion: 'latest',
sourceType: 'module',
},
rules: {
'@mindfiredigital/hub/file-kebabcase': 'error',
'@mindfiredigital/hub/function-camelcase': 'error',
'@mindfiredigital/hub/vars-camelcase': 'error',
},
};

For .eslintrc.json:

{
"env": {
"es2024": true
},
"parserOptions": {
"ecmaVersion": "latest",
"sourceType": "module",
"ecmaFeatures": {
"jsx": true
}
},
"extends": ["plugin:@mindfiredigital/hub/mern"],
"rules": {
"@mindfiredigital/hub/file-kebabcase": "error",
"@mindfiredigital/hub/function-camelcase": "error",
"@mindfiredigital/hub/vars-camelcase": "error"
}
}

Rule Details

hub/file-kebabcase

This rule enforces kebab-case for filenames across your MERN project. For example, a file should be named my-component.js rather than myComponent.js.

  • Default Level: error
  • Rationale: Kebab-case for filenames improves readability, especially in large codebases.
"hub/file-kebabcase": "error"

hub/vars-camelcase

This rule enforces camelCase for variable names in your code. It prevents the use of snake_case or PascalCase for variable names.

  • Default Level: error
  • Rationale: camelCase is the standard naming convention for JavaScript variables and enhances code consistency.
"hub/vars-camelcase": "error"

hub/class-pascalcase

This rule enforces PascalCase for class names, such as MyClass, which is widely accepted as a JavaScript best practice.

  • Default Level: error
  • Rationale: PascalCase is the standard for class names in JavaScript, aiding in the readability and organization of code.
"hub/class-pascalcase": "error"

hub/function-camelcase

This rule enforces camelCase for function names, which is in line with JavaScript best practices. For instance, function names like myFunction should be used instead of my_function.

  • Default Level: error
  • Rationale: camelCase for function names is standard in JavaScript and ensures consistency.
"hub/function-camelcase": "error"

hub/function-descriptive

This rule encourages descriptive function names. It will warn you if a function name is too vague or generic.

  • Default Level: warn
  • Rationale: Using descriptive function names makes the code more understandable and easier to maintain.
"hub/function-descriptive": "warn"

hub/react-component-name-match-filename

This rule ensures that the name of a React component matches its filename. For example, if the component is MyComponent, the filename should be MyComponent.js.

  • Default Level: error
  • Rationale: Keeping component names and filenames consistent helps avoid confusion and improves project maintainability.
"hub/react-component-name-match-filename": "error"

hub/react-filename-pascalcase

This rule enforces PascalCase for React component filenames, such as MyComponent.js. This follows the standard practice of naming React components.

  • Default Level: error
  • Rationale: PascalCase for React component filenames is a widely accepted convention, helping to differentiate component files from non-component files.
"hub/react-filename-pascalcase": "error"

Conclusion

The recommended MERN ESLint rules from the ESLint Plugin Hub help ensure that your MERN stack project follows best practices for naming conventions and code organization. By extending the MERN configuration, you automatically enforce these rules and can customize them as needed for your specific project.