如何部署角度应用以使其在任何路径下工作?

时间:2017-06-20 22:49:29

标签: angular deployment web-deployment

这可能是一个新手问题,但我在这里或角度文档中找不到任何答案。 假设我有一个简单的Angular应用程序(例如来自angular.io教程的hero editor),我想在不知道的情况下分发它将在我的网络服务器上运行的路径。它可以在:

换句话说,我需要生成的源(index.html及其角度关联的js文件)在任何路径下完全正常工作(我猜这就是为什么相对路径适用于.. 。)目前我生成的源仅在我将它们放在我的服务器的根目录时起作用,因为

<base href="/"> 

npm deploy已经在index.html中生成了......我天真地尝试将其更改为

<base href="./">

为了让我的浏览器将所包含的JS文件的路径解释为相对于index.html。有了这个,我的浏览器会正确地找到JS文件,但是角度应用程序不再有效(空白页面......) 任何想法应该是正确的“角度方式”这样做? 感谢您的帮助!

4 个答案:

答案 0 :(得分:1)

如果您使用的是角度CLI,则:

Html.ActionLink("Link Text", "Index", "DisplayFields", new { Area = 
"Adminstration" },null);

应该做的伎俩。

答案 1 :(得分:1)

也有--deploy-url选项。两者可以一起使用,但它们有不同的用途。

据我所知,deploy-url切换所做的就是将该URL附加到每个正在加载的资产上。例如:

ng build --aot --prod --base-href=/myapp/ --deploy-url=http://cdn.example.com/

产生这个:

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>DEFENDER</title>
  <base href="/myapp/">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="icon" type="image/x-icon" href="favicon.ico">
<link rel="stylesheet" href="http://cdn.example.com/styles.7bb5a49e96a80c1bcc2e.css"></head>
<body>
  <rr-root></rr-root>
<script type="text/javascript" src="http://cdn.example.com/runtime.e6ffc49faae27b0b8945.js"></script><script type="text/javascript" src="http://cdn.example.com/polyfills.9a5f6d04e0781d28c53e.js"></script><script type="text/javascript" src="http://cdn.example.com/main.03ca15166b3edeff4ad4.js"></script></body>
</html>

仍然不确定何时使用每个,但this guy发现使用它们一起工作: - )

注意:我不确定如何处理资产(例如图像)。我认为这只是主要的.js或样式文件,但是现在我只是为了测试目的而这样做。

答案 2 :(得分:0)

找到一个适合我的解决方案,看起来并不太丑:

ng build --base-href "./"

答案 3 :(得分:0)

您可以使用以下任何一种方法。

  1. 在域中部署到非根路径时,您将需要 手动更新dist / index.html中的<base href="/">标签。

    在这种情况下,您需要更新为 <base href="/angular2-test/">,我相信。

  2. ng build -prod --base-href \"/mysubfolder/\"在我的服务器上工作,而index.html中的原始文档没有更改,可以继续开发。 您可以在此处查看结果:http://foobar.cf/calculator