ギャツビーとの付き合い


この記事はもともとmariokandut.comに掲載された.
私はあなたのために素晴らしいニュースを持っています.エストスのセットアップを内蔵したギャツビーの船.Gatsby docsによれば、提供されたeslint configはそのユーザーの大部分に適しています.
では、なぜカスタマイズ?例えば、「標準的な」ESINTセットアップのカスタマイズのいくつかの理由があるかもしれません.
  • プロジェクト要件
  • の会社要件
  • 内部のテスト
  • 個人的な好み、その他
  • あなたがリンギングについてもっと知りたいならば、エスリントが正しい選択であるならば、What is Lintingにこの記事を見てください.

    エスコートをカスタマイズする方法
    私は、あなたがそうであるので、あなたは追加のプリセット、プラグインと規則を加えることができるように、Eslint Config Gatsbyでカスタマイズから始めます.
    Gatsbyスターターまたはgithubによって提供されるeslintの下で見てください.
    module.exports = {
      extends: [
        require.resolve(`eslint-config-react-app`),
      ],
      plugins: [`graphql`],
      rules: {
        // New versions of react use a special jsx runtime that remove the requirement
        // for having react in scope for jsx. Once the jsx runtime is backported to all
        // versions of react we can make this always be `off`.
        // I would also assume that eslint-config-react-app will switch their flag to `off`
        // when jsx runtime is stable in all common versions of React.
        'react/react-in-jsx-scope': usingJsxRuntime
          ? `off`
          : `error`, // Conditionally apply for reactRuntime?
        'import/no-webpack-loader-syntax': [0],
        'graphql/template-strings': [
          `error`,
          {
            env: `relay`,
            schemaString: printSchema(schema, {
              commentDescriptions: true,
            }),
            tagName: `graphql`,
          },
        ],
        'react/jsx-pascal-case': `off`, // Prevents errors with Theme-UI and Styled component
        // https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/tree/master/docs/rules
        'jsx-a11y/accessible-emoji': `warn`,
        'jsx-a11y/alt-text': `warn`,
        'jsx-a11y/anchor-has-content': `warn`,
        'jsx-a11y/anchor-is-valid': `warn`,
        'jsx-a11y/aria-activedescendant-has-tabindex': `warn`,
        'jsx-a11y/aria-props': `warn`,
        'jsx-a11y/aria-proptypes': `warn`,
        'jsx-a11y/aria-role': `warn`,
        'jsx-a11y/aria-unsupported-elements': `warn`,
        // TODO: It looks like the `autocomplete-valid` rule hasn't been published yet
        // "jsx-a11y/autocomplete-valid": [
        // "warn",
        // {
        // inputComponents: [],
        // },
        // ],
        'jsx-a11y/click-events-have-key-events': `warn`,
        'jsx-a11y/control-has-associated-label': [
          `warn`,
          {
            ignoreElements: [
              `audio`,
              `canvas`,
              `embed`,
              `input`,
              `textarea`,
              `tr`,
              `video`,
            ],
            ignoreRoles: [
              `grid`,
              `listbox`,
              `menu`,
              `menubar`,
              `radiogroup`,
              `row`,
              `tablist`,
              `toolbar`,
              `tree`,
              `treegrid`,
            ],
            includeRoles: [`alert`, `dialog`],
          },
        ],
        'jsx-a11y/heading-has-content': `warn`,
        'jsx-a11y/html-has-lang': `warn`,
        'jsx-a11y/iframe-has-title': `warn`,
        'jsx-a11y/img-redundant-alt': `warn`,
        'jsx-a11y/interactive-supports-focus': [
          `warn`,
          {
            tabbable: [
              `button`,
              `checkbox`,
              `link`,
              `progressbar`,
              `searchbox`,
              `slider`,
              `spinbutton`,
              `switch`,
              `textbox`,
            ],
          },
        ],
        //"jsx-a11y/label-has-for": `warn`, was deprecated and replaced with jsx-a11y/has-associated-control in v6.1.0
        'jsx-a11y/label-has-associated-control': `warn`,
        'jsx-a11y/lang': `warn`,
        'jsx-a11y/media-has-caption': `warn`,
        'jsx-a11y/mouse-events-have-key-events': `warn`,
        'jsx-a11y/no-access-key': `warn`,
        'jsx-a11y/no-autofocus': `warn`,
        'jsx-a11y/no-distracting-elements': `warn`,
        'jsx-a11y/no-interactive-element-to-noninteractive-role': `warn`,
        'jsx-a11y/no-noninteractive-element-interactions': [
          `warn`,
          {
            body: [`onError`, `onLoad`],
            iframe: [`onError`, `onLoad`],
            img: [`onError`, `onLoad`],
          },
        ],
        'jsx-a11y/no-noninteractive-element-to-interactive-role': `warn`,
        'jsx-a11y/no-noninteractive-tabindex': `warn`,
        'jsx-a11y/no-onchange': `warn`,
        'jsx-a11y/no-redundant-roles': `warn`,
        'jsx-a11y/no-static-element-interactions': `warn`,
        'jsx-a11y/role-has-required-aria-props': `warn`,
        'jsx-a11y/role-supports-aria-props': `warn`,
        'jsx-a11y/scope': `warn`,
        'jsx-a11y/tabindex-no-positive': `warn`,
      },
    };
    
    まず必要なeslint依存性が必要です.
    npm install --save-dev eslint-config-react-app
    
    次に、エディタ/IDEを介してファイル242479142を作成します.
    module.exports = {
      globals: {
        __PATH_PREFIX__ : true,
      },
      extends: `react-app`,
    };
    
    それです.今、あなたはすべての追加のプリセット、プラグインを追加する準備ができて、あなたのプロジェクトが必要と規則.

    eslintファイルのためのgatsby詳細を覚えておいてください
  • no .eslintrc.js : gatsbyはデフォルトでeslintローダを追加します.これはeslintからすべてのフィードバックを端末/ブラウザコンソールにパイプします.
  • touch .eslintrc.js Yes 242479142 :カスタムESLint fileファイルを追加すると、Gatsbyはeslintの設定を完全に制御できます.これはまた、組み込みのESLINTローダをオーバーライドし、デフォルトのルールはロードされません.
    カスタマイズ
    現在いくつかのオプションがあります.
  • 現在、ESLint-fileにあなたのプロジェクト特有の規則をコピーしてください.
  • あなたがゼロから始めて、あなた自身の結線規則を適用するならば、私はGatsbyから規則をコピーして、その点から修正することを勧めます.
  • 別のオプションは、eslintをゼロから設定することです.エスリントからのドキュメントは、Configuring ESLintのための大きなユーザーガイドを持っています.
  • Gatsby Eslintをカスタマイズする一つの方法は、コミュニティプラグインgatsby-plugin-eslintを使用することです.

  • プラグインの使用
    私はこのプラグインをお勧めします.
  • Gatsbyプラグインをインストールします.
  • plugin pageのインストール:.eslintrc
  • を作成します.プロジェクトのルートにあるファイル.
  • プラグインを.eslintrcに追加しました.
  • module.exports = {
      plugins: ['gatsby-plugin-eslint'],
    };
    
  • プラグインのオプションを使用して規則を指定します.
  • github
    プラグインのオプション
    デフォルトのオプションは次のとおりです.
  • リント.ジェイ.JSXファイル.
  • は、ライティングからnpm install --save-dev gatsby-plugin-eslintnpm install --save-dev eslint eslint-loader、およびgatsby-config.jsフォルダを除外します.
  • 開発段階での開発における唯一のライン.
  • オプションのESLintオプション.
  • インラインファイル形式、除外、およびeslintローダオプションをカスタマイズします.
    {
          resolve: 'gatsby-plugin-eslint',
          options: {
            test: /\.js$|\.jsx$/,
            exclude: /(node_modules|.cache|public)/,
            stages: ['develop'],
            options: {
              emitWarning: true,
              failOnError: false
            }
          }
        }
    
    Lintingを始める簡単な方法はこれらの2つのリンギングプラグインです.
    eslint-loader
    プラグインプラグイン
    ESLILTのための反応特異的な結実規則
  • をインストールします
  • node_modules.cacheファイルの更新
    {
      "parser": "babel-eslint",
      "rules": {
        "strict": 0
      },
      "extends": [
        "eslint:recommended",
        "plugin:react/recommended"
      ]
    }
    
    ESLint-Loader
    Airbnbのeslint設定
    このパッケージは、Airbnbから拡張可能な共有設定としてeslint config publicを提供します.
  • は、 をインストールします
  • npm install --save-dev babel-eslint eslint-plugin-import eslint-plugin-react
  • 追加または更新.eslintrc :
  • {
      "extends": "airbnb"
    }
    
    eslint-plugin-react
    エスリントを無効にする
    ちょうどこのブログ記事で.eslintrcであるために、私はこれを推薦しません、しかし、あなたが本当に無効にしたいならば、あなたはそれをすることができます.ただnpm install --save-dev eslint-config-airbnb eslint-plugin-import eslint-plugin-jsx-a11y eslint-plugin-reactファイルを作成してください、そして、それは.eslintrcを無効にします、そして、それはすべての輸入されたlint規則でそれをします.
    読んでいただきありがとうございます、ご質問がある場合は、コメント機能を使用するか、私にメッセージを送ってください.
    参考文献(そして、大きい感謝): eslint-config-airbnb