Могу ли я имитировать DOM с помощью response-dom-server на узле? - PullRequest
0 голосов
/ 07 октября 2019

Могу ли я смоделировать DOM с помощьюact-dom-server в Node для правильной визуализации компонентов реагирования, использующих сторонние библиотеки

Я пытаюсь реализовать SSR в существующем проекте реагирования.

Он использует среду интерфейса Antd, а также некоторую зависимость, которая использует jQuery под капотом. Я создал глобальные переменные, которые имитируют window / document / localStorage (просто не выбрасывает 'undefined'), но с jQuery это не работает, так как он проверяет, является ли среда Node или Browser (if (module && module.exports)).

Я проверил использование безголовых браузеров, но это сделает рендеринг намного длиннее, что в моем случае нецелесообразно.

Сейчас я использую @ babel / register для настройки компиляции JSX

require('ignore-styles');
require('url-loader');
require('file-loader');
require('@babel/register')({
  ignore: [/(node_modules)/],
  presets: [ /* '@babel/preset-env', */ '@babel/preset-react'],
  plugins: [
    'syntax-dynamic-import',
    'dynamic-import-node',
    'react-loadable/babel',
    '@babel/plugin-proposal-class-properties',
    '@babel/plugin-transform-modules-commonjs',
    [
      'module-resolver',
      {
        root: ['./src'],
        alias: {
          'google-maps-react': './server/mocks/googleMapsReact',
        },
      },
    ],
  ],
});
require('./index');

и renderToString для создания простого html

    const html = ReactDOMServer.renderToString(
      <Loadable.Capture report={m => modules.push(m)}>
        <ReduxProvider store={store}>
          <StaticRouter location={req.baseUrl} context={routerContext}>
            <App />
          </StaticRouter>
        </ReduxProvider>
      </Loadable.Capture>
    );

Так что мой вопрос, могу ли я каким-то образом смоделировать DOM в Node,что позволит выполнять dom-манипуляции, необходимые сторонним библиотекам, не адаптированным для SSR.

А также я открыт для общих рекомендаций по реализации SSR для унаследованного кода. Я видел много статей, но большинство из них о реализации ssr с нуля. И в моем случае, чем меньше изменений в существующем коде, тем лучше.

...