Рассмотрим простой проект машинопись со следующей структурой каталогов:Как получить 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"
]
}
Теперь предположим, что мы хотим импортировать Foo
в Bar.ts
. Я понимаю, что, установив baseUrl
, теперь мы можем использовать абсолютные пути для импорта модулей
import { Foo } from 'foobar/Foo'
в отличие от относительных путей
import { Foo } from './Foo'
Если я правильно понимаю, машинопись компилятор должен быть в состоянии автоматически разрешает foobar/Foo
до ./Foo
при компиляции Bar.ts
.
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' не будет конвертировать пути для вас. Если возможно, будет проще использовать пути в вашем заявлении 'import', которые соответствуют вашему загрузчику модуля spec/config, а затем использовать различные параметры компилятора, чтобы сообщить' tsc', как правильно разрешить имена модулей. – Seamus
@Zsw В качестве альтернативы выберете опцию компилятора «outFile». Он объединит модули в один вывод: https://github.com/Microsoft/TypeScript/wiki/What%27s-new-in-TypeScript#concatenate-amd-and-system-modules-with---outfile – Seamus