考慮一個簡單的打字稿項目用下面的目錄結構:如何讓tsc在使用baseUrl導入模塊時解析絕對路徑?
| package.json
| tsconfig.json
|
\---src
| app.ts
|
\---foobar
Foo.ts
Bar.ts
tsconfig.json
已經被配置爲擁有./src/
是baseUrl
。
{
"compilerOptions": {
"module": "commonjs",
"target": "es6",
"noImplicitAny": true,
"removeComments": true,
"preserveConstEnums": true,
"outDir": "./dist/",
"baseUrl": "./src/"
},
"include": [
"./src/**/*"
],
"exclude": [
"node_modules"
]
}
現在假設我們要在Bar.ts
進口Foo
。我的理解是,通過設置baseUrl
,現在我們可以使用絕對路徑來導入模塊
import { Foo } from 'foobar/Foo'
,而不是相對路徑
import { Foo } from './Foo'
如果我的理解是正確的,打字稿編譯器應該能夠當編譯Bar.ts
時自動解決foobar/Foo
到./Foo
。
import { Foo } from 'foobar/Foo';
export class Bar {
foo: Foo;
constructor(num: number) {
this.foo = new Foo(num);
}
}
運行tsc
編譯沒有錯誤。但是,當我們看看編譯的Bar.js
時,我們會看到路徑沒有被正確解析,這會給我們一個如果我們要運行它,找不到模塊錯誤。
"use strict";
const Foo_1 = require("foobar/Foo");
class Bar {
constructor(num) {
this.foo = new Foo_1.Foo(num);
}
}
exports.Bar = Bar;
所以我的問題是:我怎樣才能得到tsc
正確解析絕對路徑使用baseUrl
導入模塊的時候?或者如果這不是可以做到的事情,那麼baseUrl
的目的是什麼?
謝謝!換句話說,'tsc'不負責將絕對路徑轉換爲相對路徑,我應該配置模塊加載器來解析它。如果是這樣的話,有沒有辦法讓'tsc'簡單地轉換爲相對路徑呢? – Zsw
不,據我所知,'tsc'不會爲你轉換路徑。如果可能的話,在符合模塊加載器spec/config的'import'語句中使用路徑會更容易,然後使用各種編譯器選項來告訴'tsc'如何相應地解析模塊名稱。 – Seamus
@Zsw作爲替代方案,請檢出「outFile」編譯器選項。它將連接模塊到單個輸出中:https://github.com/Microsoft/TypeScript/wiki/What%27s-new-in-TypeScript#concatenate-amd-and-system-modules-with---outfile – Seamus