当前位置: 首页 > 面试题库 >

如何在Azure网站上的React App中替换%PUBLIC_URL%

楚流觞
2023-03-14
问题内容

我有一个React应用程序,在本地运行良好,当我将其部署到Azure时,在index.html上出现一些404错误

所有带有标签%PUBLIC_URL%的标签

根据文档,它们将在构建过程中被替换,但不确定如何完成,因此在部署时,将正确的URL放置到位

<!doctype html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
    <meta name="theme-color" content="#000000">
    <!--
          manifest.json provides metadata used when your web app is added to the
          homescreen on Android. See https://developers.google.com/web/fundamentals/engage-and-retain/web-app-manifest/
    -->
    <link rel="manifest" href="%PUBLIC_URL%/manifest.json">
    <link rel="icon" type="image/png" sizes="32x32" href="%PUBLIC_URL%/favicon.png">
    <link href="https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700" rel="stylesheet" async>
    <link async rel="stylesheet" href="%PUBLIC_URL%/css/ionicons.min.css">
    <link rel="stylesheet" href="https://unpkg.com/react-instantsearch-theme-algolia@4.0.0/style.min.css">
    <link rel="stylesheet" href="https://unpkg.com/leaflet@1.2.0/dist/leaflet.css"
         integrity="sha512-M2wvCLH6DSRazYeZRIm1JnYyh22purTM+FDB5CsyxtQJYeKq83arPe5wgbNmcFXGqiSH2XR8dT/fJISVA1r/zQ=="
         crossorigin="" async/>
    <!--
          Notice the use of %PUBLIC_URL% in the tags above.
          It will be replaced with the URL of the `public` folder during the build.
          Only files inside the `public` folder can be referenced from the HTML.

          Unlike "/favicon.ico" or "favicon.ico", "%PUBLIC_URL%/favicon.ico" will
          work correctly both with client-side routing and a non-root public URL.
          Learn how to configure a non-root public URL by running `npm run build`.
    -->
    <title>Isomorphic</title>
  </head>
  <body>
    <noscript>
      You need to enable JavaScript to run this app.
    </noscript>
    <div id="root"></div>
    <!--
          This HTML file is a template.
          If you open it directly in the browser, you will see an empty page.

          You can add webfonts, meta tags, or analytics to this file.
          The build step will place the bundled scripts into the <body> tag.

          To begin the development, run `npm start` or `yarn start`.
          To create a production bundle, use `npm run build` or `yarn build`.
    -->
  </body>
</html>

问题答案:

如何替换%PUBLIC_URL%

默认情况下,假设您的应用托管在服务器根目录下,Create React App会生成一个构建。example.com
如果您的网站不是从该根目录提供的,(也许您想从进行服务example.com/relativepath,则可以通过在package.json中指定主页来覆盖它

"homepage": "http://example.com/relativepath",

这将使Create React App可以正确推断要在生成的HTML文件中使用的根路径。

但是,就您的情况而言,我认为您会收到404错误,因为Azure正在尝试查找index.html(或其他一些名为index。*的名称)。要解决此问题,Azure需要知道如何将预期的路由传递到位于站点根目录的唯一的index.html。使用以下内容创建一个名为web.configinside
/site/wwwroot文件夹的新文件:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
   <system.webServer>
      <rewrite>
         <rules>
            <rule name="React Routes" stopProcessing="true">
               <match url=".*" />
               <conditions logicalGrouping="MatchAll">
                  <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
                  <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
                  <add input="{REQUEST_URI}" pattern="^/(api)" negate="true" />
               </conditions>
               <action type="Rewrite" url="/" />
            </rule>
         </rules>
      </rewrite>
   </system.webServer>
</configuration>

这将告诉Azure重写所有URL,就像它们指向我们的根文件一样,并且我们的SPA应用程序可以正确处理链接。

参考文献:

  • https://facebook.github.io/create-react-app/docs/deployment#building-for-relative-paths

  • https://medium.com/@to_pe/deploying-create-react-app-on-microsoft-azure-c0f6686a4321

希望对您有帮助



 类似资料:
  • 问题内容: 我想在Windows Azure网站上运行,我想通过默认的* .azurewebsites.net证书使用ssl。它无需执行任何操作即可工作,但是http也可用于每个目的地,而不仅仅是https。如何强制从http重定向到https?通常我可以做类似的事情: 但由于我对* .azurewebsites.net证书一无所知,例如其路径,因此无法正常工作。 如何将全部或部分请求重定向到ht

  • 我在Azure上创建了一个基于java的网站,并在使用“自定义创建”时选择tomcat作为容器,然后就有了一个空的网站,我可以使用ftp上传WAR文件,但不能接触tomcat文件。我需要更改JVM的堆大小,怎么做?

  • 所以,我有一个按钮,在黑暗和光明模式之间切换(我的网站默认是黑暗的),它可以工作,但现在我需要它保持在任何切换状态,在多个页面选择。我怀疑这和会话存储有关。也不想使用jQuery。我可以在代码中添加什么来实现这一点呢? 我有五个页面都链接到了id为“dark”的styles.css,然后在JS中我引用了第二个样式表light.css或JS中的“light”,所以我要切换样式表。所有五个页面的页脚都

  • 问题内容: 我正在尝试在Azure网站上使用NPM运行一些预部署任务(单元测试等),但是VM上的节点版本为v0.10.32,当前节点版本为v4.2.4。 我没有通过SCM网站对命令行的非管理访问权限,没有RDP等。 有什么办法升级吗? 问题答案: 您可以使用package.json文件指定运行应用程序的节点的版本。加: 例如: 更多信息:https : //azure.microsoft.com/

  • 我在站点上运行了几个Azure webjobs,其中一些是触发的,另一些是连续的。 我知道触发的webjobs只能在一个实例上运行一次。 我的当前设置是: 我的问题: > 是否可以防止webjobs在生产和临时之间交换(webjobs实际上是与网站完全不同的代码) WebJobs到底交换了什么?二进制文件?日程表?两者都有? 谢谢

  • 问题内容: 因此,我对于Gen中的jQuery和Javascript还是很陌生。我喜欢JQuery使用的简单load()功能。我的问题:是否可以使用load()函数从外部网站加载内容? 试图同步要加载到#placeholder div中的特定Facebook页面上的内容。 问题答案: 通常,出于安全原因,不能,您不能。 有两种选择: 使用JSONP-这需要服务器支持以该格式返回数据。 使用模拟您想

  • 下面的javascript代码来自这个问题的答案,非常适合替换网页上的文本。在Safari和Chrome中使用javascript控制台都取得了成功的结果。 但是,当我将其保存为替换_文本时。js并尝试使用Applescript运行它,在Safari和Chrome中都会返回缺少的值 我也尝试运行javascript直接从Script编辑器中的告诉块,转义引号和转义后,而不是使用replace_te

  • 例如,我有这样的代码 如何将“\on the”替换为replace eAll()?