IIS 生产服务器上没有转译

No transpilation on IIS production server

首先,这项技术中的很多内容对我来说都是全新的,所以对于菜鸟问题​​,我深表歉意。另外,这是我第一次 post 到 SO(经过多年的阅读),所以请原谅格式。

我有一个 Web 应用程序,我正在通过 MSVS 2017 运行 宁。我正在用 React.js 编写我的前端。通过 nuget 安装适当的包后,当我 运行 在我的本地开发机器上(使用 iisexpress)调试和发布版本时,我有一些东西可以工作。

但是,在我提交源代码更改并将其推送到测试服务器 (IIS) 后,应用 运行 没问题。但是,不会转译从测试服务器返回的 JSX 文件。我刚得到原始的 JSX 文件。然而,在我的本地机器上,返回的文件被转译。

我有一个带有单个静态 Configure 方法的 ReactConfig.cs 文件,我在其中调用通过 ReactSiteConfiguration.Configuration.AddScript 添加我的 JSX 文件,但这似乎是不必要的,因为我仍然得到一个转译结果即使被注释掉。在我的 ReactConfig.cs 文件的顶部,我有类似于以下内容的内容: [assembly: webActivatorEx.PreApplicationStartMethod(typeof(MyApp.Api.Controllers.MyController), "AutoMapperStart")]

那么,我的问题是转译是如何在我的开发机器上发生的,而不是在部署机器上发生的。

在我的 web.config 文件中,我都试过了:

<httpHandlers>
    <add verb="GET" path="*.jsx" type="React.Web.BabelHandlerFactory, React.Web" />
</httpHandlers>

<remove name="Babel" /><add name="Babel" verb="GET" path="*.jsx" type="React.Web.BabelHandlerFactory, React.Web" preCondition="integratedMode" /></handlers>

但在部署的服务器上似乎都没有什么不同。

如果有人对我下一步应该看什么提出建议,将不胜感激。

更新: 我注意到允许我的开发环境进行转译的相关项目是我的 web.config 文件中上面的第二个代码部分。但是,我在服务器上看不到相同的行。 web.config 文件通常是每个部署 'hand edited' 吗?

所以,这就是我最终发现对我有用的东西。

首先,是的,web.config 文件作为模板部署。然后根据需要手动配置。

其次,更重要的是,让服务器将 JSX 渲染为纯 JS 有两个部分。

  1. 我需要 web.config 文件中的以下内容:
<system.webServer>
    <handlers>
        <remove name="Babel" />
        <add name="Babel" verb="GET" path="*.jsx"
            type="React.Web.BabelHandlerFactory, React.Web"
            preCondition="integratedMode"/>
    </handlers>
</system.webServer>
  1. 最后,在 assemblyBinding 部分:
  <dependentAssembly>
    <assemblyIdentity name="JavaScriptEngineSwitcher.Core" publicKeyToken="c608b2a8cc9e4472" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-2.4.9.0" newVersion="2.4.9.0" />
  </dependentAssembly>