【问题标题】:Typescript+webpack: typescript emmited no output for index.d.tsTypescript+webpack:typescript 没有输出 index.d.ts
【发布时间】:2016-11-08 22:56:37
【问题描述】:

我跟着this tutorial 成功设置了typescript+webpack(无反应)。 这一切都很好,直到我添加 index.d.ts 文件我的组件文件夹,我用它来导出我的所有模块,例如:

export * from "./MyClass1";
export * from "./MyClass2";
export * from "./MyClass2";

然后我导入它:

import * as MyLib from "./components";

代码提示和在 sublime 编辑器中一切正常。

最初,当我运行它时,我得到了:

无法解析“文件”或“目录”./components

所以我在 webpack.config.js 的扩展中添加了 d.ts:

 resolve: {
        extensions: ["", ".webpack.js", ".web.js", ".ts", ".tsx", ".js", ".d.ts"]
    },

现在,当我运行 webpack 时,我得到了这个错误:

Typescript 没有为 [...]\index.d.ts 发出任何输出

我应该如何解决这个问题?

【问题讨论】:

  • 可以链接教程吗?另外,尝试在 tsconfig 中设置compilerOptions.moduleResolution = "node",然后重试找不到 ./components 的步骤
  • 抱歉,忘记链接 - 更新问题。我尝试将“moduleResolution”:“node”添加到tsconfig,但没有任何改变,无论是d.ts添加到扩展还是没有。

标签: typescript


【解决方案1】:

index.d.ts

这是一个声明文件。声明文件没有 javascript 发射。

修复

确保.d.ts 文件不是必需的发射的一部分,方法是将其从 webpack 中排除,例如通过将其重定向到ignore-loader

{
    test: /\.tsx?$/,
    loader: 'ts-loader',
    exclude: /node_modules|\.d\.ts$/
},
{
    test: /\.d\.ts$/,
    loader: 'ignore-loader'
},

【讨论】:

  • 这工作正常,除了现在,如果我像这样导入它: import * as MyLib from "./components";它显示:找不到模块:错误:无法解析目录'./components'。只有当我像 import {MyClass} from "./components" 一样导入它时,它才能正常工作。有没有办法解决这个问题?
  • 我问了另一个关于这个错误的问题:stackoverflow.com/questions/38251505/…
  • 请多解释。按原样,N. Kudryavtsev 的回答更有帮助,虽然感觉有点像规避问题。我没有清楚地检查您的资源,this.d.ts 默认包含在内,所以我不知道您将其添加到“编译上下文”是什么意思。
  • 遇到了这个答案,并不太清楚。有详细说明吗?
【解决方案2】:

在这个特定的问题中,index.d.ts 的内容不是定义而是一个模块,应该被移到index.ts 文件中。 我也遇到了错误“typescript emmited no output for index.d.ts”但声明文件有效。

似乎ts-loader 尝试将.d.ts 文件添加到最终捆绑包中,但没有发现要添加的内容,因为它们仅包含构建期间类型检查所需的声明。

对我来说可行的解决方案不是将.d.ts 文件传递​​给ts-loader,而是传递给一些什么都不做的加载程序,例如。 G。 ignore-loader。我的webpack.config.js中对应的规则是:

{
    test: /\.tsx?$/,
    loader: 'ts-loader',
    exclude: /node_modules|\.d\.ts$/
},
{
    test: /\.d\.ts$/,
    loader: 'ignore-loader'
},

ts-loader 如果您使用 ES2018,则配置可能略有不同,其中添加了正则表达式的负向回溯:

{
    test: /(?<!\.d)\.tsx?$/,
    loader: 'ts-loader',
    exclude: /node_modules/
},
//same ignore-loader config here

【讨论】:

  • 这也为我解决了这个问题。谢谢。但是,ts-loader 应该自己处理这个问题。必须将 d.ts 文件显式发送到 dev null 是没有意义的。
  • 次要贡献:exclude: ["/node_modules/", /\.d\.ts$/iu] 作为数组也可以工作,并且阅读起来稍微好一些。
猜你喜欢
  • 2021-04-09
  • 2017-03-02
  • 1970-01-01
  • 2017-04-05
  • 2019-08-13
  • 1970-01-01
  • 2017-10-13
  • 2017-03-19
  • 1970-01-01
相关资源
最近更新 更多