Как объединить приложение React с существующим сайтом HTML - PullRequest
4 голосов
/ 12 марта 2020

У нас есть <html> файл, хранящийся на AWS S3. Файл содержит информацию верхнего и нижнего колонтитула.

Этот файл имеет собственный конвейер сборки, мы собираем некоторые данные из базы данных, генерируем HTML и загружаем на S3.

Теперь мы хотим включить прилагаемое приложение React на эту страницу HTML. Т.е. внутри тела страницы будет в комплекте приложение реакции.

Приложение React основано на последней настройке приложения create-response-app, поэтому babel и webpack предварительно настроены. Реактивная сборка создает все соответствующие файлы, если приложение было размещено без вышеуказанной настройки.

Есть ли способ слияния двух страниц?

** Примечания: В частности, поиск слияния является частью процесса сборки. **

  1. У нас есть один проект, который генерирует заголовок html и публикует его на S3. У нас есть триггеры, которые могут инициировать это для регенерации в определенные c раз / после изменений и т. Д. c.

  2. У нас есть приложение React, которое связано с babel / webpack в производстве компилирует и производит вывод HTML / bundle js et c. Все минимизировано и хэшировано, поэтому имена файлов являются связками. randomha sh. js et c.

Нам нужно объединить два вывода , Файл html из S3 должен включать приложение React в своем теле / ​​html.

В идеале в процессе конвейера / сборки. Поэтому, если что-то изменится, объединение будет перекомпилировано / перезапущено.

Ответы [ 2 ]

1 голос
/ 21 марта 2020

Я думаю, что вы ищете автоматический c способ объединения двух выходов, один из которых - существующий HTML с верхним и нижним колонтитулами, сгенерированными из существующего процесса сборки и запущенными из базы данных.

во-вторых, это ваше реактивное приложение, которое представляет собой хорошо законченный конечный результат, выходящий из вашей инфраструктуры сборки приложения create-Reaction-app.

В таком случае я бы порекомендовал использовать этот очень популярный инструмент, называемый gulp-inject. gulp-inject принимает поток исходных файлов, преобразует каждый файл в строку и внедряет каждую преобразованную строку в заполнители в файлах целевого потока.

Ниже приведен пример:

Допустим, ваш целевой файл называется index. html вот так

<!DOCTYPE html>
<html>
<head>
  <title>My index</title>
  <!-- inject:css -->
  <!-- endinject -->
</head>
<body>

  <!-- inject:js -->
  <!-- endinject -->
</body>
</html>

Ваш gulpfile. js сценарий будет выглядеть так, чтобы получить новый индекс. html с новыми вставками, автоматически основанными на этом сценарии.

var gulp = require('gulp');
var inject = require('gulp-inject');

gulp.task('index', function () {
  var target = gulp.src('./src/index.html');
  // It's not necessary to read the files (will speed up things), we're only after their paths:
  var sources = gulp.src(['./src/**/*.js', './src/**/*.css'], {read: false});

  return target.pipe(inject(sources))
    .pipe(gulp.dest('./src'));
});

Ваш окончательный вывод индекса . html будет выглядеть следующим образом после запуска индекса gulp:

<!DOCTYPE html>
<html>
<head>
  <title>My index</title>
  <!-- inject:css -->
  <link rel="stylesheet" href="/src/style1.css">
  <link rel="stylesheet" href="/src/style2.css">
  <!-- endinject -->
</head>
<body>

  <!-- inject:js -->
  <script src="/src/lib1.js"></script> 
  <script src="/src/lib2.js"></script> 
  <!-- endinject -->
</body>
</html>

Основные сведения о преобразовании существующего файла HTML и вставке его с кодом ReactJS приведены ниже. Я думаю, что если вы будете применять эти принципы и использовать инструмент gulp-inject, вы сможете творить чудеса.

https://reactjs.org/docs/add-react-to-a-website.html

Ваша точная автоматизация сборки может быть реализована с помощью вашего собственного инструмента, такого как Jenkins, или подобных инструментов, где вы можете связать одно событие с другим. Например, вы можете проверять всякий раз, когда новый файл HTML автоматически генерируется вашей базой данных, запускающей на AWS, и после получения этого события вы можете запустить любой сценарий Gulp-Inject, если у вас уже есть компонент React. ) готовы или активируют Create-React-App для новой сборки компонента React, а затем применяют сценарий Gulp-Inject для внедрения компонента React или кода React в индекс. html или любое другое имя вашей страницы html.

Пакет npm для gulp-inject можно найти здесь.

https://www.npmjs.com/package/gulp-inject

Надеюсь, это поможет. Дайте мне знать.

Если вам нравится ответ, вы можете принять его.

1 голос
/ 12 марта 2020

Для этого вам нужно разместить ваши js, css и мультимедийные файлы из вашей папки сборки build в контейнере S3 и добавить следующее к коду:

<html>
    ..... your static html code 


    <div id="the id used to bootstrap your react app (from the index.html file in the public folder)"></div>

    ......
    links to all the files in your JS, CSS And media files from the react build folder

</html>

Я бы Предложите использовать размещенные изображения (вы также можете разместить их на S3) и ресурсы как можно чаще, чтобы вам не нужно было добавлять ссылки на файлы мультимедиа по одной в файле html.

You Возможно, вы захотите взглянуть на эту ссылку о том, как объединить все файлы в один файл при создании приложения реагирования (я не пробовал эту часть).

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