我正在努力将使用 cli 构建的 Angular 4 项目部署到 Spring boot 服务器。
In the .angular-cli.json我添加了 outdir 属性,它指向 Spring webapp 文件夹内的自定义文件夹,可以直接在服务器 (webapp/main) 中访问该文件夹。
我使用的 cli 构建命令是:
ng build --base-href /main/ -a main
这会在 web 应用程序中创建主文件夹,其中的 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 前缀请求,例如本地主机: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 构建之后执行的脚本,该脚本将修改脚本标签,但这是一个肮脏的解决方案,并且也无法与ng 构建 --watch,这对发展至关重要...
作为参考,这里是映射 /main 请求的 Spring 控制器函数:
@RequestMapping("main/**")
public String mainRoute(HttpServletRequest request) {
return "/main/index.html";
}
Thanks!