Последние две недели я пытался применить eslintlinting к моему проекту Node. Я нашел слишком много предложений. Большинство из них ссылаются на использование пользовательских eslint пакетов, таких как airbnb , google , standard и многих других пользовательских пакетов linting, и прикрепляют их с помощью красивого средства форматирования.

Я последовал этим предложениям, чтобы применить eslint к моему проекту узла, используя некоторые из этих пакетов.

Как только я применил их к своему проекту, они вызвали слишком много проблем eslint в моем коде, определенно, это нормально, и именно поэтому я хотел применить eslint к своему коду, чтобы повысить равенство моего кода 👌

Настоящая проблема заключалась в том, что он показывает эти проблемы, не объясняя их настоящуюпричину , он просто говорит это короткое сообщение "красивее/красивее" с непонятными предложениями по исправить решение этих проблем.

Наверняка есть какие-то настройки для решения некоторых из них, но поиск каждой проблемы займет много времени 😔

Честно говоря, я НЕ предпочитаю быть дураком в своих проектах. Я предпочитаю понимать, что происходит, и если возникнут проблемы с проектом, я буду хотя бы частично знать, как их исправить.

Долгая история! 🙂 Я просто хотел объяснить, почему я предпочитаю использовать чистые eslint правила, а не дополнительные пакеты и зависимости. 😎

Пора начинать

Установить Эслинт

> npm install eslint --save-dev
            or
> yarn add eslint --dev

Добавить Эслинта

Давайте сгенерируем наш файл .eslintrc.json!

Откройте свой терминал в корневой папке проекта и нажмите эту команду:

> npx eslint --init
          or
> yarn run eslint --init

Эта команда предлагает несколько вариантов, выберите следующие параметры:

  1. To check syntax and find problems
  2. Модули JavaScript › commonjs
  3. Использует ли ваш проект TypeScript Нет/Да В моем случае я не использую TypeScript › No
  4. Где работает код? › Node
  5. Какой формат файла конфигурации? › JSON
  6. Хотите установить их сейчас с помощью npm? › Yes

После завершения этих параметров продвижения будет создан файл eslintrc.json со следующей конфигурацией:

{
  "env": {
    "browser": true,
    "commonjs": true,
    "es2021": true
  },
  "extends": "eslint:recommended",
  "parserOptions": {
    "ecmaVersion": 12
  },
  "rules": {}
}

Мы добавим в этот файл дополнительные правила eslint. Таким образом, вы можете переопределить все содержимое этого файла следующим образом:

{
  "env": {
    "node": true,
    "commonjs": true,
    "es2021": true,
    "jest": true
  },
  "extends": "eslint:recommended",
  "parserOptions": {
    "ecmaVersion": 12
  },
  "rules": {
    "no-console": "warn",
    //* Avoid Bugs
    "no-undef": "error",
    "semi": "error",
    "semi-spacing": "error",
    //* Best Practices
    "eqeqeq": "warn",
    "no-invalid-this": "error",
    "no-return-assign": "error",
    "no-unused-expressions": ["error", { "allowTernary": true }],
    "no-useless-concat": "error",
    "no-useless-return": "error",
    "no-constant-condition": "warn",
    "no-unused-vars": ["warn", { "argsIgnorePattern": "req|res|next|__" }],
    //* Enhance Readability
    "indent": ["error", 2, { "SwitchCase": 1 }],
    "no-mixed-spaces-and-tabs": "warn",
    "space-before-blocks": "error",
    "space-in-parens": "error",
    "space-infix-ops": "error",
    "space-unary-ops": "error",
    "quotes": ["error", "single"],
    //
    "max-len": ["error", { "code": 200 }],
    "max-lines": ["error", { "max": 500 }],
    "keyword-spacing": "error",
    "multiline-ternary": ["error", "never"],
    "no-mixed-operators": "error",
    //
    "no-multiple-empty-lines": ["error", { "max": 2, "maxEOF": 1 }],
    "no-whitespace-before-property": "error",
    "nonblock-statement-body-position": "error",
    "object-property-newline": [
      "error",
      { "allowAllPropertiesOnSameLine": true }
    ],
    //* ES6
    "arrow-spacing": "error",
    "no-confusing-arrow": "error",
    "no-duplicate-imports": "error",
    "no-var": "error",
    "object-shorthand": "off",
    "prefer-const": "error",
    "prefer-template": "warn"
  }
}

Какого хрена ты только что добавил? 🤷‍♀️

Успокойся, приятель!!!

мы только что добавили "jest": true к env на тот случай, если вы захотите применить модульное тестирование с помощью jest к вашему проекту узла. В секцию rules также были добавлены дополнительные правила.

Ааа, вот и все!

Дополнительные примечания

Почему такие определенные правила?!

Честно говоря, есть много других правил, которые вы можете добавить, но этих правил вполне достаточно, чтобы улучшить читабельность вашего кода и помочь вам избежать ошибок. Достаточно честно!! 🙂

Включить/выключить правило 💡

Каждое правило eslint имеет три возможных значения: off , warn , error . Таким образом, вы можете добавить правило и присвоить ему одно из этих трех значений. Также вы можете изменить значение любого из правил в предыдущем файле .eslintrc.json.

Например, одно из правил, которые у нас есть, это "semi": "error". Мы можем изменить это правило, чтобы отображалось предупреждение только в том случае, если вы забудете добавить точку с запятой ;, заменив значение error на warn, или вы даже можете отключить это правило, используя значение off .

Поиск описания правила 🔍

Вы можете найти описание правила, просто зайдите на eslint.org и найдите его. Вы увидите, для чего предназначено это правило, как оно работает в деталях и какие возможные значения оно может принимать.

Применить автоматическое исправление с помощью параметра --fix

Если вы только что добавили eslint в существующий проект, скорее всего, обнаружится много проблем с eslint, которые уже есть в вашем коде. Будет довольно сложно пройтись по всем файлам вашего проекта и исправить эти eslint вручную.

К счастью, есть замечательная команда, которую вы можете запустить, чтобы решить эти проблемы автоматически. Нажмите эту команду на своем терминале:

./node_modules/.bin/eslint --fix

Надеюсь, это решит большинство проблем.

И еще одно: вы можете изменитьлюбое из предыдущих ПРАВИЛ, чтобы они соответствовали вашим потребностям.

Надеюсь, теперь вы понимаете, как добавить eslint в проекты узлов :)

Все предыдущие правила размещены в этом репозитории, и любые другие правила, которые я найду, могут улучшить мой код узла, который я добавлю в этот репозиторий.

Счастливого Эслинта 🎉🎉✨