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

Ole*_*Ole 10 javascript node.js npm typescript

我有一个使用导入路径的打字稿项目。例如:

"paths": {
  "@example/*": ["./src/*"], 
}
Run Code Online (Sandbox Code Playgroud)

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

import { foo } from "@example/boo/foo";
Run Code Online (Sandbox Code Playgroud)

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

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

然而,相对进口不再起作用。例如,如果boo.ts取决于foo.ts它会说它无法解析foo.ts

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

更新

我看起来好像为 Node 生成相对路径是 Typescript 不会自动执行的。如果您像我一样喜欢此功能,请提供有关此错误报告的反馈

qiu*_*qiu 8

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

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

npm i --save ttypescript typescript-transform-paths
Run Code Online (Sandbox Code Playgroud)

然后,通过将以下属性添加到compilerOptions对象中来指定用法很简单tsconfig.json

    "plugins": [
      { "transform": "typescript-transform-paths" }
    ]
Run Code Online (Sandbox Code Playgroud)

最后,运行ttsc而不是tsc.


arh*_*nee 6

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