jsconfig是什么层玲?
按照VSCode官網(wǎng)上的說法:
目錄中存在jsconfig.json文件表示該目錄是JavaScript項目的根目錄号醉。jsconfig.json文件指定根文件和JavaScript語言服務(wù)提供的功能選項反症。
同時做出了兩點提示:
提示:如果您不使用JavaScript,則無需擔(dān)心jsconfig.json畔派。
提示:jsconfig.json源于tsconfig.json铅碍,是TypeScript的配置文件。jsconfig.json相當(dāng)于tsconfig.json的“allowJs”屬性設(shè)置為true线椰。
從以上可以看出jsconfig.json文件是為了指明當(dāng)前所在的是一個JavaScript項目该酗,同時為這個項目聲明一些特性,比如這個項目包括哪些文件士嚎,不包括那些文件呜魄,要不要使用類庫文件,使用的模塊系統(tǒng)等等莱衩。
同時它和tsconfig.json是一樣的功效爵嗅,不需要同時擁有他們兩個。(可以理解為tsconfig是jsconfig的超集笨蚁,就和ts與js的關(guān)系一樣睹晒。)
jsconfig和d.ts對比
實際上我認(rèn)為jsconfig和d.ts并不是同一緯度的東西。
1. 功能不同
jsconfig是聲明VSCode如何處理一個項目括细,而d.ts則僅為js代碼聲明了對應(yīng)的類型伪很。
雖然jsconfig同樣進(jìn)行了相應(yīng)的配置之后,我們也可以得到代碼提示奋单。但是實際上這里的提示只是因為其通知VSCode也要將對應(yīng)的庫納入其掃描的范圍內(nèi)锉试。實際上庫上的js對象并沒有被添加類型。
2. 對象不同
jsconfig配置的對象是當(dāng)前所在的項目览濒,也只為當(dāng)前所在的項目提供了代碼提示呆盖。而d.ts提供類型的對象不僅可以對當(dāng)前項目生效,同時也會對使用當(dāng)前庫的項目起作用贷笛。
總的來說
總的來說应又,jsconfig和d.ts并不是同一維度的東西,
jsconfig當(dāng)中默認(rèn)是去除node_modules文件夾的乏苦,當(dāng)我們主動將這個文件夾包含在我們的項目當(dāng)中VSCode會把這個文件夾也放入我們的掃描動作當(dāng)中去株扛,因此我們可以獲得引用一個npm庫與引用一個自己寫的文件一樣的體驗。而對于d.ts汇荐,在你引用一個庫時洞就,發(fā)現(xiàn)有d.ts文件會自動將他的信息掃描進(jìn)來。
如果僅對比jsconfig提供的代碼提示(實際上就是VSCode提供的代碼提示)和d.ts提供的話:
jsconfig的更加便捷拢驾,只需要編寫一個配置文件奖磁。
d.ts的更標(biāo)準(zhǔn),它會作用于大部分編輯器而jsconfig目前只有VSCode支持繁疤。
擴(kuò)展性更強(qiáng)咖为,受制于VSCode的IntelliSense解析功能秕狰,如果沒有支持用戶也無法去修改。而d.ts是可以自主修改的躁染。
幾個問題
- 能配置自動跳轉(zhuǎn)到源代碼而不是編譯后代碼的方法嘛鸣哀?
暫時沒有找到相關(guān)的配置。同時我們可以猜想吞彤,怎么建立源代碼到編譯后代碼的聯(lián)系我衬?答案是source map,但是目前編輯器還沒有對source map產(chǎn)生支持饰恕。因此應(yīng)該是無法實現(xiàn)的挠羔。同時,jsconfig的代碼提示和d.ts的代碼提示原理是一致的埋嵌,而現(xiàn)在我們用到過的庫都沒能提供這種直接跳轉(zhuǎn)源代碼的能力破加。這也是無法實現(xiàn)的一個佐證。
- 現(xiàn)在jsconfig配置的效果和使用js2dt生成的d.ts是一樣的雹嗦,我們還需要去寫d.ts嘛范舀?
我認(rèn)為是需要的。jsconfig配置之后需要達(dá)到非常好的效果是需要在源碼上寫jsdoc的(js2dt生成也是),而對于生成的d.ts你只需要對d.ts文件做一些修改就好了了罪,這是非侵入性的更改锭环。