tsconfig.json详解

142 阅读3分钟

- tsconfig.json配置

  1. compilerOptions 配置编译器行为
  2. include 匹配编译文件
  3. exclude 排除不需要的编译文件
  4. extends 继承别的tsconfg.json文件
  5. files 是一个字符串数组,用于指定显式包含在编译中的文件的路径。与 include 不同,它包括那些无法通过匹配模式进行自动推断的文件
  • 注意 使用 files 选项可以精确控制要编译的文件,适用于只想编译项目的特定部分或仅包含必要文件的情况。注意,如果使用了 files 选项,则编译器将忽略 includeexclude 选项
{
  "compilerOptions": {
    "target": "es6"
  },
  "files": [
    "src/app.ts",
    "src/utils.ts"
  ]
}
// `src/app.ts` 和 `src/utils.ts` 这两个文件会被编译器包含在编译过程中,其他文件将被忽略

- compilerOptions

compilerOptions 编译器行为分为以下几个配置

  1. 工程化(Project)
  2. 语言与环境(Language and Environment)
  3. JavaScript支持(JavaScript Support)
  4. 代码输出(Emit)
  5. Interop Constraints
  6. 类型检测(Type Checking)
  7. 完整性检测(Completeness)

通常打包Typescript compilerOptions选项

  1. 编译目标和模块系统配置:
    • target:指定编译后的 JavaScript 目标版本。
    • module:指定生成的 JavaScript 模块系统。
  2. 模块解析配置:
    • moduleResolution:指定模块解析策略。
    • baseUrl:指定用于解析非相对模块名称的基本目录。
    • paths:指定模块名称的映射到实际文件或目录的路径。
  3. 代码输出配置:
    • outDir:指定编译输出的目录。
    • outFile:将所有输出文件合并为一个文件。
    • declaration:是否生成声明文件(.d.ts)。
  4. 类型检查和严格性配置:
    • strict:启用所有的严格类型检查选项。
    • noImplicitAny:禁止隐式的 any 类型。
    • strictNullChecks:启用严格的 null 检查。
  5. 路径和映射配置:
    • paths:指定模块名称的映射到实际文件或目录的路径。
    • rootDirs:指定多个根源文件目录。
  6. 其他常用配置:
    • allowJs:是否允许编译器编译 JavaScript 文件。
    • esModuleInterop:允许以常规方式导入非 TypeScript 模块。

element-plus tsconfig.json配置

{
	// 这个 打包element-plus tsconfig.json 文件
	"compilerOptions": {
		// 1.项目模块
		/**
    // 开启组合式项目打包
    1. 跨项目引用:在一个子项目中可以引用另一个子项目中的代码。
    2. 增量编译:当一个子项目发生变化时,只会重新编译该子项目及其依赖的项目,而不需要重新编译整个项目。
    3. 构建顺序优化:编译器可以根据项目间的依赖关系,确定最优的编译顺序,从而提高编译速度。
     */
		"composite": true,

		// 2.编译目标和模块系统配置
		"lib": ["ES2018", "DOM", "DOM.Iterable"],
		"types": ["unplugin-vue-macros/macros-global"],
		"target": "es2018", // 指定编译后的 JavaScript 目标版本
		"module": "esnext", // 指定生成的 JavaScript 模块系统

		// 3.模块解析配置
		"baseUrl": ".", //指定相对路径的基准目录。当使用相对路径引用模块时
		"paths": {
			//指定模块名称的映射到实际文件或目录的路径
			"@element-plus/*": ["packages/*"]
		},
		"moduleResolution": "node", // // 指定模块解析策略

		// 4.代码输出配置
		"outDir": "dist", // 代码输出目录
		"sourceMap": false, // 是否开启源代码映射

		// 5.类型检查和严格性配置
		"strict": true, // 开启严格模式
		"noUnusedLocals": true, // 检查是否存在未使用的局部变量,并给出相应的警告或错误。
		"resolveJsonModule": true, // 启用 JSON 模块解析的选项
		"allowSyntheticDefaultImports": true,
		"removeComments": false, // 编译过程中是否删除注释。

		// 6.路径和映射配置
		"rootDir": ".", //指定多个根源文件目录
		"skipLibCheck": true, // 是否跳过对所有声明文件(.d.ts)的类型检查,包括默认库文件和自定义的外部类型声明文件。

		// 7.其他常用配置
		"allowJs": false,
		"jsx": "preserve", //jsx 处理方式.
		"esModuleInterop": true // 更兼容的方式处理使用 ES 模块导入和导出的代码
	},
	// 需要编译的文件
	"include": ["packages", "typings/components.d.ts", "typings/env.d.ts"],
	// 不需要编译文件
	"exclude": [
		"node_modules",
		"**/dist",
		"**/__tests__/**/*",
		"**/gulpfile.ts",
		"**/test-helper",
		"packages/test-utils",
		"**/*.md"
	]
}