如何让新式的 ESLint 配置与预提交一起使用?

How to get new-style ESLint config working with pre-commit?

提问人:JK Laiho 提问时间:10/8/2023 最后编辑:JK Laiho 更新时间:10/8/2023 访问量:119

问:

我有一个项目,除其他外,还具有官方 ESLint 钩子。它在使用旧式配置时可以完美运行,但用新式配置替换它会导致它失败。.pre-commit-config.yaml.eslintrc.jsoneslint.config.js

钩子配置如下所示:

  - repo: https://github.com/pre-commit/mirrors-eslint
    rev: v8.51.0
    hooks:
    - id: eslint
      types: [javascript]
      additional_dependencies: [
        '[email protected]',
        '[email protected]',
        '@eslint/js',
        '[email protected]'
      ]

运行 ,ESLint 本身和列出的依赖项似乎安装没有错误(没有创建)。我没有全局安装 ESLint。pre-commit install-hooks~/.cache/pre-commit/pre-commit.log

这是一切工作的旧式配置:.eslintc.json

{
    "env": {
      "es2022": true,
      "browser": true
    },
    "extends": [
      "eslint:recommended",
      "prettier"
    ],
    "ignorePatterns": [
      "project/static/htmx/**"
    ],
    "parserOptions": {
      "sourceType": "module"
    },
    "rules": {}
}

但是,使用这个方法会失败,尽管与 ESLint 文档中的新样式配置示例相比,它似乎完全有效:eslint.config.js

import globals from "globals";
import js from "@eslint/js";
import eslintConfigPrettier from "eslint-config-prettier";

export default [
  js.configs.recommended,
  eslintConfigPrettier,
  {
    languageOptions: {
      globals: {
        ...globals.browser,
      },
      sourceType: "module",
      ecmaVersion: 2022,
    },
  },
  {
    ignores: ["project/static/htmx/**"],
  },
];

这是运行时的错误:pre-commit run --all-files

eslint...................................................................Failed
- hook id: eslint
- exit code: 2

Oops! Something went wrong! :(

ESLint: 8.51.0

Error [ERR_MODULE_NOT_FOUND]: Cannot find package 'globals' imported from /Users/jkl/Development/foobar/eslint.config.js
Did you mean to import globals/index.js?
    at new NodeError (node:internal/errors:406:5)
    at packageResolve (node:internal/modules/esm/resolve:789:9)
    at moduleResolve (node:internal/modules/esm/resolve:838:20)
    at defaultResolve (node:internal/modules/esm/resolve:1043:11)
    at ModuleLoader.defaultResolve (node:internal/modules/esm/loader:383:12)
    at ModuleLoader.resolve (node:internal/modules/esm/loader:352:25)
    at ModuleLoader.getModuleJob (node:internal/modules/esm/loader:228:38)
    at ModuleWrap.<anonymous> (node:internal/modules/esm/module_job:85:39)
    at link (node:internal/modules/esm/module_job:84:36)

ERR_MODULE_NOT_FOUND如果我将它们移动到第一行,则其他两个导入同样会提高,所以这不是问题。globals

尽管我为这三个导入安装了所有必要的依赖项以以记录的方式工作,但找不到它们。所以有些东西不对劲,而且钩子与旧式配置一起工作得很好,根本没有改变,这让我认为要么 a) 我错过了一些关键的配置,要么 b) ESLint 钩子只是出于某种原因不支持新式配置,或者 c) ESLint 本身与新配置和预提交安装方式的组合存在某种不兼容。eslint.config.js.pre-commit-config.yaml

我不是日常生活中的NodeJS用户,也不熟悉提交前的内部工作原理。我很乐意进一步调试并发布更多信息来帮助解决这个问题,并就下一步要寻找的内容提供一些帮助。

node.js eslint pre-commit-hook pre-commit.com

评论


答: 暂无答案