如何强制Angular cli从绝对位置而不是base-href提供bundle文件

Nad*_*v96 2 spring tomcat spring-boot angular-cli angular

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

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

我正在使用的cli构建命令是:

ng build --base-href /main/ -a main
Run Code Online (Sandbox Code Playgroud)

这将在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>
Run Code Online (Sandbox Code Playgroud)

这意味着将使用/ 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>
Run Code Online (Sandbox Code Playgroud)

我想过可能会添加一个脚本,它将在ng构建之后执行,它将修改脚本标签,但它是一个肮脏的解决方案,也不适用于ng build --watch,这对开发至关重要......

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

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

谢谢!

Ahm*_*lam 7

这是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>
Run Code Online (Sandbox Code Playgroud)