2016-06-15 40 views
0

外面我有一個文件結構這樣一個項目:TSC與allowJs編譯它自己的編譯JS ROOTDIR

package.json 
webpack.config.json 
tsconfig.json 
src/ 
assets/ 
node_modules/ 
compiled/ 
etc/ 

我所有的源代碼(的.js.ts文件的混合物)是src和我所有的編譯後的輸出應該在compiled。我tsconfig.json看起來是這樣的:

{ 
    "compilerOptions": { 
    "module": "commonjs", 
    "target": "es5", 
    "rootDir": "./src/", 
    "outDir": "./compiled/", 
    "allowJs": true 
    }, 
    "exclude": ["node_modules"] 
} 

當我運行TSC讓我吃驚,也嘗試編譯它自己的編譯後的輸出在compiled目錄,即使這是rootDir外面,因爲allowJs激活,它漂亮無休止地重新編譯自己發射的JS,創建compiled/compiled/compiled/compiled/目錄。

我認爲rootDir會限制要編譯到根目錄的文件。我可以將「已編譯」添加到exclude,但rootDir之外的其他文件夾還包含JS(其他構建工具等),所有這些文件夾都被不期望地編譯和輸出,並且啓用了allowJs ...必須明確排除所有內容還是沒有辦法明確限制編譯器輸入到src的路徑?

回答

1

我認爲--rootDir不會做你認爲它所做的事情 - 它允許更多地控制輸出目錄結構(或多或少地強制它匹配輸入目錄結構而不是聰明)。

文檔有關參數(由tsconfig.json模式):

指定的輸入文件的根目錄。使用--outDir來控制輸出 目錄結構。

實現該選項

拉動請求描述:https://github.com/Microsoft/TypeScript/pull/2772

使用--outDir就是 複製的 值下的輸出的輸入結構時編譯器的當前行爲--outDir 。輸入的根被計算爲所有源(.ts而非.d.ts)文件的最長公共路徑。所以輸入 FolderA \ FolderB \ 1.ts和FolderA \ FolderB \ 2.ts將導致 將commonSourceRoot計算爲FolderA \ FolderB。現在如果將新文件 FolderA \ 3.ts添加到輸入中,commonSourceRoot將彈出 到FolderA。

還有一個很好的解釋和示例:https://github.com/Microsoft/TypeScript/issues/287

+0

這是有道理的,我絕對不明白rootDir'的'目的。那麼是否沒有辦法使用'tsconfig.json'來限制編譯器輸入到目錄路徑? – Aaron

+1

@Aaron看來你只能'排除'目錄或者使用'files'來包含特定的單個文件。 'tsconfig.json'文件也可以放在除root之外的子文件夾中。 –

+0

明白了。謝謝你的幫助! – Aaron