Razzle: Как ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ eslint с Typescript?

Π‘ΠΎΠ·Π΄Π°Π½Π½Ρ‹ΠΉ Π½Π° 12 нояб. 2019  Β·  11ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ  Β·  Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: jaredpalmer/razzle

Π― Π΄ΠΎΠ±Π°Π²ΠΈΠ» ΠΏΠ»Π°Π³ΠΈΠ½ razzle-eslint ΠΈ Π²ΠΊΠ»ΡŽΡ‡ΠΈΠ» Π΅Π³ΠΎ Π² свой razzle.config.js, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€

plugins: ['scss', 'eslint']

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ консоль Π½Π΅ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ ΠΎ ворсинах для Ρ„Π°ΠΉΠ»ΠΎΠ² машинописного тСкста. Если я Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ запустил eslint с консоли, я ΠΌΠΎΠ³ Π±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ошибки lint, Π½ΠΎ Π½Π΅ ΠΏΡ€ΠΈ запускС razzle start

ΠŸΡ€ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ΅ источника razzle-eslint-plugin я ΡƒΠ²ΠΈΠ΄Π΅Π», Ρ‡Ρ‚ΠΎ Π² ΠΏΡ€Π°Π²ΠΈΠ»Π°Ρ… ΡƒΠΏΠΎΠΌΠΈΠ½Π°ΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ„Π°ΠΉΠ»Ρ‹ js ΠΈ jsx, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅.

 config.module.rules = [
    {
      test: /\.(js|jsx|mjs)$/,
      enforce: 'pre',
      loader: require.resolve('eslint-loader'),
      options: mainEslintOptions,
      exclude: /node_modules/,
    },
    ...config.module.rules,
  ]

Если я добавлю ts|tsx Π² ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΡƒΡŽ Π²Ρ‹ΡˆΠ΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ, я смогу сразу ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ прСдупрСТдСния. Но это Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Ρ€ΡƒΡ‡Π½ΠΎΠ³ΠΎ рСдактирования Ρ„Π°ΠΉΠ»Π° unde node_modules Ρ‡Π΅Π³ΠΎ я Π±Ρ‹ Ρ…ΠΎΡ‚Π΅Π» ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ. Π•ΡΡ‚ΡŒ Π»ΠΈ способ Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ ΠΈΠ· razzle.config.js? Π― попытался ΠΏΡ€ΠΎΡ‚ΠΎΠ»ΠΊΠ½ΡƒΡ‚ΡŒ Π½ΠΎΠ²ΠΎΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ Ρ‡Π΅Ρ€Π΅Π· module.rules.push Π½ΠΎ это ΠΏΡ€ΠΈΠ²Π΅Π»ΠΎ ΠΊ ошибкС These relative modules were not found:

Если это Π½ΡƒΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊ razzle-eslint-plugin я ΠΌΠΎΠ³Ρƒ ΠΏΠΎΠ΄Π½ΡΡ‚ΡŒ PR. ΠŸΠΎΠΆΠ°Π»ΡƒΠΉΡΡ‚Π°, ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΡ‚Π΅

Π‘Π°ΠΌΡ‹ΠΉ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Tslint устарСл для ESLint Π³Π΄Π΅-Ρ‚ΠΎ Π² 2019 Π³ΠΎΠ΄Ρƒ, ΠΈ сСйчас ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ сСрСдина ноября, поэтому razzle, вСроятно, Π΄ΠΎΠ»ΠΆΠ΅Π½ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΏΠ»Π°Π½ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° Π½Π° ESLint.

ВсС 11 ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π― установил Π² своСм Ρ„Π°ΠΉΠ»Π΅ razzle.config.js ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ настройки:

'use strict'

module.exports = {
  plugins: [
    {
      name: 'typescript',
      options: {
        useBabel: true,
        useEslint: true,
        forkTsChecker: {
          tsconfig: './tsconfig.json',
          tslint: undefined,
          watch: './src',
          typeCheck: true
        }
      }
    }
  ]
}

Π° Π·Π°Ρ‚Π΅ΠΌ .eslintrc.json ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ

{
  "extends": [
    "eslint:recommended",
    "prettier",
    "plugin:jsx-a11y/recommended",
    "plugin:@typescript-eslint/recommended",
    "plugin:react/recommended"
  ],
  "plugins": ["@typescript-eslint"],
  "parser": "@typescript-eslint/parser",
  "parserOptions": {
    "ecmaVersion": 6,
    "sourceType": "module",
    "ecmaFeatures": {
      "modules": true,
      "jsx": true
    }
  },
  "env": {
    "browser": true,
    "node": true,
    "jest": true
  },
  "settings": {
    "react": {
      "version": "detect"
    },
    "import/resolver": {
      "node": {
        "extensions": [".js", ".jsx", ".ts", ".tsx"]
      }
    }
  }
}

Π° Π·Π°Ρ‚Π΅ΠΌ Π² ΠΌΠΎΠ΅ΠΌ package.json ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ строка для выполнСния Π»ΠΈΠ½Ρ‚ΠΈΠ½Π³Π°:

"lint": "eslint --ext 'js,jsx,ts,tsx' .",

@andersnylund Бпасибо Π·Π° ваш Π²ΠΊΠ»Π°Π΄. Π‘ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΉ Π²Ρ‹ΡˆΠ΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠ΅ΠΉ я ΠΌΠΎΠ³Ρƒ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ ошибки машинописного тСкста Π² консоли. Но всС ΠΆΠ΅ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ eslint. Π― ΠΌΠΎΠ³ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ ΠΎ Π»ΠΈΠ½Ρ‚Π°Ρ…, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ² npm run lint . Π‘Ρ‹Π»ΠΎ Π±Ρ‹ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ Π»ΡƒΡ‡ΡˆΠ΅, Ссли Π±Ρ‹ я ΠΌΠΎΠ³ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ прСдупрСТдСния прямо Π² консоли, ΠΊΠ°ΠΊ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ… cra.

Π­Ρ‚ΠΎ ΠΌΠΎΠΉ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΊΠΎΠ½Ρ„ΠΈΠ³.

const path = require('path')
module.exports = {
  plugins: ['scss', 'eslint'],
  modify(defaultConfig, { target, dev }, webpack) {
    const config = defaultConfig
    config.resolve.extensions.push('.ts', '.tsx')
    config.module.rules.push({
      test: /\.(ts|js)x?$/,
      exclude: /node_modules/,
      loader: 'babel-loader',
    })

    if (target === 'node' && !dev) {
      config.entry = path.resolve(__dirname, './src/server.tsx')
      config.output.filename = 'server.bundle.js'
      config.output.path = path.resolve(__dirname, './build')
      config.output.libraryTarget = 'commonjs2'
    }
    return config
  }
}

Tslint устарСл для ESLint Π³Π΄Π΅-Ρ‚ΠΎ Π² 2019 Π³ΠΎΠ΄Ρƒ, ΠΈ сСйчас ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ сСрСдина ноября, поэтому razzle, вСроятно, Π΄ΠΎΠ»ΠΆΠ΅Π½ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΏΠ»Π°Π½ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° Π½Π° ESLint.

НаконСц, ΠΌΠ½Π΅ ΡƒΠ΄Π°Π»ΠΎΡΡŒ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ ошибки Typescript, Ρ‚Π°ΠΊ ΠΈ прСдупрСТдСния ESLint Π½Π° консоли, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ Π½ΠΈΠΆΠ΅.

const ForkTSCheckerWebpackPlugin = require('fork-ts-checker-webpack-plugin')
const path = require('path')

module.exports = {
  modify(defaultConfig, { target, dev }, webpack) {
    const config = defaultConfig
    config.resolve.extensions.push('.ts', '.tsx')
    config.plugins.push(
        new ForkTSCheckerWebpackPlugin({
          checkSyntacticErrors: true,
          eslint: true,
        }))
    config.module.rules.push({
      test: /\.(ts|js)x?$/,
      include: [path.resolve(__dirname, 'src')],
      loader: 'babel-loader',
    })
 }
}

И Ρƒ мСня Π΅ΡΡ‚ΡŒ Ρ„Π°ΠΉΠ» .eslintrc Π² ΠΊΠΎΡ€Π½Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° с парсСром машинописного тСкста

@ fifn2 @ aswin-s ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΠ»Π°Π³ΠΈΠ½ Fork TS Checker Webpack, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ razzle-plugin-typescript, устарСл (v0.4.1) ΠΈ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ eslint. Π― создал PR для обновлСния ΠΏΠ»Π°Π³ΠΈΠ½Π° Π² # 1174

Π“ΠΎΡ‚ΠΎΠ² Π»ΠΈ этот PR ΠΊ использованию?

@Image10255 это Π½Π΅ ΠΏΠΈΠ°Ρ€, Π½ΠΎ Ρƒ нас Π΅ΡΡ‚ΡŒ ΠΏΠ»Π°Π½Ρ‹ Π½Π° этот

Ρ‡Π΅Ρ€Π΅Π· ΠΏΠ°Ρ€Ρƒ нСдСль ΠΌΡ‹ выпустим Π½ΠΎΠ²ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ razzle-plugin-eslint с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ машинописного тСкста

@ nimaa77 Бпасибо, я сСйчас ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΡƒΡŽ ΠΌΠ°ΡˆΠΈΠ½ΠΎΠΏΠΈΡΠ½Ρ‹ΠΉ тСкст, Π΅ΡΡ‚ΡŒ Π»ΠΈ способ сначала Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ?

@ nimaa77 ΠΊΠ°ΠΊΠΎΠ΅-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅? ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΏΠΎΠΌΠΎΡ‡ΡŒ?

Π­Ρ‚ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. Π£ нас Π΅ΡΡ‚ΡŒ обсуТдСния Π½Π° github. ΠŸΠΎΠΆΠ°Π»ΡƒΠΉΡΡ‚Π°, пСрСмСститС это Ρ‚ΡƒΠ΄Π° :) Π’Π°ΠΊΠΆΠ΅ Π½ΠΎΠ²Ρ‹ΠΉ ΠΏΠ»Π°Π³ΠΈΠ½ typescript Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ eslint.

Π‘Ρ‹Π»Π° Π»ΠΈ эта страница ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ?
0 / 5 - 0 Ρ€Π΅ΠΉΡ‚ΠΈΠ½Π³ΠΈ

Π‘ΠΌΠ΅ΠΆΠ½Ρ‹Π΅ вопросы

charlie632 picture charlie632  Β·  4ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ

knipferrc picture knipferrc  Β·  5ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ

howardya picture howardya  Β·  5ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ

dizzyn picture dizzyn  Β·  3ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ

pseudo-su picture pseudo-su  Β·  3ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ