2016-08-15 23 views
0

我有一個TypeScript項目,可以將生成的JavaScript文件生成爲./src/。這在對現有的npm模塊構建時非常合適(它是一個Angular 2項目,因此可以導入這些模塊,但在這種情況下我認爲不重要)。當我安裝一個特定的npm模塊(ng2-dynamic-dialog,其中我是作者)並從該模塊導入任何東西時,tsc突然將JavaScript構建到不同的文件夾(而不是將其構建到./src/,現在正在構建到./src/src/),它還在./src/中創建了一個node_modules文件夾的副本,其中只包含ng2-dynamic-dialog。TypeScript - 導入外部npm模塊導致tsc的輸出文件夾發生變化

這可能不是一個偉大的explination所以這裏有個例子 https://github.com/leewinder/ng2-dynamic-dialog(SHA - 8ef439d6)如果克隆的開發分支,在./samples運行TSC你會看到

的JS文件正確構建到./src。如果打開src/samples/samples.component.ts並取消註釋'ng2-dynamic-dialog'中的'import {Ng2DynamicDialogComponent}'行;''並再次運行TSC,你會看到的src /現在包含./src/src和./src/node_modules

我tsconfig.json設置如下

{ 
    "compilerOptions": { 
    "target": "es5", 
    "outDir": "src/", 
    "module": "commonjs", 
    "moduleResolution": "node", 
    "sourceMap": true, 
    "emitDecoratorMetadata": true, 
    "experimentalDecorators": true, 
    "removeComments": false, 
    "noImplicitAny": false, 
    "watch": true, 
    "diagnostics": true, 
    "listFiles": true 
    } 
} 

如果我改變「OUTDIR '到./,那麼這個重複的文件夾問題不再發生,但爲什麼會引用這個單一的npm包導致這個問題?

無論我是否將我的NPM模塊添加到systemjs.config.js中,都會發生此問題,因此它似乎與此無關。

我只能假設有我的配置或我的npm包的東西,但npm包似乎很好。

npm包的源代碼與上述相同,但在開發文件夾中。

任何幫助將被認真讚賞,因爲我現在正在對着磚牆撞我的頭。

回答

2

導入外部NPM模塊使TSC的輸出文件夾改變

使用compilerOptions.baseDir選項在基目錄,而不是它被確定神奇鎖定。

+0

未識別baseDir,但確實識別到compilerOptions.rootDir。將rootDir設置爲src /,而_removing_ compilerOptions.outDir似乎解決了這個問題。將_Dir設置爲_anything_導致與OP中所述相同的問題。 –