Webpack TypeScript module.hot不存在

kub*_*ube 28 node.js typescript webpack webpack-hmr

我想启用的WebPack HMR的NodeJS写在项目打字稿.

但是module.hot不可用:

删除@ types/node,解决了问题,但禁用了process:

process.env.NODE_ENV === 'production' // [ts] Cannot find name 'process'
Run Code Online (Sandbox Code Playgroud)

Woo*_*aSh 32

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

npm i -D @types/webpack-env
Run Code Online (Sandbox Code Playgroud)

对我而言,它按预期工作,解决了未被承认的hot财产问题.

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

"@types/node": "^8.0.19",
"@types/webpack-env": "^1.13.0"
Run Code Online (Sandbox Code Playgroud)

我不知道问题是否仍然是最新的但是我的问题安装webpack类型帮助我.


kub*_*ube 22

解决冲突

@ types/webpack-env自更新以来:

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

但是同时导入@ types/node并不会发生冲突.


安装

npm install --save-dev @types/webpack-env
Run Code Online (Sandbox Code Playgroud)

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

npm install --save-dev @types/node
Run Code Online (Sandbox Code Playgroud)


use*_*858 11

可以像在文件顶部添加以下行一样简单.

///<reference types="webpack-env" />
Run Code Online (Sandbox Code Playgroud)

  • 安装webpack-env的类型后,这对我有用:npm install --save-dev @ types/webpack-env (3认同)

Dan*_*ser 6

您可以扩充全局范围并使用接口合并来重新打开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;
            // ...
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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