Typescript2路径模块解析

10

简述:模块解析没有应用?

你好,

我正在尝试使用Typescript2模块解析功能。

我注意到现在可以指定“路径”,这样你就可以按照以下方式进行操作:

旧的方式

import {a} from "../../../foo"

新方式

import {a} from "services/foo"

为了做到这一点,您需要在tsconfig.json中添加一些配置。
    "compilerOptions": {
        "baseUrl": ".",
        "paths": {
            "services/*": ["./application/core/services/*"],
        }
    }

我遇到的问题是,当编译时,导入实际上并没有改变。我的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;
}));

我完全迷失了,在这里,我希望能够使用该模块的解析功能,以便可以摆脱那些烦人的导入路径 "../../"。非常感谢您的任何帮助!
1个回答

7
这里的问题是JavaScript引擎对你的TypeScript配置一无所知,你在tsconfig中指定的内容仅在“编译时”使用,当你将TypeScript编译为JS后,需要完成与TS编译器相同的工作,以便在JS文件中保存已解析的路径。
简单来说,所有JS文件都需要被处理,并用“真实”的路径替换别名。
提示:使用npm工具tspath(https://www.npmjs.com/package/tspath),它不需要任何配置,只需在项目中运行它,所有JS文件都将被处理并准备好运行!

4
在 TypeScript 3 及以上版本中,这个问题是否仍然存在?我也遇到了同样的问题。 - AHonarmand
@AHonarmand 是的,我现在也遇到了同样的问题。 - alex55132
我不得不使用Babel。我无法仅使用TypeScript解决这个问题。 - AHonarmand
这位大佬提到了 tsconfig-paths,对我来说非常完美(更不用说每周 700 万次下载量了)https://github.com/microsoft/TypeScript/issues/26722#issuecomment-501912653 - SnekNOTSnake
另一个选项是使用module-alias。它在运行时工作,因此不需要运行任何东西。只需在代码的入口点导入即可。 - danb4r

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接