在没有互联网连接的 Windows 服务器上托管静态反应应用程序的最佳方式是什么
What is the best way to host a static react application on a Windows Server that doesn't have internet connection
我使用 Create-React-App 和 npm 创建了一个 React 应用程序。
我打算简单地使用 npm 运行 build 构建它,并以某种方式在 windows 服务器中托管生成的构建。
这个 windows 服务器没有任何互联网连接(但我有管理员权限,所以我可以安装离线包),然后我尝试了:
- 使用无法运行的 IIS 托管构建的文件夹(我找不到
任何好的文档)
- 打包 "serve" npm 包以将其安装在服务器中(服务有
大量的依赖关系,真的很难得到一个
离线包)
None 这似乎有效...有什么建议吗?
一种方法:
1.Install 具有 Internet 连接的 Win 服务器上的 NodeJS。
2. 在那个服务器上安装 Express 并让你的 React 应用程序与 Express 一起工作。
您可能想要寻找 Express-React 样板文件以节省时间。我写了这样一个 boilerplate 虽然它是用 TypeScript 写的。还有其他的。
3. 将 NodeJS 安装程序和 Express 安装复制到没有 Internet 连接的服务器。安装节点。然后您可以选择 use IIS 作为代理以获得更好的安全性。
另一种(更复杂的)方式:
不要复制 Express 安装,而是从中创建一个 Docker 容器。然后在没有 Internet 连接的服务器上启用 Hyper-V,运行 那里的容器。
另一种方式(我不推荐):
让 IIS 创建 NodeJS 运行 时间环境,同时使用 iisnode
服务传入请求,如 here 所述。
P.S.
使用 Express 不会将 SSR 添加到您的 React 应用程序。 SPA 需要来自服务器的一些服务器端逻辑。这就是我建议让你的 React 应用程序与 Express 一起工作时的意思。逻辑包括映射和重定向。
IIS 具有非常强大和灵活的配置,映射和重定向都可以通过键入包括正则表达式在内的配置设置以声明方式完成。我从未尝试过,但感觉这是可能的。但是,在线查找相关说明可能是一个挑战。进行映射和重定向的另一种方法是以编程方式而不是声明方式。例如,您可以用 JS 或 TypeScript 来代替用 C# 编写它,利用 Express 并添加 IIS 作为代理。
需要什么映射和重定向?
映射:将路径/static/js/*.js
映射到脚本包所在的物理文件夹。 CRA 将捆绑包放入 my-cra-app/build/static/js
目录。注意 1:您可能需要仔细检查 CRA 生成的 index.html
文件中脚本包的路径(位于文件底部)确实是 /static/js/<bundle>.js
。注 2:如果映射不是通配符,而是受到更多限制,例如它检查包含包名称的模式匹配。
重定向:需要实现所有 SPA 所需的回退。回退由 CRA 自动添加到 webpack-dev-server。当人们进行部署时,当他们从 webpack-dev-server 迁移到 Express 或其他服务器时,他们经常会跳过 here 作为 React-Express 集成的第三个陷阱
提到的回退。
我使用 Create-React-App 和 npm 创建了一个 React 应用程序。 我打算简单地使用 npm 运行 build 构建它,并以某种方式在 windows 服务器中托管生成的构建。
这个 windows 服务器没有任何互联网连接(但我有管理员权限,所以我可以安装离线包),然后我尝试了:
- 使用无法运行的 IIS 托管构建的文件夹(我找不到 任何好的文档)
- 打包 "serve" npm 包以将其安装在服务器中(服务有 大量的依赖关系,真的很难得到一个 离线包)
None 这似乎有效...有什么建议吗?
一种方法:
1.Install 具有 Internet 连接的 Win 服务器上的 NodeJS。
2. 在那个服务器上安装 Express 并让你的 React 应用程序与 Express 一起工作。
您可能想要寻找 Express-React 样板文件以节省时间。我写了这样一个 boilerplate 虽然它是用 TypeScript 写的。还有其他的。
3. 将 NodeJS 安装程序和 Express 安装复制到没有 Internet 连接的服务器。安装节点。然后您可以选择 use IIS 作为代理以获得更好的安全性。
另一种(更复杂的)方式:
不要复制 Express 安装,而是从中创建一个 Docker 容器。然后在没有 Internet 连接的服务器上启用 Hyper-V,运行 那里的容器。
另一种方式(我不推荐):
让 IIS 创建 NodeJS 运行 时间环境,同时使用 iisnode
服务传入请求,如 here 所述。
P.S.
使用 Express 不会将 SSR 添加到您的 React 应用程序。 SPA 需要来自服务器的一些服务器端逻辑。这就是我建议让你的 React 应用程序与 Express 一起工作时的意思。逻辑包括映射和重定向。
IIS 具有非常强大和灵活的配置,映射和重定向都可以通过键入包括正则表达式在内的配置设置以声明方式完成。我从未尝试过,但感觉这是可能的。但是,在线查找相关说明可能是一个挑战。进行映射和重定向的另一种方法是以编程方式而不是声明方式。例如,您可以用 JS 或 TypeScript 来代替用 C# 编写它,利用 Express 并添加 IIS 作为代理。
需要什么映射和重定向?
映射:将路径/static/js/*.js
映射到脚本包所在的物理文件夹。 CRA 将捆绑包放入 my-cra-app/build/static/js
目录。注意 1:您可能需要仔细检查 CRA 生成的 index.html
文件中脚本包的路径(位于文件底部)确实是 /static/js/<bundle>.js
。注 2:如果映射不是通配符,而是受到更多限制,例如它检查包含包名称的模式匹配。
重定向:需要实现所有 SPA 所需的回退。回退由 CRA 自动添加到 webpack-dev-server。当人们进行部署时,当他们从 webpack-dev-server 迁移到 Express 或其他服务器时,他们经常会跳过 here 作为 React-Express 集成的第三个陷阱
提到的回退。