ESLint 如何集成到 Create React App 中?

IT技术 javascript reactjs visual-studio-code create-react-app eslint
2021-04-12 16:53:37

当我运行时npx create-react-app ...,正在为我创建一个简单的 React 项目。然后当我查看 时package.json,似乎有一些 ESLint 存在的证据,因为有这样的:

"eslintConfig": {
  "extends": "react-app"
},

然而,每当我将 ESLint 作为开发依赖项安装并配置它时——就像我通常所做的那样——,VS Code 似乎会选择它。在这种情况下,VS Code 似乎没有意识到存在/配置了任何类型的 linter。这并不奇怪,因为 ESLint 不是我刚刚生成的 React 项目的依赖项——至少不是根据package.json. 当我尝试eslint .在项目的根目录中运行时,它显示“找不到命令”。

我试图通过扩展它来为这个 ESLint 配置注入活力,所以现在我有了:

"eslintConfig": {
  "extends": ["react-app", "eslint:recommended", "google"],
  "rules": {
    "semi": ["error", "always"],
    "quotes": ["error", "double"]
   }
},

这没有任何改变。我以一种我知道它违反上述配置的方式操作源代码,但是,我没有收到任何不法行为的信号。

这让我想到一个简单的问题: 生成的项目是否create-react-app带有某种 ESLint 配置,如果是,我该如何正确启用和扩展它?

当我提到在搜索“create react app eslint”时出现的排名第一的谷歌点击- 我显然已经阅读过 - 让我澄清我的意思:

ESLint 显然是以一种不同的方式集成到 Create React App 中,而不是像这样手动将其添加到项目中这不仅可以从大量发布他们让两者合作的努力的人中看出。这也很明显,因为...

  • ...不能eslint在项目根目录中运行该命令。
  • ...ESLint 似乎不是package.json.
  • ...VS Code 没有发现存在 ESLint。
  • ....eslintrc.*项目根目录中没有文件。
  • ...等等。

那么:我如何在 Create React App 的上下文中使用 ESLint?对于初学者:我如何运行它?我如何扩展它?为什么 VS Code 没有发现它——即使它通常会注意到 ESLint 的存在?

3个回答

是的,create-react-app带有eslint配置。

如何正确启用和扩展它?

您可以在此处查看如何扩展它

{
  "eslintConfig": {
    "extends": ["react-app", "shared-config"],
    "rules": {
      "additional-rule": "warn"
    },
    "overrides": [
      {
        "files": ["**/*.ts?(x)"],
        "rules": {
          "additional-typescript-only-rule": "warn"
        }
      }
    ]
  }
}

我如何启用它?

您需要将它与您的 IDE 集成

我如何运行它?

集成后,eslint 服务器将在后台运行,并将为您的 IDE 启用 linting(有时需要重新启动 IDE)。


我在运行后检查了您的所有声明npx create-react-app example

...不能在项目根目录中运行 eslint 命令。

你可以:

在此处输入图片说明

eslint 作为项目依赖项的一部分安装,仅通过全局运行 eslint ( eslint [cmd]) 您需要确保它全局安装(不推荐)。

...ESLint 似乎不是 package.json 中的依赖项。

为什么应该这样?这就是您使用像 CRA 这样的启动器的原因。这是一种内在的依赖,你不必担心,这是 CRA 的工作。

...VS Code 没有发现存在 ESLint。

确实如此,请检查OUTPUT选项卡并查找ESLint以查看服务器的输出。

在此处输入图片说明

...项目根目录中没有 .eslintrc.* 文件。

您从 CRA 获得默认配置(它对您隐藏以专注于编码)。如果您想覆盖它,请添加此类文件(您也可以扩展它,请查看文档)。


了解 eslint 究竟是什么以及我们如何使用它进行 React 开发非常有用,请查看相关问题“React hooks 真的必须从“使用”开始吗?.

可悲的是,你写的东西都没有帮助我的情况。我没有yarn,所以我仍然无法运行eslint,并且按照您所说的方式创建了几个新项目后,在 VS Code 中打开这些项目仍然会导致一个空的“输出”控制台。不过,谢谢你的努力。
2021-05-23 16:53:37
我认为您很难将其与 vscode 集成,为什么要投票?
2021-05-30 16:53:37
如果您在 vscode 中以 DEBUG 模式打开控制台,您可以检查eslint选项卡查看它的日志(修复错误后,您将启用 linting)
2021-06-06 16:53:37
需要通过以下方式将其与扩展和设置集成 settings.json
2021-06-11 16:53:37
无论我添加了什么eslintConfig,我都无法更改内置规则。你真的能做到吗?
2021-06-17 16:53:37

要扩展顶部评论的答案:

...ESLint 似乎不是 package.json 中的依赖项。

为什么应该这样?这就是您使用像 CRA 这样的启动器的原因。这是一种内在的依赖,你不必担心,这是 CRA 的工作。

使用 create-react-app 创建的项目将react-scripts作为依赖项。

react-scriptseslint作为依赖项安装,如react-scripts package.json 所示

您可以通过npm ls <package>在项目根目录中运行来查看是否安装了包(以及安装在何处)

npm ls eslint 显示:

└─┬ react-scripts@4.0.3
  └── eslint@7.21.0 

这显示了我们通过在 GitHub 中的 react-scripts 中手动调查的依赖关系树。

所以 - 一个用 create-react-app 制作的项目确实带有 eslint。因为它是一个依赖项,而不是全局安装的东西,所以它必须使用 npm 脚本运行。

这就是为什么eslint .在您的终端中运行不起作用,但使用

    "lint": "eslint .",

然后呢npm run lint(尽管您可能会eslint --ignore-path .gitignore .因为当前的错误发出命令)。

类似地,eslint 配置安装在 中react-scripts,然后在默认项目输出的自己的package.json.

你的问题很有道理。我发现这有效:

  • 在 VS Code 中使用“npx eslint”(显示所有选项)或“npx eslint”运行 ESLint。
  • 将脚本添加到 package.json "lint": "eslint ." 然后使用'npm run lint'

我没有将 ESLint 集成到 VS Code 的问题。为 ESLint 安装 VS Code 扩展后,我会自动在问题下看到 VS Code 中的警告/错误。