Typescript2 路径模块解析

Sta*_*erd 5 node.js typescript gulp gulp-typescript typescript2.0

tl;dr:模块分辨率不适用?

你好,

我正在玩 Typescript2 模块解析功能。

我注意到现在可以指定“路径”,以便您可以执行以下操作:

老办法

import {a} from "../../../foo"
Run Code Online (Sandbox Code Playgroud)

新方法

import {a} from "services/foo"
Run Code Online (Sandbox Code Playgroud)

为此,您需要在 tsconfig.json 中添加一些配置

    "compilerOptions": {
        "baseUrl": ".",
        "paths": {
            "services/*": ["./application/core/services/*"],
        }
    }
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是,编译时,导入实际上并没有改变。我的 javascript 输出仍然包含从“services/foo”导入的内容,因此在我的节点服务器上运行时显然会崩溃。

我使用 gulp-typescript 来编译我的 javascript 文件:

var tsProject = ts.createProject("tsconfig.json");
return tsProject.src()
    .pipe(sourcemaps.init())
    .pipe(tsProject()).js
    .pipe(sourcemaps.write("../api"))
    .pipe(gulp.dest(function(file) {
        return file.base;
}));
Run Code Online (Sandbox Code Playgroud)

我完全迷失在这里,很想使用那个模块分辨率,这样我就可以摆脱 ../../ 地狱的进口。任何帮助将不胜感激!

Pat*_*erg 7

这里的问题是 JavaScript 引擎对你的 TypeScript 配置一无所知,你在 tsconfig 中指定的内容仅用于“编译时”,当你将 TypeScript 编译成 JS 时,你需要做与 TS 编译器相同的工作,但是将解析后的路径保存在JS文件中。

简而言之,所有 JS 文件都需要处理,并将别名替换为“真实”路径。

提示:使用npm工具tspath(https://www.npmjs.com/package/tspath),它需要0配置,只需在项目中的某个位置运行它,所有JS文件将被处理并准备运行!

  • 对于 TypeScript 3 及更高版本,这在 2020 年仍然是一个问题吗?我也有同样的问题。 (4认同)