0

프로젝트에 HMR을 추가하는 중 약 1 주일 전에 문제가 발생했습니다. 문제가 해결되지 않았고 콘솔에 HMR 사용이 표시되고 변경 사항도 감지되었습니다.HMAC 용 webpack에서 바벨 로더를 올바르게 구성하는 방법

[HMR] Updated modules: 
[HMR] - ./app/src/components/app.jsx 
[HMR] App is up to date. 

을하지만 아무것도 시각적으로 변경하지 않을 것이다, 어느 쪽도 코드 관리자에서 : 파일에, 그러나보기를 다시 렌더링하지 않았다, 콘솔 로그 없을 것입니다.

많은 실험을 거친 끝에 나는이 문제가 바벨 로더에 의해 발생했다는 것을 알았고, 어떻게 든 HMpack 모터 나 그와 비슷한 것들을 방해했다. 나는 바벨 로더에서 색인 파일을 제외시킴으로써 그것을 해결했지만, 지금은 index.jsx 파일에 js 기능을 사용할 수 없기 때문에 이것이 최선의 방법이라고 생각하지 않습니다. 나는이 문제를 해결할 더 좋은 방법이 있는지 알고 싶다. 아마도 내 구성이나 웹팩 핫 미들웨어를 설정하는 방법에있을 것이다.

이 내 웹팩 구성입니다 :

module.exports = { 
    resolve: { 
    extensions: ['*', '.js', '.jsx'] 
    }, 
    entry: [ 
    'webpack-hot-middleware/client', './app/src/index.jsx' 
    ], 
    output: { 
    path: path.resolve(__dirname, 'build/js'), 
    filename: 'bundle.js', 
    publicPath: '/public' 
    }, 
    devtool: 'cheap-module-source-map', 
    module: { 
    rules: [{ 
     test: /\.jsx?$/, 
     exclude: /node_modules/, 
     include: path.resolve(__dirname, 'app/src/'), 
     exclude: path.resolve(__dirname, 'app/src/index.jsx'), 
     use: [{ 
     loader: 'babel-loader', 
     options: { 
      presets: [ 
      'react-hmre' 
      ], 
      plugins: [ 
      'transform-object-rest-spread' 
      ] 
     } 
     }], 
    }] 
    }, 
    plugins: [ 
    new webpack.HotModuleReplacementPlugin(), 
    new webpack.NoEmitOnErrorsPlugin() 
    ] 
} 

그리고 이것이 어떻게 설정 뜨거운 미들웨어 및 반응 핫 로더를 내 서버 : 사전에

const webpack = require('webpack') 
const webpackDevMiddleware = require('webpack-dev-middleware') 
const webpackHotMiddleware = require('webpack-hot-middleware') 

const webpackConfig = require('./webpack.dev.config') 
const compiler = webpack(webpackConfig) 

app.use(webpackDevMiddleware(compiler, { 
    noInfo: true, 
    publicPath: webpackConfig.output.publicPath 
})) 

app.use(webpackHotMiddleware(compiler)) 

감사합니다.

답변

0

내가 생각하기에 바벨 구성 이었기 때문에 env 프리셋에 modules: false 옵션이 필요하므로 webpack에서 모듈을 처리 할 수 ​​있습니다. 이것은 멍청한 실수이지만 사람이 나를 미치게 만들었습니다.

ENV의 정확한 구성은 다음처럼 그 프리셋 :

['env', {modules: false}]