TypeScript编译文件和tsconfig.json配置

本文详细介绍了如何使用`tsc`命令进行TypeScript的自动编译,包括使用`-w`参数实时监控文件变化,配置`tsconfig.json`文件以编译整个项目,以及`compilerOptions`的各种选项,如`target`、`module`、`outDir`等,以适应不同的编译需求。此外,还讨论了如何设置`include`、`exclude`来控制编译的范围,以及如何处理JavaScript文件的编译和检查。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

自动编译文件

  • 编译文件时,使用 -w 指令后,TS编译器会自动监视文件的变化,并在文件发生变化时对文件进行重新编译。

  • 示例:

    • tsc xxx.ts -w
      

自动编译整个项目

  • 如果直接使用tsc指令,则可以自动将当前项目下的所有ts文件编译为js文件。

  • 但是能直接使用tsc命令的前提时,要先在项目根目录下创建一个ts的配置文件 tsconfig.json

  • tsconfig.json是一个JSON文件,添加配置文件后,只需只需 tsc 命令即可完成对整个项目的编译

  • 配置选项:

    • include

      • 定义希望被编译文件所在的目录

      • 默认值:["**/*"]

      • 示例:

        • "include":["src/**/*", "tests/**/*"]
          
        • 上述示例中,所有src目录和tests目录下的文件都会被编译

    • exclude

      • 定义需要排除在外的目录

      • 默认值:[“node_modules”, “bower_components”, “jspm_packages”]

      • 示例:

        • "exclude": ["./src/hello/**/*"]
          
        • 上述示例中,src下hello目录下的文件都不会被编译

    • extends

      • 定义被继承的配置文件

      • 示例:

        • "extends": "./configs/base"
          
        • 上述示例中,当前配置文件中会自动包含config目录下base.json中的所有配置信息

    • files

      • 指定被编译文件的列表,只有需要编译的文件少时才会用到

      • 示例:

        • "files": [
              "core.ts",
              "sys.ts",
              "types.ts",
              "scanner.ts",
              "parser.ts",
              "utilities.ts",
              "binder.ts",
              "checker.ts",
              "tsc.ts"
            ]
          
        • 列表中的文件都会被TS编译器所编译

      • compilerOptions

        • 编译选项是配置文件中非常重要也比较复杂的配置选项

        • 在compilerOptions中包含多个子选项,用来完成对编译的配置

          • 项目选项

            • target

              • 设置ts代码编译的目标版本

              • 可选值:

                • ES3(默认)、ES5、ES6/ES2015、ES7/ES2016、ES2017、ES2018、ES2019、ES2020、ESNext
              • 示例:

                • "compilerOptions": {
                      "target": "ES6"
                  }
                  
                • 如上设置,我们所编写的ts代码将会被编译为ES6版本的js代码

            • lib

              • 指定代码运行时所包含的库(宿主环境)

              • 可选值:

                • ES5、ES6/ES2015、ES7/ES2016、ES2017、ES2018、ES2019、ES2020、ESNext、DOM、WebWorker、ScriptHost …
              • 示例:

                • "compilerOptions": {
                      "target": "ES6",
                      "lib": ["ES6", "DOM"],
                      "outDir": "dist",
                      "outFile": "dist/aa.js"
                  }
                  
            • module

              • 设置编译后代码使用的模块化系统

              • 可选值:

                • CommonJS、UMD、AMD、System、ES2020、ESNext、None
              • 示例:

                • "compilerOptions": {
                      "module": "CommonJS"
                  }
                  
            • outDir

              • 编译后文件的所在目录

              • 默认情况下,编译后的js文件会和ts文件位于相同的目录,设置outDir后可以改变编译后文件的位置

              • 示例:

                • "compilerOptions": {
                      "outDir": "dist"
                  }
                  
                • 设置后编译后的js文件将会生成到dist目录

            • outFile

              • 将所有的文件编译为一个js文件

              • 默认会将所有的编写在全局作用域中的代码合并为一个js文件,如果module制定了None、System或AMD则会将模块一起合并到文件之中

              • 示例:

                • "compilerOptions": {
                      "outFile": "dist/app.js"
                  }
                  
            • rootDir

              • 指定代码的根目录,默认情况下编译后文件的目录结构会以最长的公共目录为根目录,通过rootDir可以手动指定根目录

              • 示例:

                • "compilerOptions": {
                      "rootDir": "./src"
                  }
                  
            • allowJs

              • 是否对js文件编译
            • checkJs

              • 是否对js文件进行检查

              • 示例:

                • "compilerOptions": {
                      "allowJs": true,
                      "checkJs": true
                  }
                  
            • removeComments

              • 是否删除注释
              • 默认值:false
            • noEmit

              • 不对代码进行编译
              • 默认值:false
            • sourceMap

              • 是否生成sourceMap
              • 默认值:false
          • 严格检查

            • strict
              • 启用所有的严格检查,默认值为true,设置后相当于开启了所有的严格检查
            • alwaysStrict
              • 总是以严格模式对代码进行编译
            • noImplicitAny
              • 禁止隐式的any类型
            • noImplicitThis
              • 禁止类型不明确的this
            • strictBindCallApply
              • 严格检查bind、call和apply的参数列表
            • strictFunctionTypes
              • 严格检查函数的类型
            • strictNullChecks
              • 严格的空值检查
            • strictPropertyInitialization
              • 严格检查属性是否初始化
          • 额外检查

            • noFallthroughCasesInSwitch
              • 检查switch语句包含正确的break
            • noImplicitReturns
              • 检查函数没有隐式的返回值
            • noUnusedLocals
              • 检查未使用的局部变量
            • noUnusedParameters
              • 检查未使用的参数
          • 高级

            • allowUnreachableCode
              • 检查不可达代码
              • 可选值:
                • true,忽略不可达代码
                • false,不可达代码将引起错误
            • noEmitOnError
              • 有错误的情况下不进行编译
              • 默认值:false
<think>嗯,用户问的是tsconfig.app.jsontsconfig.json的区别。我需要先回忆一下TypeScript配置相关知识。TypeScript项目通常用tsconfig.json配置编译选项。但有时候在复杂项目,比如Angular这样的框架里,可能会有多个tsconfig文件。 首先,tsconfig.json是主配置文件,所有TypeScript项目都需要这个文件。它定义了编译器的选项包含的文件。那tsconfig.app.json呢?应该是在某些框架或项目结构中,用来覆盖或扩展主配置的。比如Angular项目,可能会有不同的环境配置,比如应用代码测试代码分开。 接下来要确定两者的关系。通常,tsconfig.app.json会通过extends属性继承tsconfig.json的基础配置,然后添加或修改特定于应用的设置。比如在Angular中,src/目录下的代码可能使用tsconfig.app.json,而测试或其他部分用不同的配置,比如tsconfig.spec.json。 另外,需要区分它们的用途。主配置文件可能设置通用的编译选项,而应用特定的配置可能包括不同的文件包含规则、输出目录或模块解析方式。例如,应用配置可能排除测试文件,或者针对浏览器环境调整模块系统。 还要注意,用户可能是在使用Angular或者其他类似框架时遇到了这个问题,所以需要举例说明框架中的典型结构。比如Angular CLI生成的项目里会有多个tsconfig文件,各自负责不同的部分,避免配置冲突。 最后要确保回答结构清晰,分点说明区别,可能包括定义、使用场景、继承关系示例。需要检查是否有遗漏的关键点,比如如何引用这些配置文件,或者在实际构建过程中它们如何被工具使用。</think>在 TypeScript 项目中,`tsconfig.json` `tsconfig.app.json` 的区别主要体现在以下层级结构中: 🔵 **1. 基础定义** - `tsconfig.json`:是 TypeScript 的**根配置文件**,所有编译规则的基准,必须存在于项目根目录 - `tsconfig.app.json`:是**扩展配置文件**,常见于 Angular 等框架项目,继承并覆盖基础配置 🟢 **2. 典型使用场景** ```text my-project/ ├── src/ │ └── app/ --> 应用代码 ├── tsconfig.json --> 基础配置 └── tsconfig.app.json --> 应用特有配置 ``` 🟣 **3. 继承关系示例** ```json // tsconfig.app.json { "extends": "../tsconfig.json", // 显式继承基础配置 "compilerOptions": { "outDir": "../dist/app" // 覆盖输出目录 }, "include": ["src/**/*.ts"] // 限定应用源代码 } ``` 🟡 **4. 配置差异对比表** | 特性 | tsconfig.json | tsconfig.app.json | |--------------------|------------------------|--------------------------| | **作用范围** | 全项目 | 特定应用模块 | | **文件包含规则** | 默认包含所有 TS 文件 | 限定 src/ 等特定目录 | | **编译目标** | 基础 ES 版本设定 | 可能调整模块加载方式 | | **框架集成** | 通用配置 | 适配 Angular/Vue 等特性 | 🔴 **5. 工程化实践要点** - 当使用 `ng build` 等框架命令时,构建工具会自动识别 `tsconfig.app.json` - 测试配置通常单独使用 `tsconfig.spec.json` 处理测试文件 - 可通过 `angular.json` 等工程文件指定具体使用的 tsconfig 文件 💡 **最佳实践建议**:保留基础配置在 `tsconfig.json` 中,通过扩展配置实现不同环境(开发/生产/测试)的差异化编译需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值