Typescript 别名不适用于 monorepo 中的 VSCode Eslint

Nic*_*ley 4 typescript eslint visual-studio-code lerna monorepo

我正在一个项目中使用 Typescript、Lerna 和 monorepos。我有以下项目结构:

tsconfig.json
packages/
  project/
    tsconfig.json
    ...
...
Run Code Online (Sandbox Code Playgroud)

我的根tsconfig.json看起来像这样:

{
  "compilerOptions": {
    "baseUrl": ".",

    "declaration": true,
    "declarationMap": true,
    "sourceMap": true,

    "skipLibCheck": true,

    "esModuleInterop": true,
    "module": "esnext",
    "moduleResolution": "node",
    "target": "es5",

    "composite": true,

    "strictPropertyInitialization": false
  }
}
Run Code Online (Sandbox Code Playgroud)

嵌套project tsconfig.json看起来像这样:

{
  "extends": "../../tsconfig.json",
  "compilerOptions": {
    "outDir": "dist",
    "rootDir": "src",
    "jsx": "react",
    "baseUrl": "./",
    "paths": {
      "pages/*": ["./src/pages/*"],
      "hooks/*": ["./src/hooks/*"],
      "assets/*": ["./src/assets/*"],
      "styles/*": ["./src/styles/*"],
      "context/*": ["./src/context/*"],
      "components/*": ["./src/components/*"],
    }
  },
  "include": ["./src/**/*", "global.d.ts"],
  "exclude": ["node_modules", "dist"]
}

Run Code Online (Sandbox Code Playgroud)

一切都按预期工作,除了当我从 VSCode 中的根目录打开项目时,ESLint 扩展抱怨我的别名。

前任。

Unable to resolve path to module 'components/Button'
Run Code Online (Sandbox Code Playgroud)

当从命令行运行 eslint 时,一切都会按预期工作(即./node_modules/.bin/eslint --ext .js,.jsx,.ts,.tsx .)。

此外,如果我从project目录中打开 VSCode,一切也会正常运行。看起来 ESLint 扩展无法识别project为根目录,即使tsconfig.json在那里定义了一个文件。这对我来说没有意义,因为它违背了VSCode 文档

目录中存在 jsconfig.json 文件表明该目录是 JavaScript 项目的根目录

关于如何解决这个问题有什么想法吗?

小智 13

这个 VS Code 设置为我解决了这个问题。Eslint 插件默认使用每个工作区文件夹作为“根”。

"eslint.workingDirectories": [{ "mode": "auto" }]
Run Code Online (Sandbox Code Playgroud)