如何使 TypeScript 路径映射在生产代码中有用?
How to make the TypeScript path maps useful in the production code?
我一直在处理我的 TypeScript 项目,想解决相对导入 ../../../
地狱般的问题。我发现在 tsconfig.json
中我可以指定 baseUrl
和 paths
字段,这样当我将这样的片段添加到tsconfig.json
:
"baseUrl": ".",
"paths": {
"@interface" : ["src/interface"],
},
效果很好……有一段时间了。我用较短的版本交换了导入语句中的长路径。 VSCode 很友好地理解了路径映射和编码变得更容易。当我最终想测试该应用程序时,我使用 tsc
命令编译了代码。当我想 运行 它时,我得到了错误:
Error: Cannot find module '@interface'
我检查了输出 JavaScript 代码,发现导入中的路径没有像我预期的那样被编译器交换,但它只是以与 .ts
文件:
const _interface_1 = require("@interface");
我发现 an issue on TS GitHub from August 2018 问的是完全相同的事情。直到现在还没有一个令人满意的解决方案。
我的问题是:TypeScript 中路径映射的用例是什么 as described in the manual?如果它们最终使生产代码无法 运行nable,那么使用它们有什么意义?
我也同意 Aviad 发表的评论,但没有做出判断。如果你必须这样做,那么这里有一个方法:
将模块 module-alias
添加到您的依赖项中。然后也将映射添加到 package.json:
"_moduleAliases": {
"@interface": "dist/interface", // note its referencing dist folder
},
然后在你的主ts文件中。例如index.ts
,使用import "module-alias/register";
注册模块别名
我一直在处理我的 TypeScript 项目,想解决相对导入 ../../../
地狱般的问题。我发现在 tsconfig.json
中我可以指定 baseUrl
和 paths
字段,这样当我将这样的片段添加到tsconfig.json
:
"baseUrl": ".",
"paths": {
"@interface" : ["src/interface"],
},
效果很好……有一段时间了。我用较短的版本交换了导入语句中的长路径。 VSCode 很友好地理解了路径映射和编码变得更容易。当我最终想测试该应用程序时,我使用 tsc
命令编译了代码。当我想 运行 它时,我得到了错误:
Error: Cannot find module '@interface'
我检查了输出 JavaScript 代码,发现导入中的路径没有像我预期的那样被编译器交换,但它只是以与 .ts
文件:
const _interface_1 = require("@interface");
我发现 an issue on TS GitHub from August 2018 问的是完全相同的事情。直到现在还没有一个令人满意的解决方案。
我的问题是:TypeScript 中路径映射的用例是什么 as described in the manual?如果它们最终使生产代码无法 运行nable,那么使用它们有什么意义?
我也同意 Aviad 发表的评论,但没有做出判断。如果你必须这样做,那么这里有一个方法:
将模块 module-alias
添加到您的依赖项中。然后也将映射添加到 package.json:
"_moduleAliases": {
"@interface": "dist/interface", // note its referencing dist folder
},
然后在你的主ts文件中。例如index.ts
,使用import "module-alias/register";