Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

@feature-driven/eslint-config

📓 Lint feature-driven rules by standard eslint plugins

eslint, eslintconfig, eslint-config, feature-driven, feature-based, fdd, ddd

readme

@feature-driven/eslint-config

npm npm npm bundle size Hits GitHub Workflow Status GitHub commit activity

Linting of Feature Driven Architecture principles by standard eslint-plugins

But unfortunately, while it can't allow you

Also, strictness level limited by plugins API

More power - in our @feature-driven/eslint-plugin

Overview

See included rules

This config help you

<summary>to restrict imports (not private paths, only public API)</summary>
// Fail
import { Issues } from "pages/issues";
import { IssueDetails } from "features/issue-details"
import { Button } from "shared/components/button";

// Pass
import Routing from "pages"; // specific pages shouldn't be reexported
import { IssueDetails } from "features" // all features should be reexported, for usage
import { Button } from "shared/components"; // all components should be reexported, for usage
<summary>to order imports (app > pages > features > shared > models)</summary>
// Fail
import { Helper } from "./helpers";
import axios from "axios";
import { data } from "../fixtures";
import { Button } from "shared/components"
import { IssueDetails, RepoList } from "features"
import { debounce } from "shared/helpers"

// Pass
import axios from "axios"; // 1) external libs
import { IssueDetails, RepoList } from "features" // 2) features
import { Button } from "shared/components" // 3) shared/**
import { debounce } from "shared/helpers"
import { data } from "../fixtures"; // 4) parent
import { Helper } from "./helpers"; // 5) sibling
<summary>to use only absolute imports (relative - only for module internal using)</summary>

NOTE: Be sure, that your tsconfig allows you to use absolute imports

  • baseUrl: "./src" `ts // Fail import Routing from "../../pages" import { IssueDetails } from "../features"; import { Button } from "../shared/components";

// Pass import Routing from "pages" import { IssueDetails } from "features"; import { Button } from "shared/components";


</details>

## Get started

1. You'll first need to install [ESLint](http://eslint.org) (with default plugins):
    ```sh
    $ npm install --save-dev eslint
  1. Next, install @feature-driven/eslint-config:

     $ npm install --save-dev @feature-driven/eslint-config
  2. Add config to the extends section of your eslint configuration file. You can omit the eslint-plugin suffix:

     {
         "extends": ["@feature-driven"]
     }

Further, you can override / disable some rules if needed.

Also

  • You want to participate in the development of the project? Have a look at our contributing guide!

    Commit like nobody sees, Push like nobody hears

  • FAQ