<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Evgeny Prikhodko</title>
    <description>The latest articles on DEV Community by Evgeny Prikhodko (@eprikhodko).</description>
    <link>https://dev.to/eprikhodko</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F618934%2F823fcc27-67ab-46cc-b0ea-e51c12c17976.jpg</url>
      <title>DEV Community: Evgeny Prikhodko</title>
      <link>https://dev.to/eprikhodko</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/eprikhodko"/>
    <language>en</language>
    <item>
      <title>Как настроить ESLint и Prettier в VS Code и Create React App и подключить Airbnb стайлгайд</title>
      <dc:creator>Evgeny Prikhodko</dc:creator>
      <pubDate>Mon, 27 Sep 2021 11:08:09 +0000</pubDate>
      <link>https://dev.to/eprikhodko/eslint-prettier-vs-code-create-react-app-airbnb-52bc</link>
      <guid>https://dev.to/eprikhodko/eslint-prettier-vs-code-create-react-app-airbnb-52bc</guid>
      <description>&lt;h2&gt;
  
  
  Настраиваем автоматическое форматирование кода и проверку на ошибки при помощи Prettier и ESLint согласно стайлгайду Airbnb.
&lt;/h2&gt;




&lt;p&gt;Во время работы над последним проектом я опробовал в деле два прекрасных иструмента, ESLint и Prettier. Захотелось написать о том, что это такое, чем полезен линтер и prettier, как их настроить, и как использовать. &lt;/p&gt;




&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Что такое Lint?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ESLint в Create React App и расширение для VS Code&lt;/li&gt;
&lt;li&gt;Настройка ESLint&lt;/li&gt;
&lt;li&gt;
Установка и подключение дополнительных плагинов ESLint

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;eslint-plugin-react&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;eslint-plugin-react-hooks&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;eslint-plugin-jsx-a11y&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;eslint-plugin-import&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;&lt;strong&gt;Prettier&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Установка Prettier в проект&lt;/li&gt;
&lt;li&gt;Отключаем конфликтующие с Prettier правила ESLint&lt;/li&gt;
&lt;li&gt;Интеграция Prettier в VS Code&lt;/li&gt;
&lt;li&gt;.prettierrc.json и .prettierignore&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;Установка правил Airbnb для ESLint&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;

&lt;/ul&gt;




&lt;h2&gt;
  
  
  Что такое Lint? &lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Lint, или линтер - это инструмент для поиска ошибок в коде. Пример работы линтера в проекте Create React App, ниже:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkj6rmlw1xf1lsvepfih2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkj6rmlw1xf1lsvepfih2.png" alt="линтер нашел ошибки в коде"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Клавиатура моего ноутбука иногда срабатывает неправильно, и делает двойное нажатие клавиши, вместо однократного. В 8 и в 25 строке опечатка, вместо logo - &lt;strong&gt;logoo&lt;/strong&gt; а вместо App - &lt;strong&gt;Appp&lt;/strong&gt;&lt;br&gt;
Линтер нашел эти ошибки и сообщил о них в терминал. Прекрасно! &lt;/p&gt;

&lt;p&gt;Теперь можно их исправить, и все заработает как надо:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqlsh0xoyam9tjaly9t24.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqlsh0xoyam9tjaly9t24.png" alt="ошибки исправлены"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  ESLint в Create React App и расширение для VS Code &lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;В Create React App линтер уже установлен, он называется &lt;a href="https://eslint.org/" rel="noopener noreferrer"&gt;ESLint&lt;/a&gt;. Именно его сообщения об ошибках мы видим в терминале. &lt;/p&gt;

&lt;p&gt;Существует так же &lt;a href="https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint" rel="noopener noreferrer"&gt;ESLint расширение&lt;/a&gt; для VS Code:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl8smne7tgrw4g69kw83p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl8smne7tgrw4g69kw83p.png" alt="ESLint расширение для VS Code"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Установив это расширение в VS Code, получим сообщения ESLint и подсветку ошибок в редакторе кода:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr0joz542nln9mszwq98g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr0joz542nln9mszwq98g.png" alt="Сообщения об ошибках в коде, которые можно посмотреть прямо в VS Code, а не в терминале, при помощи плагина ESLint для VS Code"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Настройка ESLint &lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;У ESLint есть конфиг, в котором находятся правила, согласно которым он выполняет проверку кода. Как я говорил ранее, ESLint уже встроен в Create React App, и использует конфиг который называется &lt;a href="https://github.com/facebook/create-react-app/tree/v4.0.3/packages/eslint-config-react-app" rel="noopener noreferrer"&gt;&lt;strong&gt;eslint-config-react-app&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;В Create React App этот конфиг подключается к ESLint в package.json, 22 строка:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faki3gffzmooiaf01dq2b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faki3gffzmooiaf01dq2b.png" alt="package.json"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Eslint сейчас настроен так, как решили создатели CRA. Давайте инициализируем ESLint и заново сами все настроим, так, как нам необходимо. Для этого выполним команду:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="go"&gt;

&lt;/span&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;npx eslint &lt;span class="nt"&gt;--init&lt;/span&gt;
&lt;span class="go"&gt;

&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Запустится мастер настройки ESLint. &lt;br&gt;
Пройдем настройку согласно предложенным вариантам:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjvs4z3qateny232lrqp4.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjvs4z3qateny232lrqp4.gif" alt="мастер настройки ESLint"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;В конце мастер создаст файл настроек линтера, &lt;strong&gt;.eslintrc.json&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fame48tsp2yddcrst75hp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fame48tsp2yddcrst75hp.png" alt="файл .eslintrc.json"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;На этом базовая настройка линтера закончена, теперь было бы неплохо расширить его конфигурацию и подключить несколько дополнительных плагинов с правилами.&lt;/p&gt;




&lt;h2&gt;
  
  
  Установка и подключение дополнительных плагинов ESLint &lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;установим &lt;a href="https://github.com/yannickcr/eslint-plugin-react" rel="noopener noreferrer"&gt;&lt;strong&gt;правила ESLint для React&lt;/strong&gt;&lt;/a&gt;: &lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="go"&gt;

&lt;/span&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;npm &lt;span class="nb"&gt;install &lt;/span&gt;eslint-plugin-react &lt;span class="nt"&gt;--save-dev&lt;/span&gt;
&lt;span class="go"&gt;

&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Если вы используете версию React старше 17, и не импортируете React from 'react' можно после установки этого плагина, добавить в конфиг .eslintrc.json строку "plugin:react/jsx-runtime", тогда ESLint не будет ругаться, что &lt;em&gt;'React' must be in scope when using JSX&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;В этом случае конфиг будет выглядеть так:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvd75epl70mpmgi2kfn5q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvd75epl70mpmgi2kfn5q.png" alt="Добавили "&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;Установим правила для поддержки хуков React, &lt;a href="https://github.com/facebook/react/tree/main/packages/eslint-plugin-react-hooks" rel="noopener noreferrer"&gt;&lt;strong&gt;eslint-plugin-react-hooks&lt;/strong&gt;&lt;/a&gt;: &lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="go"&gt;

&lt;/span&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;npm &lt;span class="nb"&gt;install &lt;/span&gt;eslint-plugin-react-hooks &lt;span class="nt"&gt;--save-dev&lt;/span&gt;
&lt;span class="go"&gt;

&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;подключим их, добавив строку "plugin:react-hooks/recommended" в .eslintrc.json:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fplo7x44zpbx2z0kv9sgq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fplo7x44zpbx2z0kv9sgq.png" alt="добавили "&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;Установим правила доступности для людей с ограниченными возможностями &lt;a href="https://github.com/jsx-eslint/eslint-plugin-jsx-a11y" rel="noopener noreferrer"&gt;&lt;strong&gt;eslint-plugin-jsx-a11y&lt;/strong&gt;&lt;/a&gt; &lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="go"&gt;

&lt;/span&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;npm &lt;span class="nb"&gt;install &lt;/span&gt;eslint-plugin-jsx-a11y &lt;span class="nt"&gt;--save-dev&lt;/span&gt;
&lt;span class="go"&gt;

&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;добавляем "plugin:jsx-a11y/recommended" в .eslintrc.json:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb2xfd7ltea50wlenxeqd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb2xfd7ltea50wlenxeqd.png" alt="добавили "&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;установим правила, которые будут отвечать за синтаксис импортов и экспортов &lt;a href="https://github.com/import-js/eslint-plugin-import" rel="noopener noreferrer"&gt;&lt;strong&gt;eslint-plugin-import&lt;/strong&gt;&lt;/a&gt; &lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="go"&gt;

&lt;/span&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;npm &lt;span class="nb"&gt;install &lt;/span&gt;eslint-plugin-import &lt;span class="nt"&gt;--save-dev&lt;/span&gt;
&lt;span class="go"&gt;

&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;добавим "plugin:import/recommended" в .eslintrc.json:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffdvfh6vhp57f1e8v075i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffdvfh6vhp57f1e8v075i.png" alt="добавили "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;С ESLint мы пока что закончили, переходим к Prettier&lt;/p&gt;




&lt;h2&gt;
  
  
  Prettier &lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Prettier. Что это такое и зачем вообще нужно? &lt;/p&gt;

&lt;p&gt;&lt;a href="https://prettier.io/" rel="noopener noreferrer"&gt;Prettier&lt;/a&gt; - это инструмент для автоматического форматирования кода.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Форматирование кода - это процесс придания коду определенного вида.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Prettier берет код, который вы ему дали, и преобразует этот код к единому стилю. &lt;/p&gt;

&lt;p&gt;Вот простой пример:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fewmgijy8frr129gk1ddi.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fewmgijy8frr129gk1ddi.gif" alt="Prettier форматирует код"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Здесь у нас стандартный файл App.js из Create React App проекта, у которого я где то убрал, а где то добавил отступы и точки с запятыми в конце строк, в некоторых местах использовал длинные, плохо читаемые строки. &lt;/p&gt;

&lt;p&gt;Prettier автоматически исправил мой код при сохранении файла, добавил нужные отступы, точки с запятыми, а длинные линии кода разбил на более короткие и лучше читаемые блоки. Теперь все выглядит лучше и опрятнее.&lt;/p&gt;




&lt;h2&gt;
  
  
  Установка Prettier в проект &lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Установка хорошо описана в &lt;a href="https://prettier.io/docs/en/install.html" rel="noopener noreferrer"&gt;официальной документации&lt;/a&gt;, пройдем ее вместе, по шагам.&lt;/p&gt;

&lt;p&gt;Первым делом устанавливаем Prettier в наш Create React App проект, локально:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="go"&gt;

&lt;/span&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--save-dev&lt;/span&gt; &lt;span class="nt"&gt;--save-exact&lt;/span&gt; prettier
&lt;span class="go"&gt;

&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Создаем пустой конфигурационный файл, .prettierrc.json в корне проекта:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="go"&gt;

&lt;/span&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="o"&gt;{}&amp;gt;&lt;/span&gt; .prettierrc.json
&lt;span class="go"&gt;

&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1h3znm3bwlpklix2mk3j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1h3znm3bwlpklix2mk3j.png" alt=".prettierrc.json конфиг"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Отключаем конфликтующие правила ESLint &lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Теперь нужно сделать так, чтобы Prettier не конфликтовал с линтером. Дело в том, что когда ESLint ищет ошибки в коде, он руководствуется определенными правилами, которые хранятся в его конфиге. Эти правила отвечают как за качество кода, так и за &lt;em&gt;стиль&lt;/em&gt; кода. Так вот, у Prettier есть свои собственные правила, которые &lt;strong&gt;тоже отвечают за стиль кода&lt;/strong&gt;. Чтобы у линтера и Prettier не было конфликтов по части &lt;em&gt;оформления&lt;/em&gt; кода, нужно отключить кофликтующие правила у линтера, чтобы за стиль кода отвечал только Prettier. &lt;br&gt;
Сделать это можно очень просто, установив &lt;a href="https://github.com/prettier/eslint-config-prettier" rel="noopener noreferrer"&gt;&lt;strong&gt;eslint-config-prettier&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;ставим:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="go"&gt;

&lt;/span&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--save-dev&lt;/span&gt; eslint-config-prettier
&lt;span class="go"&gt;

&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Далее открываем конфиг нашего линтера, (файл .eslintrc.json), и добавляем "prettier" в конец массива:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs9847lj6i48839m8w2ox.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs9847lj6i48839m8w2ox.png" alt="добавляем "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Cтрока "prettier" в конфиге .eslintrc.json отключает конфликтующие с Prettier правила ESLint. &lt;br&gt;
Теперь Prettier и линтер будут корректно работать вместе.  &lt;/p&gt;

&lt;p&gt;Мы установили Prettier в наш проект. Давайте теперь добавим поддержку Prettier в VS Code.&lt;/p&gt;




&lt;h2&gt;
  
  
  Интеграция Prettier в VS Code &lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Установим &lt;a href="https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode" rel="noopener noreferrer"&gt;расширение Prettier&lt;/a&gt; для VS Code:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F829s15ql7pn9li2e6i07.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F829s15ql7pn9li2e6i07.png" alt="Расширение Prettier для VS Code"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;После того как мы установили расширение Prettier в VS Code, можно сделать так, чтобы Prettier автоматически форматировал наш код, когда мы сохраняем файл. Для этого нужно добавить два значения в JSON конфиг VS Code, (файл settings.json). &lt;/p&gt;

&lt;p&gt;Чтобы открыть settings.json нужно, находясь в VS Code, нажать Ctrl + Shift + P, ввести в поиск "settings" и выбрать пункт Open Settings (JSON). Откроется файл settings.json. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frhrbouy1bxy4nh13e95l.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frhrbouy1bxy4nh13e95l.gif" alt="редактируем конфиг settings.json"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Добавим в него следующие строки:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.formatOnSave": true


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Первая строка устанавливает Prettier как инструмент форматирования кода по-умолчанию. &lt;br&gt;
Вторая строка включает форматирование кода при сохранении файла.&lt;/p&gt;




&lt;h2&gt;
  
  
  .prettierrc.json и .prettierignore &lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Пара слов об этих двух файлах. &lt;/p&gt;

&lt;p&gt;Для чего нужен .prettierrc.json? &lt;/p&gt;

&lt;p&gt;.prettierrc.json - это &lt;a href="https://prettier.io/docs/en/configuration.html" rel="noopener noreferrer"&gt;файл конфигурации Prettier&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Перечислю базовые настройки, которые в него можно добавить:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

{
  "trailingComma": "es5",
  "tabWidth": 4,
  "semi": false,
  "singleQuote": true
}


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;"trailingComma"&lt;/strong&gt; - отвечает за висящие, (или "последние") запятые. Можно разрешить Prettier ставить их там, где это возможно, или отключить эту функцию&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"tabWidth"&lt;/strong&gt; - ширина отступа, в пробелах&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"semi"&lt;/strong&gt; - отвечает за добавление точек с запятыми в конце инструкций. Можно добавлять, можно не добавлять &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"singleQuote"&lt;/strong&gt; - отвечает за использование одинарных или двойные кавычек&lt;/p&gt;




&lt;p&gt;Мой конфиг .prettierrc.json сейчас выглядит так:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn78gfp89eb84io8bi5e5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn78gfp89eb84io8bi5e5.png" alt="файл .prettierrc.json"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;В нем я запретил использование точек с запятыми в конце строк. Такое вот личное предпочтение, при работе над персональными проектами.&lt;/p&gt;




&lt;p&gt;В итоге, когда мы сохраняем файл, Prettier будет удалять точки с запятыми в конце строк, если они были, и менять одинарные кавычки на двойные. (замена кавычек на двойные производится по умолчанию, этим поведением можно управлять при помощи параметра &lt;strong&gt;"singleQuote"&lt;/strong&gt;)&lt;/p&gt;

&lt;p&gt;вот как это выглядит:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2yovw53jcs3jx0ru04bx.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2yovw53jcs3jx0ru04bx.gif" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Сохранили файл - произошло форматирование кода.&lt;/p&gt;




&lt;h3&gt;
  
  
  .prettierignore
&lt;/h3&gt;

&lt;p&gt;Файл .prettierignore существует для того, чтобы запретить Prettier форматировать определенные файлы. Какие файлы запретить форматировать, решаете вы. Я добавил туда файл .eslintrc.json, потому что не хочу, чтобы Prettier его трогал:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuffohlwh3ji7l54dsg8c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuffohlwh3ji7l54dsg8c.png" alt="файл .prettierignore"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Установка правил Airbnb для ESLint &lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Теперь, когда мы настроили ESLint и Prettier в нашем проекте, давайте установим популярный конфиг &lt;a href="https://github.com/airbnb/javascript/tree/master/packages/eslint-config-airbnb" rel="noopener noreferrer"&gt;eslint-config-airbnb&lt;/a&gt;, который настроен с учетом &lt;a href="https://airbnb.io/javascript/react/" rel="noopener noreferrer"&gt;стайлгайда по JavaScript от Airbnb&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;для этого выполним команду:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="go"&gt;

&lt;/span&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--save-dev&lt;/span&gt; eslint-config-airbnb
&lt;span class="go"&gt;

&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;и добавим "airbnb" в .eslintrc.json.&lt;br&gt;
Финальный конфиг ESLint с учетом правил Airbnb будет выглядеть вот так:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbqouy681nt7sn1hm5gcd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbqouy681nt7sn1hm5gcd.png" alt="финальный вариант конфига .esnlintrc.json"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Чтобы ESLint не ругался на то, что у нас JSX присутствует в файлах с расширением '.js', можно добавить правило &lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

"react/jsx-filename-extension": [1, { "extensions": [".js", ".jsx"] }]


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;в .eslintrc.json, тогда ошибки &lt;em&gt;JSX not allowed in files with extension '.js'&lt;/em&gt; не будет:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpypss46npdep358ssoqw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpypss46npdep358ssoqw.png" alt="добавили правило "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Установка и настройка ESLint и Prettier закончена!&lt;/p&gt;




&lt;p&gt;Что мы сделали:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;разобрались с тем, что такое линтер&lt;/li&gt;
&lt;li&gt;установили и настроили ESLint в Create React App проект&lt;/li&gt;
&lt;li&gt;установили ESLint в VS Code&lt;/li&gt;
&lt;li&gt;узнали, что такое Prettier&lt;/li&gt;
&lt;li&gt;установили и настроили Prettier в нашем проекте&lt;/li&gt;
&lt;li&gt;установили расширение Prettier в VS Code и настроили форматирование кода при сохранении файла&lt;/li&gt;
&lt;li&gt;установили в линтер популярные правила написания JavaScript кода от Airbnb&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Увидимся в новых постах!&lt;/p&gt;

</description>
      <category>eslint</category>
      <category>prettier</category>
      <category>vscode</category>
      <category>createreactapp</category>
    </item>
  </channel>
</rss>
