在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