[英]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(或者我写的是错误的)
有关:
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.