如何将 React 应用程序合并到具有现有 HTML 结构的现有网站中

我们有一个<html>文件存储在 AWS S3 上。该文件包含页眉和页脚信息。

该文件有自己的构建管道,我们从数据库收集一些数据并生成 HTML 并上传到 S3。

我们现在希望将捆绑的 React 应用程序包含到此 HTML 页面中。即页面正文中将是捆绑的反应应用程序。

React App 是基于最新的 create-react-app 设置构建的,因此 babel 和 webpack 是预先配置的。如果应用程序是在没有上述设置的情况下托管的,则反应构建会创建所有相关文件。

有没有办法合并两个页面?

**注释:专门寻找合并作为构建过程的一部分。**

  1. 我们有一个项目可以生成 header html 并将其发布到 S3 上。我们有触发器可能会触发它在特定时间/更改后等重新生成。

  2. 我们有一个 React 应用程序,它在生产版本中与 babel/webpack 捆绑在一起,并生成输出 HTML/bundle js 等。所有内容都经过缩小和哈希处理,因此文件名是捆绑包。randomhash.js

我们需要合并两个输出。来自 S3 的 html 文件需要在其 body/html 中包含 React App。

理想情况下在管道/构建过程中。因此,如果发生更改,合并将重新编译/重新运行。


收到一只叮咚
浏览 153回答 2
2回答

芜湖不芜

我认为您正在寻找一种自动合并两个输出的方法,其中一个是现有的 HTML,其中包含从现有构建过程生成并通过数据库触发的页眉和页脚。第二个是您的 React 应用程序,它是来自您的 create-react-app 构建基础架构的完美最终输出。在这种情况下,我建议使用这个非常流行的工具,称为 gulp-inject。gulp-inject 获取源文件流,将每个文件转换为字符串,并将每个转换后的字符串注入目标流文件中的占位符中。下面给出一个例子:假设您的目标文件名为index.html,如下所示<!DOCTYPE html><html><head>&nbsp; <title>My index</title>&nbsp; <!-- inject:css -->&nbsp; <!-- endinject --></head><body>&nbsp;&nbsp; <!-- inject:js -->&nbsp; <!-- endinject --></body></html>您的gulpfile.js脚本将如下所示,以根据此脚本自动实现带有新插入的新 index.html。var gulp = require('gulp');var inject = require('gulp-inject');&nbsp;gulp.task('index', function () {&nbsp; var target = gulp.src('./src/index.html');&nbsp; // It's not necessary to read the files (will speed up things), we're only after their paths:&nbsp; var sources = gulp.src(['./src/**/*.js', './src/**/*.css'], {read: false});&nbsp;&nbsp; return target.pipe(inject(sources))&nbsp; &nbsp; .pipe(gulp.dest('./src'));});运行 gulp index 后, index.html的最终输出将如下所示:<!DOCTYPE html><html><head>&nbsp; <title>My index</title>&nbsp; <!-- inject:css -->&nbsp; <link rel="stylesheet" href="/src/style1.css">&nbsp; <link rel="stylesheet" href="/src/style2.css">&nbsp; <!-- endinject --></head><body>&nbsp;&nbsp; <!-- inject:js -->&nbsp; <script src="/src/lib1.js"></script>&nbsp;&nbsp; <script src="/src/lib2.js"></script>&nbsp;&nbsp; <!-- endinject --></body></html>下面给出了转换现有 HTML 文件并使用 ReactJS 代码插入它的基础知识。我认为如果您应用这些原则并使用 gulp-inject 工具,您可以实现奇迹。https://reactjs.org/docs/add-react-to-a-website.html您的确切构建自动化可能由您自己的工具驱动,例如 Jenkins 或类似的工具,您可以在其中将一个事件与另一个事件链接起来。例如,您可以在 AWS 上的数据库触发自动生成新的 HTML 文件时进行检查,一旦收到该事件,您就可以触发 Gulp-Inject 脚本(如果您已经准备好 React 组件),或者触发Create-React-App 来重新构建 React 组件,然后应用 Gulp-Inject 脚本将 React 组件或 React 代码注入到 index.html 或 html 页面的任何名称中。可以在此处找到 gulp-inject 的 npm 包。https://www.npmjs.com/package/gulp-inject希望这可以帮助。让我知道。如果您喜欢这个答案,可以采纳。

慕妹3242003

为此,您需要将 React 构建文件夹中的 js、css 和媒体文件托管在 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 文件中逐一添加媒体文件链接。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Html5