[英]Webpack TypeScript module.hot does not exist
我想啟用的WebPack HMR在項目的NodeJS寫的打字稿。
但是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'
正如少數人在這里寫的那樣,這是最好的方法:
npm i -D @types/webpack-env
對我來說,它按預期工作,解決了無法識別hot
屬性的問題。
在我的項目中,我使用了這些版本:
"@types/node": "^8.0.19",
"@types/webpack-env": "^1.13.0"
我不知道問題是否仍然是最新的,但是對於我的問題,為 webpack 安裝類型可以幫助我。
可能就像在文件頂部添加以下行一樣簡單。
///<reference types="webpack-env" />
您可以增加全局范圍並使用接口合並重新打開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 聲明文件本身中完成。
將 .hot 更改為 ['hot']
if (module.hot) {
module.hot.accept();
module.hot.dispose(() => {
使用
if (module['hot']) {
module['hot'].accept();
module['hot'].dispose(() => {
這修復了它
yarn add @types/webpack-env --dev
VScode 會立即工作
Intellij 需要重新啟動
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.