Могу ли я смоделировать 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 с нуля. И в моем случае, чем меньше изменений в существующем коде, тем лучше.