共享 eslint 配置找不到节点模块

Mic*_*ick 10 javascript node-modules eslint prettier typescript-eslint

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

- project_root/
    - app1/
        - node_modules/
        - eslint.rc
    - app2/
        - node_modules/
        - eslint.rc
    - app3/
        - node_modules/
        - eslint.rc
    - eslint.rc
Run Code Online (Sandbox Code Playgroud)

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

module.exports = {
  extends: [
    '../.eslintrc',
  ],
};
Run Code Online (Sandbox Code Playgroud)

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

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: {},
};
Run Code Online (Sandbox Code Playgroud)

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

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

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

小智 4

我最终联系了 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 将从该包加载插件,而不必在每个项目中安装它们。

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