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

Posted

技术标签:

【中文标题】共享 eslint 配置找不到节点模块【英文标题】:Shared eslint config cannot find node modules 【发布时间】:2020-07-01 17:41:58 【问题描述】:

我有多个应用想要共享相同的 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: ,
;

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

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

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

【问题讨论】:

您需要明确提及您的 node_modules 文件夹的路径。任何一个都可以工作 ../node_modules/@typescript-eslint/parser /node_modules/@typescript-eslint/parser /node_modules/@typescript-eslint/parser node_modules/@typescript-eslint/parser 对于其他节点模块依赖项。 【参考方案1】:

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

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

【讨论】:

以上是关于共享 eslint 配置找不到节点模块的主要内容,如果未能解决你的问题,请参考以下文章

eslint“找不到模块'eslint/lib/util/source-code'”错误

无法加载插件@typescript-eslint:找不到模块'eslint-plugin-@typescript-eslint'

Atom & eslint:找不到模块 'eslint-config-react-app'

Javascript Eslint 错误:找不到模块 'optionator'

VSCode 加载插件失败找不到模块 'eslint-plugin-prettier'

使用 Prettier Eslint 时找不到模块“@typescript-eslint/parser”