typescript - 如何使 TypeScript 路径图在生产代码中有用?
问题描述
我一直在从事我的 TypeScript 项目,并想解决相关的导入../../../
地狱问题。我发现tsconfig.json
我可以指定baseUrl
andpaths
字段,这样当我将这样的片段添加到时我../../../../interface
可以变得简单:@interface
tsconfig.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 中路径映射的用例是什么?如果它们最终使生产代码无法运行,那么使用它们有什么意义?
解决方案
我也同意 Aviad 提出的评论,但没有评判。如果你必须这样做,那么这里有一个方法:
将模块添加module-alias
到您的依赖项。然后也将映射添加到 package.json:
"_moduleAliases": {
"@interface": "dist/interface", // note its referencing dist folder
},
然后在你的主 ts 文件中。例如index.ts
,使用注册模块别名import "module-alias/register";
推荐阅读
- azure-service-fabric - Service Fabric - 分发内存缓存
- python - Python Docker:在 python docker 中以编程方式获取容器内存使用情况、CPU 百分比
- highcharts - Highcharts wrap 不是一个函数
- python - 当我运行我的代码时,它会打开窗口但不显示图像
- php - php5. 是否可以以某种方式并行运行 2 个功能?
- python - 为什么我的列表不能直接存储对象?(我的列表只是创建和存储一个元组,元组存储对象)
- javascript - vuetify v-menu 组件中的激活器插槽重新定义
- oracle - 全部插入
- apache - 动态附件文件名
- java - Why does Retrofit use Interface instead of a normal java class?