2017-10-11 157 views
1

我的項目結構是 的src/ 客戶端/ 模塊/ 服務器/ app.ts的baseUrl tsconfig.json不起作用


src/ 
    client/ 
    modules/ 
    DB/ 
    server/ 
    app.ts 
tsconfig.json 

我導入使用非親屬導入模塊在app.ts文件

import * as DB from '@modules/DB'; 

,因爲我不想使用from "../modules/DB"

和我tsconfig.json是

{ 
"compileOnSave": true, 
"compilerOptions": { 
    "module": "commonjs", 
    "target": "ES6", 
    "noImplicitAny": true, 
    "sourceMap": true, 
    "preserveConstEnums": true, 
    "emitDecoratorMetadata": true, 
    "experimentalDecorators": true, 
    "removeComments": true, 
    "traceResolution": true, 
    "rootDir": "./src", 
    "outDir": "./dist", 
    "declaration": true, 
    "typeRoots": [ 
     "/" 
    ], 
    "baseUrl": "./src", 
    "paths": { 
     "@modules/*": [ 
      "modules/*" 
     ] 
    } 
}, 
"exclude": [ 
    "src/client/" 
] 

}

當我跟蹤的分辨率,得到這個

======== Module name '@modules/DB' was successfully resolved to '/Users/pengju/projects/pomelo-ts-starter/src/modules/DB/index.ts'. ======== 

似乎successfuly導入

但在編譯時, vscode仍然有錯誤

[ts] Cannot find module '@modules/DB'. 

import * as DB from '@modules/DB';在app.ts

然後我檢查編譯app.js, 找到const DB = require("@modules/DB");

的的baseUrl和路徑選擇,無法改變 「@模塊/ DB」,以」 ../模塊/ DB「?那麼,他們做了什麼?

回答

0

這裏的問題在於TypeScript編譯器不會更新您的JS文件中的路徑,JavaScript引擎對TypeScript配置一無所知,您在tsconfig中指定的內容僅在編譯時使用,將TypeScript轉換爲JS,您需要像TS編譯器一樣執行相同的工作,但將解析後的路徑保存在JS文件中。

簡而言之,所有的JS文件需要被處理,別名被替換爲「真實」的路徑。

人們通常認爲的WebPack這是一個怪物,還有一個叫tspath非常簡單的工具,你的項目目錄中運行,它會讀取你的tsconfig.json並據此更新JS源文件!

安裝tspath一個npm工具來解析ts路徑注意:tspath需要一個非常近似的節點!

npm install -g tspath 

已運行後的打字稿編譯器,從你的項目目錄,運行:

tspath 

tspath -f 

跳過提示!

閱讀更多:https://www.npmjs.com/package/tspath