Модуль Webpack TypeScript.hot не существует

Я хочу, чтобы 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'.

5 ответов


как мало парней писали здесь, это лучший способ:

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.


@types / webpack-env было так:

код в исходном вопросе теперь нужен только @types / webpack-env.

но импорт @types / node alongside больше не будет конфликтовать.


изменить .hot by ['hot']

if (module.hot) {
    module.hot.accept();
    module.hot.dispose(() => {

использовать

if (module['hot']) {
    module['hot'].accept();
    module['hot'].dispose(() => {