在 IIS 服务器上部署不依赖 nodejs 的 asp.net react 模板

IT技术 asp.net node.js reactjs iis
2021-05-22 11:52:58

我在没有 nodejs 的 IIS 服务器上部署和运行 ReactRedux 模板时遇到问题。该应用程序是使用 AspNetCore.SpaTemplates 的“reactredux”选项创建的:https ://blogs.msdn.microsoft.com/webdev/2017/02/14/building-single-page-applications-on-asp-net-core- with-javascriptservices/

该应用程序与模板相同,未进行任何更改。我们首先尝试在 IIS 服务器上安装 nodejs 并在 IIS 上托管它,一切正常:

使用 nodejs 截图

但是当我们从服务器卸载 nodejs 并重新启动 IIS 时,它不再工作了:

没有nodejs的截图

我们无法弄清楚错误是什么,因为在开发模式下运行它需要 nodejs,而当我们dotnet run在开发模式下运行它时,错误消息抱怨没有安装 node.js,正如预期的那样。

我们尝试部署运行的应用程序:

$Env:ASPNETCORE_ENVIRONMENT = "Production"    
dotnet publish -c Release

并使用 Visual Studiosbuild>publish界面。

根据此处的文档,该应用程序在部署用于生产时不应该需要 nodejs:

https://docs.microsoft.com/en-us/aspnet/core/spa/react?tabs=visual-studio

与开发构建不同,生产构建不需要在服务器上安装 Node.js。

我是 asp.net 的新手并在 IIS 上部署应用程序,也许解决方案很简单,但我们无法解决这个问题,提前致谢。

1个回答

如果您不想要任何 nodejs 依赖项,请确保禁用服务器端预渲染:https : //github.com/aspnet/JavaScriptServices/issues/932

如果您不进行服务器端预渲染,那么您的生产服务器上将不需要 Node.js,因为所有 JS 都将在客户端执行。

如果您正在执行服务器端预渲染(这是此 repo 中 React-Redux 模板中的默认设置),那么您的生产服务器上确实需要 Node.js,因为预渲染过程涉及在服务器上执行您的 JavaScript 代码。

要禁用服务器端预渲染,请执行以下操作:

  1. 删除asp-prerender-module="ClientApp/dist/main-server"Views>Home>Index.cshtml
  2. 删除@addtaghelper "*, Microsoft.AspNetCore.SpaServices"Views/_ViewImports.cshtml