如何防止TypeScript在输出中包含.d.ts导入?

3

我已经安装了一个 .d.ts 文件,它是针对 p2.js 库的类型定义文件。我使用以下命令将其作为外部(非全局)typings 模块进行安装:

typings install p2=github:schteppe/p2.js/index.d.ts#9d56924

我会用以下方式在我的TypeScript代码中使用它:
import * as p2 from 'p2';

这个导入项出现在编译后的JavaScript中:

var p2 = require('p2');

但显然,我不需要它在那里,因为p2外部模块只包含类型定义,而不是实际代码。然后,在TypeScript的输出上运行webpack,它无法编译,出现了以下错误:

...Module not found: Error: Cannot resolve module 'p2'...

应该如何使用这个外部模块,使得TypeScript和我的IDE(Atom带有atom-typescript插件)能够识别它的定义,但是不会在TypeScript输出中包含任何require调用呢?

2个回答

1

webpack支持配置外部库。

在您的情况下,配置如下:
externals: [{ "p2": true }]

有关处理外部库的更多信息,请参阅webpack文档: webpack.github.io/docs/configuration.html#externals。

编辑:从评论中更新了新信息。


整个问题在于它是一个非全局(外部)类型,因此必须进行导入。 - interphx
啊,我明白了,webpack支持配置外部依赖。在你的情况下,应该是这样的`externals: [ { "p2": true } ]`http://webpack.github.io/docs/configuration.html#externals。如果可以的话,请告诉我它是否有效,我会更新原始答案。 - Eldin
谢谢,这似乎有效。但仍然感觉有点hacky(typescript在输出中不包括声明,没有理由包含只包含声明的模块的引用),但我明白为什么要这样做。如果没有其他(更干净)的解决方案提出,我将接受这个答案。 - interphx

-1

但这只是禁用了 TypeScript 编译。在使用两步构建流程(分别为 TypeScript -> JavaScript,然后是 JavaScript -> 经过 typescript 和 webpack 打包的 JavaScript)时,一切都很正常,直到我决定使用非全局 typedef 模块。使用 ts-loader 是让它工作的唯一方法吗? - interphx

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接