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

在TS的項目中,TS最終都會被編譯JS文件執(zhí)行件相,TS編譯器在編譯TS文件的時候都會先在項目根目錄的tsconfig.json文件再扭,根據(jù)該文件的配置進行編譯,默認(rèn)情況下夜矗,如果該文件沒有任何配置泛范,TS編譯器會默認(rèn)編譯項目目錄下所有的.ts、.tsx紊撕、.d.ts文件罢荡。實際項目中,會根據(jù)自己的需求進行自定義的配置对扶,下面就來詳細(xì)了解下tsconfig.json的文件配置区赵。

文件選項配置

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

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

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

    默認(rèn)排除node_modules文件夾下文件

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

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

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

    "compileOnSave": true
    

編譯選項配置

  • compilerOptions:配置編譯選項

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

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

工程引用配置

  • references 指定工程引用依賴

    在項目開發(fā)中粮彤,有時候我們?yōu)榱朔奖銓⑶岸隧椖亢秃蠖?code>node項目放在同一個目錄下開發(fā)根穷,兩個項目依賴同一個配置文件和通用文件,但我們希望前后端項目進行靈活的分別打包导坟,那么我們可以進行如下配置:

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

更多干貨內(nèi)容請關(guān)注微信公眾號:


柒葷捌素.jpg
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末惫周,一起剝皮案震驚了整個濱河市尘惧,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌递递,老刑警劉巖喷橙,帶你破解...
    沈念sama閱讀 211,639評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件啥么,死亡現(xiàn)場離奇詭異,居然都是意外死亡贰逾,警方通過查閱死者的電腦和手機悬荣,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來疙剑,“玉大人氯迂,你說我怎么就攤上這事『搜浚” “怎么了囚戚?”我有些...
    開封第一講書人閱讀 157,221評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長轧简。 經(jīng)常有香客問我驰坊,道長,這世上最難降的妖魔是什么哮独? 我笑而不...
    開封第一講書人閱讀 56,474評論 1 283
  • 正文 為了忘掉前任拳芙,我火速辦了婚禮,結(jié)果婚禮上皮璧,老公的妹妹穿的比我還像新娘舟扎。我一直安慰自己,他們只是感情好悴务,可當(dāng)我...
    茶點故事閱讀 65,570評論 6 386
  • 文/花漫 我一把揭開白布睹限。 她就那樣靜靜地躺著,像睡著了一般讯檐。 火紅的嫁衣襯著肌膚如雪羡疗。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,816評論 1 290
  • 那天别洪,我揣著相機與錄音叨恨,去河邊找鬼。 笑死挖垛,一個胖子當(dāng)著我的面吹牛痒钝,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播痢毒,決...
    沈念sama閱讀 38,957評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼送矩,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了哪替?” 一聲冷哼從身側(cè)響起栋荸,我...
    開封第一講書人閱讀 37,718評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后蒸其,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體敏释,經(jīng)...
    沈念sama閱讀 44,176評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,511評論 2 327
  • 正文 我和宋清朗相戀三年摸袁,在試婚紗的時候發(fā)現(xiàn)自己被綠了钥顽。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,646評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡靠汁,死狀恐怖蜂大,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蝶怔,我是刑警寧澤奶浦,帶...
    沈念sama閱讀 34,322評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站踢星,受9級特大地震影響澳叉,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜沐悦,卻給世界環(huán)境...
    茶點故事閱讀 39,934評論 3 313
  • 文/蒙蒙 一成洗、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧藏否,春花似錦瓶殃、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至淆储,卻和暖如春冠场,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背遏考。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評論 1 266
  • 我被黑心中介騙來泰國打工慈鸠, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蓝谨,地道東北人灌具。 一個月前我還...
    沈念sama閱讀 46,358評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像譬巫,于是被迫代替她去往敵國和親咖楣。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,514評論 2 348

推薦閱讀更多精彩內(nèi)容