在已安装的依赖项中排除 @types 类型

Posted

技术标签:

【中文标题】在已安装的依赖项中排除 @types 类型【英文标题】:Exclude @types typings in installed dependencies 【发布时间】:2018-07-20 02:50:27 【问题描述】:

是否可以在已安装的依赖项中排除全局类型?

我安装了一个本地依赖项。这也复制了该依赖项的 node_modules 文件夹。此 node_modules 文件夹包含已安装的 @types 类型。这些与为主项目安装的 @types 类型冲突。

例如。 project-path/node_modules/local-dependency/node_modules/@types/reactproject-path/node_modules/@types/react 冲突。

是否可以让 typescript 编译器忽略本地依赖项中的类型?

【问题讨论】:

我已经回答了similar question。我通过在我的tsconfig.jsonpaths 键中指定./node_modules/@types/* 解决了这个问题。 How to exclude `node_modules/@types/**/node_modules`?的可能重复 【参考方案1】:

您是否尝试为types 选项使用空数组?


  "compilerOptions": 
    ...,
    "types": []
  

这会禁用自动包含类型。

有关详细信息,请参阅TypeScript documentation。

【讨论】:

【参考方案2】:

或者,在编译器选项中使用"skipLibCheck": true

【讨论】:

【参考方案3】:

您可以在 tsconfig.json 中使用 includeexclude 属性来更精细地控制 TypeScript 编译器包含的文件:

http://www.typescriptlang.org/docs/handbook/tsconfig-json.html

"include""exclude" 属性采用类似 glob 的文件模式列表。支持的全局通配符有:

* 匹配零个或多个字符(不包括目录分隔符) ?匹配任意一个字符(不包括目录分隔符) **/ 递归匹配任何子目录

所以也许你可以这样做:



    ...    

    "exclude": [
        "node_modules"
    ]

或者,根据您的需要,您可以设计一种更有针对性的 glob 模式,仅排除给您带来问题的一个依赖项的 node_modules 目录。

如果您在示例中可以控制 local-dependency 模块,更好的解决方案是更新依赖项或您的应用程序以使用相同版本的 @types/react 模块,删除您的 npm 模块,然后执行一个新鲜的npm install。这应该允许 npm 安装模块的单个共享版本,消除任何冲突的可能性。

【讨论】:

我尝试输入"exclude": ["node_modules/@types/node/index.d.ts"],但没有任何区别。 node_modules/@types 似乎很特殊——唯一的排除方法是使用 types 属性并明确包含除我不想要的所有内容之外的所有内容,这意味着每次间接依赖项更改时都会更新列表。即,TypeScript 中可能不支持排除 node_modules/@types。如果有,不是这个。

以上是关于在已安装的依赖项中排除 @types 类型的主要内容,如果未能解决你的问题,请参考以下文章

如何排除从项目依赖项中扫描的 Spring bean?

Android Studio - Gradle 实现 (...) exclude ... 不起作用(无法从依赖项中排除组)

如何从 Kotlin DSL build.gradle 中的所有依赖项中排除库?

Android apk - 如何使用 gradle 从 3rd 方依赖项中排除 .so 文件

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

Spring Boot 应用程序“bean 类的 bean 名称与现有冲突” - 如何从 3rd 方库/依赖项中排除包/类?