【发布时间】:2020-03-12 03:31:59
【问题描述】:
不久前,我们曾经有服务器渲染页面,然后 React 出现在客户端渲染和单页面应用程序中。它引入了虚拟 DOM 并改变了我们编写代码的方式。
在编写代码之前,我们需要所有这些反应库并将它们作为依赖项安装。现在我们可以分解成许多组件,拥有许多 css 和 scss 文件,包括图像。但最后我们将构建文件,制作紧凑的捆绑包并从构建文件夹提供服务。
快速获取路线
app.get('*', (req,res) =>{
res.sendFile(path.join(__dirname+'/client/build/index.html'));
});
这是我的理解:
Build 文件夹是 webpack 组合所有文件并创建准备部署的缩小包的地方。该文件基本上是每个浏览器都可以理解的简单 HTML 和 JS 文件。由于所有浏览器都不理解 ES6 等等,我们必须将所有这些文件转换为每个浏览器都能理解的普通语言。
另外,webpack-dev 服务器仅用于开发目的,我们不会将其运行到生产环境中。
- 虚拟 DOM/真实 DOM 是否仅用于开发目的?或者 在构建缩小文件时,这些反应库是否也被转堆?如果以后是这种情况,反应是在客户端浏览器的后台模式下运行的吗?我想知道在构建应用后,react 如何处理客户端路由。
- 如何管理 Node-React 应用程序的 github 存储库?您是否保留两个不同的存储库,一个用于前端,另一个用于后端?行业标准是什么?
- 如果你保留两个仓库,你如何部署前端代码?因为您无法将 webpack-dev-server 运行到生产环境中。您也不能在后端(快速服务器)中指定公共静态(构建文件夹),因为它们在两个存储库中分开。这两个存储库的集成是如何发生的(假设我们有两个 AWS EC2 实例,每个实例一个)或从前端存储库提供前端服务??)。你真的可以在生产中使用像 npm serve 这样的东西吗??
我想做什么?
我想在 AWS 上部署我的 node-react 应用程序。我在 github 上只有一个存储库。我的仓库中有一个“客户端”文件夹,所有反应代码都位于其 package.json 文件中。服务器的所有其他文件都在根文件夹内(服务器没有自己的文件夹,文件分散在根文件夹内)。所以有两个 package.json 文件,一个在服务器根文件夹内,一个在客户端文件夹内。我打算在 docker 容器上运行 my-node 应用程序。
请帮助我了解代码托管和部署的核心概念和标准实践,以了解大规模企业应用程序。
【问题讨论】:
-
您正试图将“虚拟 DOM”概念和转成 ES5 兼容代码的常规 JS 文件混为一谈。两者是两种不同的东西。 VDOM 是 React 创造的一个概念,其代码在 ReactJS 库中
-
“我知道什么是真实 dom 和虚拟 dom 以及它们是如何工作的” - 你确定吗?听起来您认为虚拟 dom 仅用于开发?
-
就像@Rikin 说的,虚拟dom 是由react 管理的。它与 webpack 或 babel 没有任何关系。你是对的,你使用 webpack 和 babel before 你的代码被执行来转译和捆绑它。代码被转译和捆绑后,就不再使用了。但它们永远不会对 VDOM 产生影响。
-
好好想想你的 React 应用程序需要哪些东西。您在组件中导入
react,这意味着您需要 react 包中的一些 javascript 才能使您的代码正常工作。您永远不会导入 webpack 或 babel,它们是在您的代码之外使用的工具,用于操作代码本身。因此,当您捆绑项目时,react代码也包含在该捆绑包中以及您使用的任何其他库中。 -
需要 React 以及 React DOM 库(无论是否转译)并发送到客户端,以便在客户端浏览器上运行您的代码。
标签: node.js reactjs amazon-web-services docker continuous-deployment