小编典典

如何强制Angular CLI从绝对位置而不是从base-href服务捆绑文件

tomcat

我正在努力将使用cli构建的Angular 4项目部署到Spring引导服务器上。

.angular-cli.json中, 我添加了outdir属性,该属性指向Spring
webapp文件夹内的自定义文件夹,该文件夹可直接在服务器(webapp / main)中访问。

我正在使用的cli build命令是:

ng build --base-href /main/ -a main

它将在webapp中创建主文件夹,其中index.html包含以下脚本标记:

<base href="/main/">
...
<script type="text/javascript" src="inline.bundle.js"></script>
<script type="text/javascript" src="polyfills.bundle.js"></script>
<script type="text/javascript" src="vendor.bundle.js"></script>
<script type="text/javascript" src="main.bundle.js"></script></body>

这意味着将使用/ main前缀请求这些文件,例如 localhost:8080 / main / inline.bundle.js

这对于基本应用程序来说很好,但是当将路由添加到有角度的应用程序时就成为一个问题(在spring,我使用/
main为所有路径提供index.html,以允许有角度的路由正常工作,这导致捆绑软件的重定向循环, 因为它们也以/ main开头

如何强制生成的脚本标签使用自定义位置? 或者至少指定绝对位置,而不是在基本href上中继(这样我就可以将outDir属性更改为main-
app,并解决问题)。

所需的解决方案将是这样的:

<script type="text/javascript" src="/main-app/main.bundle.js"></script>

我想过也许添加一个将在ng build之后执行的脚本,该脚本将修改script标签,但这是一个肮脏的解决方案,并且也无法与 ng build
–watch一起使用
,这对于开发至关重要。

作为参考,以下是映射/ main请求的Spring控制器函数:

@RequestMapping("main/**")
public String mainRoute(HttpServletRequest request) {
       return "/main/index.html";
}

谢谢!


阅读 595

收藏
2020-06-16

共1个答案

小编典典

这是ng buildWiki:https :
//github.com/angular/angular-
cli/wiki/build

请使用--deploy-url="/main-app/"选项。这将生成:

<script type="text/javascript" src="/main-app/inline.bundle.js"></script>
<script type="text/javascript" src="/main-app/polyfills.bundle.js"></script>
<script type="text/javascript" src="/main-app/scripts.bundle.js"></script>
<script type="text/javascript" src="/main-app/styles.bundle.js"></script>
<script type="text/javascript" src="/main-app/vendor.bundle.js"></script>
<script type="text/javascript" src="/main-app/main.bundle.js"></script>
2020-06-16