将打字稿路径别名编译为 NPM 发布的相对路径?

Posted

技术标签:

【中文标题】将打字稿路径别名编译为 NPM 发布的相对路径?【英文标题】:Compiling typescript path aliases to relative paths for NPM publishing? 【发布时间】:2018-12-23 12:36:34 【问题描述】:

我有一个使用路径进行导入的typescript project。例如:

"paths": 
  "@example/*": ["./src/*"], 

因此项目可以直接从 using 语句中导入文件,例如:

import  foo  from "@example/boo/foo";

为了发布到 NPM,我正在编译 typescript 文件,然后将结果复制到 dist 文件夹。因此,所有*.d.ts 和相应的*.js 文件都在 dist 文件夹中。我还将package.json 复制到 dist 文件夹中。

我现在通过生成一个新的 typescript 项目然后运行 ​​npm i -S ../example/dist 来测试它,以便安装该项目并尝试运行一些已编译的 typescript 代码。

但是,相对导入不再起作用。例如,如果boo.ts 依赖于foo.ts,它会说它无法解析foo.ts

当我查看*.d.ts 文件时,它们包含的路径与源代码在编译之前使用的路径相同。是否可以将这些转换为相对路径?

更新

我看起来好像为 Node 生成相对路径是 Typescript 不会自动执行的。如果您和我一样喜欢此功能,请提供feedback on this bug report。

【问题讨论】:

【参考方案1】:

作为对 arhnee 建议的简短跟进,截至 2020 年 8 月,微软似乎仍然出于任何原因拒绝实施自定义转换器,因此这些模块仍然相关。

因此,对于未来的读者,您可以通过以下方式实际将 TS 路径别名编译为相对路径。 ttypescript 只是一个转换器框架,需要“路径转换器”才能实际转换 TS 路径别名。因此您需要同时安装ttypescripttypescript-transform-paths

npm i --save ttypescript typescript-transform-paths

然后,只需将以下属性添加到tsconfig.json 中的compilerOptions 对象,即可轻松指定用法:

    "plugins": [
       "transform": "typescript-transform-paths" 
    ]

最后,运行 ttsc 而不是 tsc

【讨论】:

【参考方案2】:

有一个名为ttypescript 的项目可供您使用。如果您将它与模块 typescript-transform-paths 一起使用,我相信它会实现您想要的。

【讨论】:

以上是关于将打字稿路径别名编译为 NPM 发布的相对路径?的主要内容,如果未能解决你的问题,请参考以下文章

如何修复 eslint 抱怨打字稿的路径别名

打字稿无法解析导入中的非相对路径

带有 vscode 的打字稿路径在 ctrl 单击时解析错误

如何定义相对于某个根的打字稿导入路径(使用webpack)?

打字稿路径在 Express 项目中不起作用

Eslint + typescript 路径别名 - 无法解析模块的路径