10

我有多个应用程序,我想共享相同的 eslint 配置:

- project_root/
    - app1/
        - node_modules/
        - eslint.rc
    - app2/
        - node_modules/
        - eslint.rc
    - app3/
        - node_modules/
        - eslint.rc
    - eslint.rc

每个应用程序都有相同的配置:

module.exports = {
  extends: [
    '../.eslintrc',
  ],
};

在根目录中,我想配置所有内容:

module.exports = {
  parser: '@typescript-eslint/parser',
  parserOptions: {
    project: 'tsconfig.json',
    sourceType: 'module',
  },
  plugins: ['@typescript-eslint/eslint-plugin'],
  extends: [
    'plugin:@typescript-eslint/eslint-recommended',
    'plugin:@typescript-eslint/recommended',
    'prettier',
    'prettier/@typescript-eslint',
  ],
  root: true,
  env: {
    node: true,
    jest: true,
  },
  rules: {},
};

但是现在每个应用程序都会抛出找不到节点模块的错误:

无法加载在“.eslintrc.js » ../.eslintrc”中声明的解析器“@typescript-eslint/parser”:找不到模块“@typescript-eslint/parser”。

我在根目录中没有任何 node_modules,我想避免它。

4

1 回答 1

3

我最终联系了 ESLint discord 帮助,并在那里找到了一些资源来帮助我设置共享配置。

https://github.com/eslint/eslint/issues/3458

当我使用 RushJS 来管理我的 monorepo 时,我正在使用 ESLint 的补丁来允许共享配置 npm 包在本地加载插件。更多信息在这里:https ://www.npmjs.com/package/@rushstack/eslint-patch 。

简而言之,在你的 monorepo 中创建一个 NPM 包——如果你在本地链接,你不必将它上传到 NPM(RushJS 会这样做,但我认为你也可以使用普通的 NPM 来做到这一点)。将您的配置放入该包中 - 此处的信息:https ://eslint.org/docs/user-guide/configuring/configuration-files#using-a-shareable-configuration-package 添加从您的共享配置中引用的任何插件作为依赖项那个包裹。使用上面提到的 eslint-patch,ESLint 将从这个包中加载插件,而不是你必须在每个项目中安装它们。

这对我有用。我希望它可以帮助其他人...

于 2021-02-17T11:29:13.617 回答