【问题标题】:How to prevent TypeScript from including .d.ts import in the output?如何防止 TypeScript 在输出中包含 .d.ts 导入?
【发布时间】:2017-02-05 10:52:42
【问题描述】:

我已使用以下命令将 .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-typescript 插件的 Atom)看到定义,但没有 require 调用它被包含在 TypeScript 输出中?

【问题讨论】:

    标签: javascript typescript webpack typescript-typings


    【解决方案1】:

    webpack 支持配置外部。

    在您的情况下,这将是
    externals: [ { "p2": true}]

    更多关于处理 webpack 文档中的外部信息: webpack.github.io/docs/configuration.html#externals。

    编辑:使用来自 cmets 的新信息进行了更新

    【讨论】:

    • 整个问题是它是非全局(外部)类型,因此必须导入。
    • 啊,我明白了,webpack 支持配置外部。在您的情况下,这将是 externals: [ { "p2": true } ] webpack.github.io/docs/configuration.html#externals。让我知道它是否有效,然后我将更新原始答案。
    • 谢谢,这似乎有效。仍然感觉有点 hacky(打字稿在其输出中不包含声明,没有理由包含对仅包含声明的模块的引用),但我理解它为什么会这样工作。如果没有其他(更清洁的)解决方案将被提出,我会接受这个答案。
    【解决方案2】:

    【讨论】:

    • 但这只是禁用了 TypeScript 编译。在我决定使用非全局 typedef 模块之前,两步构建过程(TypeScript -> JavaScript 然后是 JavaScript -> Bundled JavaScript with typescript 和 webpack)一切正常。使用 ts-loader 是让它工作的唯一方法吗?
    猜你喜欢
    • 2019-05-13
    • 1970-01-01
    • 2014-06-02
    • 1970-01-01
    • 2018-12-06
    • 2019-12-18
    • 1970-01-01
    • 2017-05-31
    • 1970-01-01
    相关资源
    最近更新 更多