Как исключить `node_modules / @ types / ** / node_modules`? - PullRequest
0 голосов
/ 25 мая 2018

Я столкнулся с ситуацией, когда определение типа в node_modules/@types устанавливает свои собственные зависимости @types, и эти "вложенные" @types конфликтуют с моими @ типами верхнего уровня.

@types
|-angular //v1.5
|-angular-ui-bootstrap
  |-node_modules
    |-@types
       |-angular //v1.6

Какя могу исключить node_modules/@types/**/node_modules в моем tsconfig?

Одно предупреждение - я использую awesome-typescript-загрузчик, который может иметь некоторые ограничения .

ЧтоЯ пытался:

1 - глобус файла в свойстве exclude, чтобы исключить вложенные модули node_modules

    compilerOptions.exclude: '../node_modules/@types/**/node_modules'

2 - явное объявление types

    compilerOptions.types: ['angular', 'angular-ui-bootstrap']

3 - глобус файла в typeRoots для исключения вложенных модулей node_modules

    compilerOptions.typeRoots: ['../node_modules/@types/**/!(node_modules)']

Что я выучил

1 - исключить не кажетсяработать с @ types

2 - в том числе тип с типами означает, включая его зависимые @ types

3 - typeRoots, похоже, не работает с глобусами файлов (или я пишунеправильный глобус)

Связанный:

Исключить ввод типов @ в установленных зависимостях

https://github.com/Microsoft/TypeScript/issues/9731

https://github.com/Microsoft/TypeScript/issues/11917

https://github.com/s-panferov/awesome-typescript-loader/issues/492

tsconfig - Как игнорировать @ types / what / node_modules для определенного каталога?

Подробная информация о моей среде

"узел": "8.6.0", "машинопись": "2.8.3", "awesome-typescript-loader": "5.0.0 "," webpack ":" 4.8.3 ",

Ответы [ 2 ]

0 голосов
/ 09 февраля 2019

Решение, которое я нашел для этого, состояло в том, чтобы указать каталог node_modules/@types в параметре tsconfig.json paths.

Вот фрагмент, который я изменил в моем tsconfig.json, который вы должны иметь возможностьадаптироваться к вашему варианту использования.Мне нужно было изменить мои настройки baseUrl и paths.

   ...
    "baseUrl": ".",
    "paths": {
      "@/*": ["./src/*"],
      "*": ["./node_modules/@types/*"]
    }
   ...

В моем случае я использую абсолютные URL-адреса в своем проекте TS, поэтому все мои локальные файлы относятся к @/.Я думаю, что если вы не используете такой абсолютный URL, у вас должно быть что-то вроде следующего для вашей конфигурации:

   ...
    "baseUrl": ".",
    "paths": {
      "*": ["./src/*", "./node_modules/@types/*"]
    }
   ...

Вот мой полный tsconfig.json, который, вероятно, содержит много несущественной информации, дляссылка.

{
  "compilerOptions": {
    "outDir": "./build/",
    "sourceMap": true,
    "allowJs": true,
    "checkJs": true,
    "jsx": "react",
    "target": "es2017",
    "module": "commonjs",
    "moduleResolution": "node",
    "allowSyntheticDefaultImports": true,
    "strict": true,
    "noUnusedLocals": true,
    "noUnusedParameters": true,
    "removeComments": false,
    "preserveConstEnums": true,
    "skipLibCheck": true,
    "experimentalDecorators": true,
    "esModuleInterop": true,
    "baseUrl": ".",
    "paths": {
      "@/*": ["./src/*"],
      "*": ["./node_modules/@types/*"]
    }
  },
  "include": ["**/*", "*"],
  "exclude": ["build", "node_modules", "coverage"]
}

0 голосов
/ 01 августа 2018

Используйте peerDependencies , чтобы убедиться, что у вас есть только одна версия зависимости.

т.е. если я использую типизацию для angular и angular-mocks, angular-mocks будет иметь свои собственные @types/ angular

@types/angular  // => 1.5.8
@types/angular-mocks // => 1.5.8
@types/angular-mocks/node_modules/@types/angular // => *

Чтобы предотвратить установку двух версий @types/angular, объявите @types/angular как peerDependency в файле package.json.

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