开发者问题收集

gulp-eslint 环境键“es2021”未知

2020-12-27
10561

我有一个具有以下依赖项的项目;

  "dependencies": {
    "express": "^4.17.1"
  },
  "devDependencies": {
    "browser-sync": "^2.26.13",
    "del": "^6.0.0",
    "eslint": "^7.16.0",
    "eslint-config-standard": "^16.0.2",
    "eslint-plugin-import": "^2.22.1",
    "eslint-plugin-node": "^11.1.0",
    "eslint-plugin-promise": "^4.2.1",
    "gulp": "^4.0.2",
    "gulp-cssmin": "^0.2.0",
    "gulp-eslint": "^6.0.0",
    "gulp-htmllint": "0.0.19",
    "gulp-htmlmin": "^5.0.1",
    "gulp-imagemin": "^7.1.0",
    "gulp-jsmin": "^0.1.5"

当我尝试使用 eslint/gulp-eslint 运行 lint javascript 的 gulp 任务时;

function javascript() {
    return src('private/script/**')
        //.pipe(jsmin())
        .pipe(eslint())
        .pipe(eslint.format())
        .pipe(eslint.failAfterError())
        .pipe(dest('public/script'));
}

我收到以下错误;

Error: .eslintrc.json » eslint-config-standard:
        Environment key "es2021" is unknown

我使用 npx eslint --init 生成以下配置文件;

{
    "env": {
        "browser": true,
        "commonjs": true,
        "es6": true
    },
    "extends": [
        "standard"
    ],
    "globals": {
        "Atomics": "readonly",
        "SharedArrayBuffer": "readonly"
    },
    "parserOptions": {
        "ecmaVersion": 2018
    },
    "rules": {
    }
}

我已经完成 npm 安装,以确保我拥有最新版本的依赖项。我还在 guthub 上看到,错误可能与 gulp-eslint 有关,因为它是旧版本,可能没有使用 eslint 的当前版本,但是,我已将 gulp-eslint package.json 更改为使用最新版本的 eslint ,但仍然没有成功。我还将 node/npm 更新为它们的最新 lts 版本。

3个回答

我通过删除 gulp-eslintnode_modules 文件夹中的 eslint 文件夹来解决这个问题。这会强制节点使用您作为依赖项的版本,而不是项目维护者想要使用的版本。

这似乎是一个已知问题。

glend
2020-12-28

问题在于 gulp-eslint 在 hub 下与 ESLint 6 一起工作,而 ESLint 6 不支持 es2021 环境(请参阅 ESLint 6 支持的环境 )。

我将展示三个选项来处理这个问题。最佳解决方案取决于您的设置和要求。

方法 1:用等效定义替换 es2021

es2021 环境与 es2020 相同,但增加了全局变量 AggregateErrorFinalizationRegistryWeakRef (请参阅 es2021 的定义> ),因此您可以在 .eslintrc 配置文件中输入这些设置以获取相同的结果。

{
  ...
  "env": {
    ...
    "es2020": true
  },
  ...
  "globals": {
    ...
    "AggregateError": "readonly",
    "FinalizationRegistry": "readonly",
    "WeakRef": "readonly"
  },
  ...
}

方法 2:强制 gulp-eslint 使用 ESLint 7

如果您使用的是 npm >= 8.3 < 9.0(使用 npm -v 检查),你可以覆盖 gulp-eslint 使用的 ESLint 版本。

为此,首先向你的 package.json 文件中添加一个覆盖条目,如下所示:

{
  ...
  "overrides": {
    "gulp-eslint": {
      "eslint": "7"
    }
  },
  ...
}

然后运行:

npm install

现在,gulp-eslint 将与最新版本的 ESLint 7 一起使用,该版本确实识别 es2021 环境(它存在于 ESLint >= 7.8 中)。

请注意,gulp-eslint 仍然不支持 ESLint 7,因此某些事情可能无法按预期工作。具体来说,某些插件可能无法加载或产生运行时错误。

方法 3:使用 gulp-eslint-new

gulp-eslint-new 适用于 ESLint 8,在大多数情况下可以用作 gulp-eslint 的替代品,前提是配置与两个版本兼容。

  • 使用
    npm uninstall gulp-eslint
    
    卸载 gulp-eslint
  • 使用
    npm install -D 安装 gulp-eslint-new gulp-eslint-new
    
  • 在您的 gulpfile 中,将 gulp-eslint 的导入替换为 gulp-eslint-new

免责声明 :我目前是 gulp-eslint-new 的唯一维护者。

GOTO 0
2022-06-19

我通过将 eslint 版本升级到版本 7 来解决这个问题 这是 在此处输入图片描述 我的包 json 的样子

Faris Rayhan
2022-03-05