почему использование окна в файле записи веб-пакета повлияет на горячую перезагрузку React?

Окружение: [email protected] + [email protected] + [email protected] + [email protected]

Входной файл: index.js

const MOUNT_NODE = document.getElementById('root');

// Line A
const __DEV__ = window.__DEV__;


let render = () => {
  const App = require('./components/App').default;
  const routes = require('./pages/router').default(store);

  ReactDOM.render(
    <App store={store} routes={routes} />,
    MOUNT_NODE
  );
};

// Development Tools
// ------------------------------------
if (__DEV__) {
  if (module.hot) {
    const renderApp = render;
    const renderError = (error) => {
      const RedBox = require('redbox-react').default;

      ReactDOM.render(<RedBox error={error} />, MOUNT_NODE);
    };

    render = () => {
      try {
        renderApp();
      } catch (e) {
        renderError(e);
      }
    };

    // Setup hot module replacement
    module.hot.accept([
      './components/App',
      './pages/router',
    ], () =>
      setImmediate(() => {
        ReactDOM.unmountComponentAtNode(MOUNT_NODE);
        render();
      })
    );
    module.hot.accept();
  }
}

__DEV__ определяется в файле конфигурации webpack:

new webpack.DefinePlugin(Object.assign({
  __DEV__: project.env === 'development',
}, project.globals))

а затем я запускаю локальный сервер разработки.

но когда я меняю jsx, горячая перезагрузка не работает, и предупреждающие советы:

process-update.js?e13e:95 [HMR] Следующие модули не могут быть обновлены в горячем режиме: (требуется полная перезагрузка) Обычно это происходит потому, что измененные модули (и их родители) не знают, как выполнить горячую перезагрузку. См. https://webpack.js.org/concepts/hot-module-replacement/ для более подробной информации.

но когда я удаляю строку A, горячая перезагрузка работает нормально, предупреждающие подсказки также исчезают。

вот почему? спасибо.


person SKing7    schedule 30.03.2018    source источник


Ответы (1)


Это должна быть строка. Вам нужно использовать JSON.stringify для преобразования Boolean в String. Должен быть

new webpack.DefinePlugin(Object.assign({
  __DEV__: JSON.stringify(project.env === 'development'),
}, project.globals))

Проверьте DefinePlugin.

person Tan Duong    schedule 30.03.2018