繁体   English   中英

如何排除`node_modules / @ types / ** / node_modules`?

[英]How to exclude `node_modules/@types/**/node_modules`?

我遇到过node_modules/@types中的类型定义正在安装自己的@types依赖项的情况,这些“嵌套”@types与我的顶级@types冲突。

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

如何在node_modules/@types/**/node_modules中排除node_modules/@types/**/node_modules node_modules?

一个警告 - 我正在使用awesome-typescript-loader,这可能有一些限制

我尝试过的:

1 - exclude属性中的文件glob,用于排除嵌套的node_modules

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

2 - 明确声明types

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

3 - typeRoots文件glob以排除嵌套的node_modules

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

我学到了什么

1 - 排除似乎不适用于@types

2 - 包括具有“类型”的类型意味着包括其依赖的@types

3 - typeRoots似乎不适用于文件globs(或者我写的是错误的)

有关:

排除已安装依赖项中的@types输入

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 / whatever / node_modules?

我的环境详情

“node”:“8.6.0”,“typescript:”2.8.3“,”awesome-typescript-loader“:”5.0.0“,”webpack“:”4.8.3“,

我找到的解决方案是在tsconfig.json paths设置中指定node_modules/@types目录。

这是我在tsconfig.json更改的代码段,您应该能够根据自己的用例进行调整。 我需要修改我的baseUrl和我的paths设置。

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

在我的情况下,我在我的TS项目中使用绝对URL,所以我的本地文件都是相对于@/ 我想如果你没有使用这样的绝对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"]
}

使用peerDependencies确保只有一个依赖项版本。

即如果我使用角度和角度模拟的打字,角度模拟将有自己的@类型/角度

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

要防止安装两个版本的@types/angular ,请在package.json文件中声明@types/angular作为peerDependency。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM