ошибка TS6059: файл не находится в корневом каталоге. Предполагается, что корневой каталог будет содержать все исходные файлы.

Я получаю эту довольно бессмысленную ошибку транспиляции tsc:

ошибка TS6059: файл '/Users/alex/codes/interos/teros-cli/src/logging.ts' не находится в 'rootDir' / Users / alex / codes / teros / notifier-server / src '. Предполагается, что rootDir будет содержать все исходные файлы.

мой PWD - /Users/alex/codes/teros/notifier-server, а файл tsconfig.json для /Users/alex/codes/teros/notifier-server/tsconfig.json:

{
  "compilerOptions": {
    "outDir": "dist",
    "allowJs": false,
    "pretty": true,
    "resolveJsonModule": true,
    "sourceMap": false,
    "skipLibCheck": true,
    "rootDir": "src",
    "declaration": false,
    "baseUrl": ".",
    "target": "es2018",
    "module": "commonjs",
    "noImplicitAny": true,
    "removeComments": true,
    "allowUnreachableCode": true,
    "lib": [
      "es2017",
      "es2018"
    ]
  },
  "compileOnSave": false,
  "include": [
    "src"
  ]
}

это похоже на ошибку .. поскольку каталог teros-cli находится за пределами PWD, и управляются отдельным файлом tsconfig.json.

Я даже изменил это поле на:

  "include": [
    "/Users/alex/codes/teros/notifier-server/src"
  ],
  "exclude": [
    "/Users/alex/codes/teros/teros-cli"
  ]

по-прежнему получаю ту же ошибку.


person Community    schedule 09.08.2019    source источник


Ответы (1)


Что такое rootDir?

rootDir устанавливается в корневую папку, содержащую все < / em> ваши исходные файлы. Если не указано иное, TS автоматически выберет подходящую родительскую папку для всех входов. rootDir также определяет выходной каталог.

Что означает ошибка?

Я предполагаю, что у вас есть инструкция import для logging.ts где-то в notifier-server:

import {logger} from "@teros-cli/logging" // or similar

Тогда модуль logging.ts будет автоматически включается компилятором независимо от параметров include и exclude в tsconfig.json. Один из способов проверить все включенные файлы - tsc --listFiles.

tsconfig.json файл за пределами notifier-server здесь не помогает. Компилятор выбирает ровно одну конфигурацию для tsc компиляции и, при необходимости, извлекает унаследованные конфиги. Если он не может найти его в notifier-server корне проекта (где вы начали tsc), только тогда компилятор ищет вверх по цепочке родительских каталогов, пока не будет найдена конфигурация.

Возможные решения

Одно из исправлений - просто удалить "rootDir": "src" из параметров компилятора, чтобы он устанавливался автоматически. Внимание: rootDir затем будет рассматривать оба проекта как входные!

Альтернатива: вы можете добавить отдельный logging.ts модуль, содержащийся в проекте notifier-server/src, и удалить внешний import.

Надеюсь, это поможет!

person ford04    schedule 09.08.2019
comment
Другой вариант - использовать ссылки на проекты. См. этот ответ для решения rootDir проблем и использования справочника по проекту для управления внутренними зависимостями. Все станет более понятным. - person Inigo; 29.04.2020