Rozważmy prosty projekt maszynopis z następującej struktury katalogów:Jak uzyskać tsc do rozwiązywania bezwzględnych ścieżek podczas importowania modułów przy użyciu baseUrl?
| package.json
| tsconfig.json
|
\---src
| app.ts
|
\---foobar
Foo.ts
Bar.ts
tsconfig.json
został skonfigurowany tak, aby mieć ./src/
być baseUrl
.
{
"compilerOptions": {
"module": "commonjs",
"target": "es6",
"noImplicitAny": true,
"removeComments": true,
"preserveConstEnums": true,
"outDir": "./dist/",
"baseUrl": "./src/"
},
"include": [
"./src/**/*"
],
"exclude": [
"node_modules"
]
}
Teraz przypuśćmy, że chcemy importować Foo
w Bar.ts
. W moim rozumieniu jest to, że przez ustawienie baseUrl
, możemy teraz używać ścieżek bezwzględnych importować moduły
import { Foo } from 'foobar/Foo'
w przeciwieństwie do względnych ścieżek
import { Foo } from './Foo'
Jeśli moje rozumienie jest poprawne, kompilator maszynopis powinien być w stanie automatycznie rozwiązuje foobar/Foo
do ./Foo
podczas kompilowania Bar.ts
.
import { Foo } from 'foobar/Foo';
export class Bar {
foo: Foo;
constructor(num: number) {
this.foo = new Foo(num);
}
}
Uruchamianie tsc
kompiluje bez błędów. Jednak gdy przyjrzymy się kompilacji Bar.js
, zobaczymy, że ścieżka nie została poprawnie rozwiązana, co dałoby nam błąd Nie można znaleźć modułu, jeśli chcemy go uruchomić.
"use strict";
const Foo_1 = require("foobar/Foo");
class Bar {
constructor(num) {
this.foo = new Foo_1.Foo(num);
}
}
exports.Bar = Bar;
Więc moje pytanie brzmi: Jak mogę dostać tsc
poprawnie rozwiązać bezwzględne ścieżki podczas importowania modułów za pomocą baseUrl
? A jeśli to nie jest coś, co da się zrobić, jaki jest cel tego baseUrl
?
Dzięki!Innymi słowy, 'tsc' nie jest odpowiedzialny za przekształcenie ścieżki bezwzględnej w ścieżkę względną, a ja mam skonfigurować moduł ładujący modułu, aby go rozwiązać? Jeśli tak, to czy istnieje sposób, aby zamiast tego 'tsc' po prostu przekształcił się w ścieżkę względną? – Zsw
Nie, o ile mi wiadomo, 'tsc' nie konwertuje ścieżek dla ciebie. Jeśli to możliwe, łatwiej będzie użyć ścieżek w twoim poleceniu 'import', które jest zgodne z twoją specyfikacją/konfiguracją modułu ładowania modułów, a następnie użyj różnych opcji kompilatora, aby powiedzieć' tsc' jak odpowiednio rozwiązać nazwy modułów. – Seamus
@Zsw Alternatywnie, wypróbuj opcję kompilatora "outFile". Łączy moduły w jednym wyjściu: https://github.com/Microsoft/TypeScript/wiki/What%27s-new-in-TypeScript#concatenate-amd-and-system-modules-with---outfile – Seamus