2017-02-13 37 views
2

tl; dr:模塊分辨率不適用?Typescript2路徑模塊分辨率

你好,

我正在玩Typescript2模塊分辨率功能。

我注意到,現在可以指定 「路徑」,這樣就可以做到以下幾點:

老辦法

import {a} from "../../../foo" 

新方式

import {a} from "services/foo" 

要做到這一點,你需要添加一些配置到你的tsconfig.json

"compilerOptions": { 
     "baseUrl": ".", 
     "paths": { 
      "services/*": ["./application/core/services/*"], 
     } 
    } 

問題是我編譯時導入實際上沒有改變。我的JavaScript輸出仍然包含從「services/foo」導入,所以在運行時顯然會在我的節點服務器上崩潰。

我用一口-打字稿編譯我的javascript文件:

var tsProject = ts.createProject("tsconfig.json"); 
return tsProject.src() 
    .pipe(sourcemaps.init()) 
    .pipe(tsProject()).js 
    .pipe(sourcemaps.write("../api")) 
    .pipe(gulp.dest(function(file) { 
     return file.base; 
})); 

我完全失去了這裏,並願意使用該模塊的分辨率,這樣我可以從移開../../地獄的進口。任何幫助將不勝感激!

回答

1

這裏的問題是,JavaScript引擎對TypeScript配置一無所知,您在tsconfig中指定的內容僅用於「編譯時」,當您將TypeScript編譯爲JS時,您需要執行與TS編譯器只是將解析後的路徑保存在JS文件中。

簡而言之,所有的JS文件需要被處理,別名被替換爲「真實」的路徑。提示:使用npm工具tspath(https://www.npmjs.com/package/tspath),它需要0配置,只需在項目中的某處運行它,所有JS文件將被處理並準備運行!