Webpack TypeScript module.hot不存在

我想启用的WebPack HMR的NodeJS项目写的TypeScript

module.hot不可用:

  • @ types / webpack-env定义:

    declare var module: __WebpackModuleApi.Module
    
  • 哪些与@ types / node定义冲突

    declare var module: NodeModule
    

删除@ types / node可以解决此问题,但会禁用process

process.env.NODE_ENV === 'production' // [ts] Cannot find name 'process'
蛋蛋猿2020/04/03 10:48:25

这修复了它

yarn add @types/webpack-env --dev

VScode将立即工作

Intellij需要重新启动

Stafan路易2020/04/03 10:48:25

您可以扩大全局范围并使用接口合并来重新打开NodeModule接口并添加缺少的hot属性。

import webpack = require("webpack");

declare global {
    interface NodeModule {
        hot: {
            accept(dependencies: string[], callback: (updatedDependencies: string[]) => void): void;
            accept(dependency: string, callback: () => void): void;
            accept(errHandler?: (err: any) => void): void;
            decline(dependencies: string[]): void;
            decline(dependency: string): void;
            decline(): void;

            dispose(callback: (data: any) => void): void;
            addDisposeHandler(callback: (data: any) => void): void;

            removeDisposeHandler(callback: (data: any) => void): void;
            // ...
        }
    }
}

但是,实际上,应该在Webpack声明文件本身中完成这种扩充。

Mandy村村2020/04/03 10:48:25

就像在文件顶部添加以下行一样简单。

///<reference types="webpack-env" />
番长樱梅2020/04/03 10:48:25

很少有人在这里写道,这是最好的方法:

npm i -D @types/webpack-env

对我来说,它按预期工作,解决了无法识别的hot财产的问题。

在我的项目中,我使用的是这些版本:

"@types/node": "^8.0.19",
"@types/webpack-env": "^1.13.0"

我不知道问题是否仍然是最新的,但是对于我为webpack安装类型的问题有所帮助。

小宇宙2020/04/03 10:48:25

解决冲突

@ types / webpack-env已更新:

现在,原始问题中的代码仅需要@ types / webpack-env

但同时导入@ types / node不会再发生冲突。


安装

npm install --save-dev @types/webpack-env

并且如果您还需要NodeJS环境定义:

npm install --save-dev @types/node