javascript - 如何使用相对路径生成单个 *.d.ts 或多个
问题描述
问题
[它只感染打字稿库创建者]
如果代码库包含绝对路径(通过配置tsconfig.json
和 webpack),那么 typescript 编译器将生成所有具有相同绝对路径的 d.ts 文件,这些文件是无用的,因为我的 lib 使用者无法对它们做任何事情。
解决方法
我看到的每个图书馆都在做以下事情之一:
- 手动创建自己的 single-file.d.ts 文件
- 在其代码库中使用相对路径,因此输出 d.ts 文件也包含相对路径。
显然,这两种选择都很糟糕。
我想到的其他解决方案
- 创建单个 d.ts 文件(不会有导入)。
我找不到为此工作的图书馆。
- 不确定是否可行:在运行 ts-loader 之前,我们需要运行一个神奇的 babel-plugin 来通过查看 webpack.config 文件中的 webpack-resolve-module 部分将每个绝对路径转换为相对路径。
我现在的状态
我创建了一个使用绝对路径生成损坏的 d.ts 文件的库:
https://github.com/stavalfi/lerna-yarn-workspaces-example/tree/master/packages/x-core
索引.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 文件?
解决方案
如果任何 typescript 库创建者仍然有这个问题,我为 babel-plugin-module-resolver 创建了一个 Webpack 加载器,它将绝对路径转换为相对路径: https ://github.com/stavalfi/babel-plugin-module-resolver-装载机
它还通过将*.d.ts
文件转换为相对路径来解决具有绝对路径的文件的问题。
您可能想要订阅/阅读此线程以获取其他解决方法: https ://github.com/Microsoft/TypeScript/issues/15479
推荐阅读
- c# - 无法使用 TFS API 将变更集链接到工作项
- html - CSS:当浏览器窗口大小发生变化时,如何使伪元素宽度动态变化?
- python-3.x - 在 Python 中返回一个重新格式化的字符串
- spring - Spring-security oauth2 自定义 AuthenticationProvider
- c# - 如何在循环中将 EventHandler 分配给动态对象?
- c++ - 使用模板化函数 c++ 从副本中保存“新”对象
- javascript - PhoneGap (Android):将 localStorage 备份到云的最简单、最快的方法?
- wordpress - 如何将带有文本字段的图像插入数据库的自定义表中?
- qt - qglviewer上鼠标下的坐标错误
- vhdl - 错误 (10536):counts.vhd(25) 处的 VHDL 循环语句错误:循环必须在 10,000 次迭代内终止