詳解TypeScript項目中的tsconfig.json配置


 

在TS的項目中,TS最終都會被編譯JS文件執行,TS編譯器在編譯TS文件的時候都會先在項目根目錄的tsconfig.json文件,根據該文件的配置進行編譯,默認情況下,如果該文件沒有任何配置,TS編譯器會默認編譯項目目錄下所有的.ts、.tsx、.d.ts文件。實際項目中,會根據自己的需求進行自定義的配置,下面就來詳細了解下tsconfig.json的文件配置。

文件選項配置

  • files : 表示編譯需要編譯的單個文件列表

    "files": [
      // 指定編譯文件是src目錄下的a.ts文件
      "scr/a.ts"
    ]
    
  • include: 表示編譯需要編譯的文件或目錄

    "include": [
      // "scr" // 會編譯src目錄下的所有文件,包括子目錄
      // "scr/*" // 只會編譯scr一級目錄下的文件
      "scr/*/*" // 只會編譯scr二級目錄下的文件
    ]
    
  • exclude:表示編譯器需要排除的文件或文件夾

    默認排除node_modules文件夾下文件

    "exclude": [
      // 排除src目錄下的lib文件夾下的文件不會編譯
      "src/lib"
    ]
    
  • extends: 引入其他配置文件,繼承配置

    // 把基礎配置抽離成tsconfig.base.json文件,然后引入
    "extends": "./tsconfig.base.json"
    
  • compileOnSave:設置保存文件的時候自動編譯

    vscode暫不支持該功能,可以使用'Atom'編輯器

    "compileOnSave": true
    

編譯選項配置

  • compilerOptions:配置編譯選項

    編譯選項配置非常繁雜,有很多配置,這里只列出常用的配置。

    "compilerOptions": {
      "incremental": true, // TS編譯器在第一次編譯之后會生成一個存儲編譯信息的文件,第二次編譯會在第一次的基礎上進行增量編譯,可以提高編譯的速度
      "tsBuildInfoFile": "./buildFile", // 增量編譯文件的存儲位置
      "diagnostics": true, // 打印診斷信息 
      "target": "ES5", // 目標語言的版本
      "module": "CommonJS", // 生成代碼的模板標准
      "outFile": "./app.js", // 將多個相互依賴的文件生成一個文件,可以用在AMD模塊中,即開啟時應設置"module": "AMD",
      "lib": ["DOM", "ES2015", "ScriptHost", "ES2019.Array"], // TS需要引用的庫,即聲明文件,es5 默認引用dom、es5、scripthost,如需要使用es的高級版本特性,通常都需要配置,如es8的數組新特性需要引入"ES2019.Array",
      "allowJS": true, // 允許編譯器編譯JS,JSX文件
      "checkJs": true, // 允許在JS文件中報錯,通常與allowJS一起使用
      "outDir": "./dist", // 指定輸出目錄
      "rootDir": "./", // 指定輸出文件目錄(用於輸出),用於控制輸出目錄結構
      "declaration": true, // 生成聲明文件,開啟后會自動生成聲明文件
      "declarationDir": "./file", // 指定生成聲明文件存放目錄
      "emitDeclarationOnly": true, // 只生成聲明文件,而不會生成js文件
      "sourceMap": true, // 生成目標文件的sourceMap文件
      "inlineSourceMap": true, // 生成目標文件的inline SourceMap,inline SourceMap會包含在生成的js文件中
      "declarationMap": true, // 為聲明文件生成sourceMap
      "typeRoots": [], // 聲明文件目錄,默認時node_modules/@types
      "types": [], // 加載的聲明文件包
      "removeComments":true, // 刪除注釋 
      "noEmit": true, // 不輸出文件,即編譯后不會生成任何js文件
      "noEmitOnError": true, // 發送錯誤時不輸出任何文件
      "noEmitHelpers": true, // 不生成helper函數,減小體積,需要額外安裝,常配合importHelpers一起使用
      "importHelpers": true, // 通過tslib引入helper函數,文件必須是模塊
      "downlevelIteration": true, // 降級遍歷器實現,如果目標源是es3/5,那么遍歷器會有降級的實現
      "strict": true, // 開啟所有嚴格的類型檢查
      "alwaysStrict": true, // 在代碼中注入'use strict'
      "noImplicitAny": true, // 不允許隱式的any類型
      "strictNullChecks": true, // 不允許把null、undefined賦值給其他類型的變量
      "strictFunctionTypes": true, // 不允許函數參數雙向協變
      "strictPropertyInitialization": true, // 類的實例屬性必須初始化
      "strictBindCallApply": true, // 嚴格的bind/call/apply檢查
      "noImplicitThis": true, // 不允許this有隱式的any類型
      "noUnusedLocals": true, // 檢查只聲明、未使用的局部變量(只提示不報錯)
      "noUnusedParameters": true, // 檢查未使用的函數參數(只提示不報錯)
      "noFallthroughCasesInSwitch": true, // 防止switch語句貫穿(即如果沒有break語句后面不會執行)
      "noImplicitReturns": true, //每個分支都會有返回值
      "esModuleInterop": true, // 允許export=導出,由import from 導入
      "allowUmdGlobalAccess": true, // 允許在模塊中全局變量的方式訪問umd模塊
      "moduleResolution": "node", // 模塊解析策略,ts默認用node的解析策略,即相對的方式導入
      "baseUrl": "./", // 解析非相對模塊的基地址,默認是當前目錄
      "paths": { // 路徑映射,相對於baseUrl
        // 如使用jq時不想使用默認版本,而需要手動指定版本,可進行如下配置
        "jquery": ["node_modules/jquery/dist/jquery.min.js"]
      },
      "rootDirs": ["src","out"], // 將多個目錄放在一個虛擬目錄下,用於運行時,即編譯后引入文件的位置可能發生變化,這也設置可以虛擬src和out在同一個目錄下,不用再去改變路徑也不會報錯
      "listEmittedFiles": true, // 打印輸出文件
      "listFiles": true// 打印編譯的文件(包括引用的聲明文件)
    }
    

工程引用配置

  • references 指定工程引用依賴

    在項目開發中,有時候我們為了方便將前端項目和后端node項目放在同一個目錄下開發,兩個項目依賴同一個配置文件和通用文件,但我們希望前后端項目進行靈活的分別打包,那么我們可以進行如下配置:

    Project
      - src
        - client //客戶端項目
          - index.ts // 客戶端項目文件
          - tsconfig.json // 客戶端配置文件
            {
              "extends": "../../tsconfig.json", // 繼承基礎配置
              "compilerOptions": {
                "outDir": "../../dist/client", // 指定輸出目錄
              },
              "references": [ // 指定依賴的工程
                {"path": "./common"}
              ]
            }
        - common // 前后端通用依賴工程
          - index.ts  // 前后端通用文件
          - tsconfig.json // 前后端通用代碼配置文件
            {
              "extends": "../../tsconfig.json", // 繼承基礎配置
              "compilerOptions": {
                "outDir": "../../dist/client", // 指定輸出目錄
              }
            }
        - server // 服務端項目
          - index.ts // 服務端項目文件
          - tsconfig.json // 服務端項目配置文件
            {
              "extends": "../../tsconfig.json", // 繼承基礎配置
              "compilerOptions": {
                "outDir": "../../dist/server", // 指定輸出目錄
              },
              "references": [ // 指定依賴的工程
                {"path": "./common"}
              ]
            }
      - tsconfig.json // 前后端項目通用基礎配置
        {
          "compilerOptions": {
            "target": "es5",
            "module": "commonjs",
            "strict": true,
            "composite": true, // 增量編譯
            "declaration": true
          }
        }
    
    這樣配置以后,就可以單獨的構建前后端項目。
    • 前端項目構建
    tsc -v src/client
    
    • 后端項目構建
    tsc -b src/server
    
    • 輸出目錄
    Project
     - dist 
      - client
        - index.js
        - index.d.ts
      - common
        - index.js
        - index.d.ts
      - server
        - index.js
        - index.d.ts


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM