tsconfig之include和exclude详解

include 作用

指定需要编译处理的文件列表,支持 glob 模式匹配,文件的解析路径相对于当前项目的 tsconfig.json 文件位置

匹配规则

  • *:匹配零个或者多个字符(包括目录的分隔符)
  • ?:匹配任一字符(包括目录分隔符)
  • **/:匹配任何层级的嵌套目录

如果没有明确指定文件扩展名。那么默认情况下仅会包含 .ts.tsx.d.ts 类型的文件。但是如果 allowJs 选项被设置成了 true,那么 .js.jsx 文件也会被包含其中

示例

当我们的目录结构如下

  1. include 配置为 src 或者 src/ 时,src 下的所有文件都会经过 ts 的编译
  2. include 配置为 src/* 时,src 下第一层级的子文件会经过 ts 的编译
  3. include 配置为 src/*.js 时,src 下第一层级的子文件以 .js 结尾的会经过 ts 的编译
  4. include 配置为 src/**/* 时,src 下的所有文件都会经过 ts 的编译,目录层级不限
  5. include 配置为 src/**/*.js 时,src 下以 .js 结尾的会经过 ts 的编译,并且在其对应的目录下面,目录层级不限
  6. include 配置为 **/* 时,包含当前项目中所有文件

exclude 作用

用于指定当解析 include 选项时,需要忽略的文件列表

  • exclude 的默认值是 ["node_modules", "bower_components", "jspm_packages"] 加上 outDir 选项指定的值
  • exclude 配置为 ["src/*.ts"] 代表忽略当前 src 下第一层级的 ts 文件
  • 任何被 filesinclude 指定的文件所引用的文件也会被包含进来,A.ts 引用了 B.ts,因此 B.ts 不能被排除,除非引用它的 A.tsexclude 列表中。

files 作用

用来指定需要编译的文件列表(注意,只能是文件,不能是文件夹)

  • 如果其中任意一个文件无法找到,都会抛出错误
  • 通过 files 属性明确指定的文件却总是会被包含在内,不管 exclude 如何设置
  • 这个配置项适用于你想要指定的文件数量比较少,并且不需要使用 glob 模式匹配的情况。否则,请使用 include 配置项
### Vue 项目中 `tsconfig` 配置详解 #### 基本概念 `tsconfig.json` 文件用于定义 TypeScript 编译器的行为,控制编译过程中的各种选项。对于基于 Vue TypeScript 的项目来说,合理配置该文件可以显著提升开发体验并减少潜在错误。 --- #### 常见配置项及其作用 以下是适用于 Vue 项目的常见 `tsconfig.json` 配置项: 1. **compilerOptions** - 这部分包含了 TypeScript 编译的核心选项。 2. **target**: 定义 JavaScript 输出的目标版本。通常设置为 `"esnext"` 或 `"es2015"` 来支持现代浏览器特性[^1]。 ```json "target": "esnext" ``` 3. **module**: 设置模块系统的类型。Vite 推荐使用 `"ESNext"` 而 Webpack 可能更倾向于 `"CommonJS"` 或 `"ESNext"`[^2]。 ```json "module": "ESNext" ``` 4. **strict**: 启用严格模式,强制执行一系列严格的类型检查规则。推荐开启以提高代码质量[^3]。 ```json "strict": true ``` 5. **esModuleInterop**: 改善 CommonJS 模块与 ES Modules 的互操作性问题。建议启用此功能以便更好地兼容第三方库[^4]。 ```json "esModuleInterop": true ``` 6. **skipLibCheck**: 跳过对 `.d.ts` 类型声明文件的验证,加快构建速度。适合大型项目或依赖较多外部库的情况。 ```json "skipLibCheck": true ``` 7. **forceConsistentCasingInFileNames**: 强制文件名大小写一致性,防止因操作系统不区分大小写而导致的问题。 ```json "forceConsistentCasingInFileNames": true ``` 8. **resolveJsonModule**: 允许导入 JSON 文件作为模块。这对于需要动态加载数据的应用非常有用。 ```json "resolveJsonModule": true ``` 9. **types**: 显式指定全局可用的类型包列表。例如引入 `node` 或其他工具链所需的类型声明。 ```json "types": ["node"] ``` 10. **include/exclude/files**: 控制哪些文件被包含到 TypeScript 构建过程中。默认情况下会自动扫描当前目录下的所有 `.ts`, `.tsx`, `.js`, `.jsx` 文件。 ```json "include": ["src/**/*"], "exclude": ["node_modules", "dist"] ``` --- #### 特殊场景优化 针对特定需求还可以调整如下参数: - **checkJs**: 如果项目中有大量未迁移至 TypeScript 的旧版 JS 文件,则可通过此项检测其中可能存在的语法错误。 ```json "checkJs": false ``` - **allowSyntheticDefaultImports**: 当某些库并未提供标准导出形式时允许合成默认导入方式简化调用逻辑。 ```json "allowSyntheticDefaultImports": true ``` - **isolatedModules**: 若计划利用增量编译技术加速开发流程则需确保启用了这一开关因为只有这样才能让 tsc 正确识别单独保存下来的片段化源码单元. ```json "isolatedModules": true ``` --- #### 示例完整配置 以下是一个完整的 `tsconfig.json` 示例,适配于典型的 Vue 3 + Vite + TypeScript 环境: ```json { "compilerOptions": { "target": "esnext", "module": "ESNext", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, "resolveJsonModule": true, "types": ["vite/client", "node"], "moduleResolution": "Node", "baseUrl": "./", "paths": { "@/*": ["src/*"] } }, "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue"], "exclude": ["node_modules", "dist"] } ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wflynn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值