Генератор статического сайта, который визуализирует React для HTML напрямую (нет React в выходных данных)? - PullRequest
0 голосов
/ 06 марта 2019

Может Гэтсби или Джекилл или любые другие генераторы статических сайтов преобразовать сайт, созданный React, в чисто статический HTML?Я рассчитываю на хостинг на S3 / CloudFront или аналогичный, а также на выходе почти нет JS.

По сути, я хочу создать статический веб-сайт, но хотел бы использовать React в качестве инструмента разработкиПреимущество повторно используемых компонентов пользовательского интерфейса.Фактическое взаимодействие во время выполнения минимально и может быть выполнено без React во время выполнения.

Я посмотрел на response-static , который, кажется, является именно тем, что я ищу, но отрисованные html-страницы все еще ссылаютсяи загрузите библиотеку React.

При минимальных потребностях я, вероятно, мог бы свернуть свою собственную вещь, чтобы создать каждую страницу как отдельный React SPA, а затем использовать ReactDOMServer для рендеринга каждой из них в статический HTML-файл.Я смотрю, есть ли более простые / лучшие варианты.

Ответы [ 2 ]

1 голос
/ 06 марта 2019

С Гэтсби, конечно, вы можете. Gatsby имеет html.js, который служит шаблоном для всех сгенерированных страниц. Вы можете просто удалить JavaScript Гэтсби из этого HTML.

/* Generated html */
...
<body>
  <div id="___gatsby">...</div>
  <script src="/common.js"></script> <-- remove this
</body>

Сначала скопируйте html по умолчанию на ваш src:

cp .cache/default-html.js src/html.js

Затем отредактируйте эту строку:

/* src/html.js */

    <body {...this.props.bodyAttributes}>
      {this.props.preBodyComponents}
      <div
        key={`body`}
        id="___gatsby"
        dangerouslySetInnerHTML={{ __html: this.props.body }}
      />

-     {this.props.postBodyComponents}
+     {process.env.NODE_ENV !== 'production' && this.props.postBodyComponents}

    </body>

Это гарантирует, что вы все еще можете использовать горячую перезагрузку Гэтсби в разработке, но сгенерированные htmls не будут включать в себя сценарии React и Webpack.

Более тщательным подходом было бы перебрать postBodyComponents и удалить только тег скрипта, который ссылается на common.js, но в большинстве случаев я думаю, что все будет в порядке.


Это определенно противоречит цели Gatsby, у которой есть своя собственная конвенция и сложный процесс, так что он может генерировать прогрессивное веб-приложение. Для вашего случая, если вы еще не знакомы с Гэтсби, возможно, было бы проще накатить собственную SSR. Мой ответ - только показать, возможно ли это с Гэтсби или нет.

1 голос
/ 06 марта 2019

Вы можете использовать pupeteer для получения рендеринга HTML любой веб-страницы, включая SPA. Или используйте rendertron, который использует puteteer внизу. Еще одна - реагирующая привязка, которая будет сканировать ваш веб при сборке и создавать html для каждой страницы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...