如何产生单个* .d.ts或具有相对路径的多个

时间:2019-05-11 14:40:16

标签: javascript typescript webpack babel ts-loader

问题

[仅感染打字稿库创建者]

如果代码库包含绝对路径(通过配置tsconfig.json和webpack),则Typescript编译器将生成具有相同绝对路径的所有d.ts文件,这些路径是无用的,因为我的lib使用者无法使用和他们在一起。


解决方法

看到的每个图书馆都在执行以下其中一项操作:

  1. 手动创建自己的single-file.d.ts文件
  2. 在代码库中使用相对路径,因此输出的d.ts文件也包含相对路径。

很显然,这两种选择都很糟糕。


我考虑过的其他解决方案

  1. 创建一个d.ts文件(不会导入任何文件)。

我找不到适合的工作库。

  1. 不确定是否可行:在运行ts-loader之前,我们需要运行魔术babel-plugin,通过查看webpack.config文件中的webpack-resolve-module部分将每个绝对路径转换为亲戚。 li>

我当前的状态

我创建了一个库,该库生成具有绝对路径的损坏的d.ts文件:

https://github.com/stavalfi/lerna-yarn-workspaces-example/tree/master/packages/x-core

index.ts:

import { z, x } from 'shalom'     // problem
export default function awesomeFn(y: number): x {
  return z(1)
}

export { z, x } from './shalom' . // not a problem

生成的index.d.ts:

import { x } from './shalom';     /// GOOD - becuase I used relative
export default function awesomeFn(y: number): x;
export { z, x } from 'shalom';    /// BAD - because I used absolute
//# sourceMappingURL=index.d.ts.map .   

问题

是否存在不停止使用绝对路径或手动创建自己的single.d.ts文件的解决方案/解决方法?

1 个答案:

答案 0 :(得分:0)

如果任何打字稿库创建者仍然存在此问题,我为babel-plugin-module-resolver创建了一个Webpack加载器,它将绝对路径转换为相对路径: https://github.com/stavalfi/babel-plugin-module-resolver-loader

它还通过将绝对路径的*.d.ts文件转换为相对路径来解决问题。


您可能希望订阅/阅读此线程以获取其他解决方法: https://github.com/Microsoft/TypeScript/issues/15479