Почему компилятор Typescript компилируется вне моего пакета?

#javascript #typescript #tsc #monorepo

Вопрос:

У меня есть монорепост с несколькими пакетами и одной общей библиотекой:

 root/
  one/
  two/
  three/
  shared-lib/
    package.json
    tsconfig.json
 

tsconfig.json:

 {
  "compilerOptions": {
    "rootDir": "src",
    "outDir": "build",
    "lib": [
      "dom",
      "dom.iterable",
      "esnext"
    ],
    "esModuleInterop": true,
    "allowSyntheticDefaultImports": true,
    "moduleResolution": "node",
    "declaration": true,
    "declarationMap": true,
    "skipLibCheck": true,
    "target": "es5",
    "module": "esnext",
    "jsx": "react"
  },
  "include": [
    "src"
  ],
  "exclude": [
    "**/node_modules/**",
    "node_modules",
    "build"
  ]
}
 

Когда я пытаюсь скомпилировать свою библиотеку, я получаю ошибки в пакетах one , two , и three .

 $ cd root/shared-lib
$ yarn run tsc -p tsconfig.json

../one/some/module/up/in/here:14:25 - error TS2307: Cannot find module ...
 

Почему я вижу здесь эти ошибки? Почему tsc вы пытаетесь скомпилировать материал вне пакета, который я велел ему скомпилировать?

Комментарии:

1. Вы случайно не определили в своем tsconfig какой-либо базовый файл, который не указывает на корневой каталог (в данном случае-общую библиотеку)?

2. Как выглядит ваше tsconfig.json досье?

3. Скопированное tsconfig.json содержимое на вопрос.

4. Убедитесь, что ничто shared-lib не импортирует что-либо из других модулей

5. Обратите внимание, что я использую lerna на верхнем уровне репозитория, но на самом деле я не вызываю никаких lerna команд, когда вижу такое поведение.

Ответ №1:

Как и предполагалось, основной причиной было то, что у меня случайно были ссылки на one/ two/ , и т. Д. Изнутри shared-lib/ (как следствие неполного рефакторинга материала shared-lib/ ). Исправление этих импортных операций решает проблему.