2016-11-12 111 views
4

我在TypeScript項目上使用Webpack。Webpack TypeScript module.hot不存在

在我的configureStore.dev.ts文件我想使用Webpack中的module.hot來啓用HMR。

我的問題是hot默認情況下不存在NodeModule,並且安裝@types/webpack-env不能解決我的問題。


@types/node衝突與@type/webpack-env

在尋找@types/webpack-env定義之後,它們確定了Module界面,一切都很好的定義。

但有就行了衝突:

declare var module: __WebpackModuleApi.Module; 

由於module已經由@types/node定義爲NodeModule

只需刪除@types/nodehot現在可用於module


process現在沒有定義

現在我刪除@types/node,我無法檢查

process.env.NODE_ENV === 'production' 

如何正確界定process

+0

一個錯字:'@類型/的WebPack-env'應該是'@類型/的WebPack-env' – xcatliu

回答

5

您可以增加全局範圍並使用界面合併重新打開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聲明文件本身中完成。

+0

是的,我以爲會有一個官方解決方案,在某個地方提供定義。 – kube

+0

您絕對可以發送PR,如果API適用,我們會接受。我主要是根據我能從當前文檔中找到的答案寫出答案。你會認爲這是否被接受的答案嗎? –

+1

事實上,在'@ types/webpack-env'中一切都很好定義,這是我的錯誤,因爲我添加了@ @ types/node',以便能夠使用模塊並且我不應該擁有。 – kube

7

可能就像在文件頂部添加跟隨行一樣簡單。

///<reference types="webpack-env" /> 
+2

這適用於安裝webpack-env的類型之後: npm install --save-dev @ types/webpack-env – Patrik

9

由於幾個傢伙寫到這裏這是最好的辦法:

npm i -D @types/webpack-env 

對我來說它按預期工作,解決問題與不承認hot財產。

在我的項目我使用這些版本:

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

我不知道,如果問題仍然是最新的,但我的問題安裝類型的WebPack幫助我。

0

更改。熱由[ '熱']

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

使用

if (module['hot']) { 
    module['hot'].accept(); 
    module['hot'].dispose(() => { 
相關問題