考虑一个简单的打字稿项目用下面的目录结构:如何让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