Как запретить компилятору TypeScript сообщать об ошибках компиляции в символьных модулях - PullRequest
0 голосов
/ 29 апреля 2020

У меня есть монорепо, контролируемое ru sh. js с P NPM в качестве менеджера пакетов.

Раньше все общие модули предварительно компилировались в цели cjs, esm, dts. Но этот подход имеет некоторый fl aws, поэтому я решил оставить их как нетронутые источники и установил их основную запись в package.json равной "main": "./src/index.ts|x". В то же время я использовал react-app-rewired, чтобы указать Webpack компилировать только те библиотеки с символическими ссылками из node_modules, используя babel, и все работает отлично. Jest тоже счастлив.

Проблема, с которой я столкнулся, заключается в том, что когда я запускаю tsc по какой-то причине, компилятор углубляется в локальные пакеты с символическими ссылками и выдает МНОГО проблем (даже если они компиляция без проблем, если вы запускаете их tsc).

TSForkWebpackPlugin сообщил о похожих проблемах для create-react-app, но я проигнорировал их, используя опцию конфигурации reportFiles с использованием react-app-rewired, и подумал, что это какая-то ошибка на сайте плагинов, но, похоже, это не так.

Я добавил всевозможные шаблоны глобусов к exclude, например **/node_modules/@namespace/**, node_modules/@namespace/** и node_modules/@namespace, но ни один из них не работал. "skipLibCheck": true тоже есть.

Мой tsconfig.json для справки

{
  "compilerOptions": {
    "incremental": true,
    "baseUrl": "src",
    "downlevelIteration": true,
    "lib": ["esnext", "dom", "dom.iterable"],
    "module": "esnext",
    "target": "esnext",
    "sourceMap": true,
    "allowJs": true,
    "esModuleInterop": true,
    "isolatedModules": true,
    "jsx": "preserve",
    "moduleResolution": "node",
    "forceConsistentCasingInFileNames": false,
    "noImplicitReturns": true,
    "noImplicitThis": true,
    "noImplicitAny": true,
    "noUnusedParameters": true,
    "noUnusedLocals": true,
    "strictNullChecks": true,
    "suppressImplicitAnyIndexErrors": true,
    "skipLibCheck": true,
    "noEmit": true,
    "preserveSymlinks": true,
    "resolveJsonModule": true,
    "allowSyntheticDefaultImports": true,
    "strict": true
  },
  "exclude": [
    "node_modules"
  ],
  "include": ["src"]
}

1 Ответ

0 голосов
/ 29 апреля 2020

Единственное решение этой проблемы, на данный момент, состоит в том, чтобы заставить tsc думать, что символические проекты являются скомпилированными библиотеками, добавляя "types": "./types/index.d.ts" или аналогичные и генерируя объявления по-настоящему. Затем, я полагаю, поскольку он думает, что это библиотека skipLibCheck начинает работать, и у вас больше не возникает проблем.

Конечно, это не супероптимально, но так как мы скомпилировали TS в cjs и esm с помощью Babel, мы все равно теперь экономим много времени, имея также режим просмотра и другие вещи из мультипакета CRA. Перед повторной сборкой требовалось после каждого изменения для каждого локального пакета, который не является инкрементным, например, длинным и неудобным на многих уровнях.

Любые вопросы о деталях реализации, пожалуйста, задавайте мне.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...