首页 > 解决方案 > 如何使 TypeScript 路径图在生产代码中有用?

问题描述

我一直在从事我的 TypeScript 项目,并想解决相关的导入../../../地狱问题。我发现tsconfig.json我可以指定baseUrlandpaths字段,这样当我将这样的片段添加到时我../../../../interface可以变得简单:@interfacetsconfig.json

    "baseUrl": ".",
    "paths": {
      "@interface" : ["src/interface"],
    },

这很好用……有一段时间了。我用较短的版本交换了导入语句中的长路径。VSCode 很好理解路径映射和编码变得更容易。当我最终想测试应用程序时,我使用tsc命令编译了代码。当我想运行它时,我得到了错误:

Error: Cannot find module '@interface'

我检查了输出的 JavaScript 代码,发现导入中的路径没有被编译器交换,正如我所期望的,但它只是以与.ts文件中相同的形式使用:

const _interface_1 = require("@interface");

从 2018 年 8 月起,我在 TS GitHub 上发现了一个问题,询问完全相同的事情。到目前为止,还没有一个令人满意的解决方案。

我的问题是:如手册中所述,TypeScript 中路径映射的用例是什么?如果它们最终使生产代码无法运行,那么使用它们有什么意义?

标签: typescripttsconfig

解决方案


我也同意 Aviad 提出的评论,但没有评判。如果你必须这样做,那么这里有一个方法:

将模块添加module-alias到您的依赖项。然后也将映射添加到 package.json:

"_moduleAliases": {
    "@interface": "dist/interface", // note its referencing dist folder
},

然后在你的主 ts 文件中。例如index.ts,使用注册模块别名import "module-alias/register";

在这里你可以阅读更多关于它的信息


推荐阅读