我使用Angular CLI开发了一个应用程序,我希望在EAP服务器上部署此应用程序。
为此,我要对项目设置进行一些修改。 这些修改包括:
deployUrl
中设置angular-cli.json
。如果我不这样做,服务器将无法找到我生成的脚本文件。如果我将deployable.war部署到我的服务器,那么当包含它们时,所有脚本和样式表都必须像这样引用:/deployable/script.js
。将deployUrl
设置为deployable的名称可解决此问题。ng build -prod --base-href=./
。这允许服务器在资产文件夹下找到favicon和文件。当我运行ng build -prod --base-href=./
时,我已将输出文件夹设置为src / main / webapp,这是maven-war-plugin的默认文件夹。构建完成后,我运行mvn clean install
并将生成的文件部署到我的EAP服务器。
但是,使用这种方法进行制作时,访问该应用的唯一方法是通过http://hostname/deployablename
(我猜测这会触发index.html中的脚本加载),否则它似乎就是这样#'没有正确引导。这使得无法重新加载页面或为页面添加书签,即直接转到http://hostname/deployablename/somePath
将导致404。
我原本期望设置deployUrl
也可以解决我的资产问题,但似乎这个参数对html文件中引用的资源没有影响,这是我引用我的favicon和图像的地方。
使用这些设置,这是生成的最终index.html:
<html lang="en">
<head>
<meta charset="utf-8">
<title>Laman</title>
<base href="./">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" type="image/x-icon" href="favicon.ico">
<link href="/deployable/styles.css" rel="stylesheet"/></head>
<body>
<app-root></app-root>
<script type="text/javascript" src="/deployable/scripts.js"></script>
</body>
</html>
这是结果war文件中的结构:
war
|-- /assets
|-- /META-INF
|-- /WEB-INF
|-- favicon.ico
|-- index.html
|-- styles.css
`-- scripts.js
作为参考,这是我的文件夹结构:
project
|-- appsrc
| |-- assets
| |-- src
| | |-- routing-module.ts
| | `-- bootstrap-module.ts
| |-- index.html
| `-- favicon.ico
`-- src
`-- main
`-- webapp
appsrc是工作目录,构建脚本将最终文件放在src / main / webapp中。
我的路由模块看起来像这样。
const routes: Routes = [
{ path: 'template/:system/:name/:version', component: TemplateDetailComponent },
{ path: 'template/upload', component: TemplateUploadComponent },
{ path: 'templates', component: TemplateListComponent },
{ path: '', redirectTo: '/templates', pathMatch: 'full' },
{ path: '**', component: TemplateListComponent }
];
@NgModule({
imports: [ RouterModule.forRoot(routes) ],
exports: [ RouterModule ]
})
export class AppRoutingModule {};
因此,简而言之,除了书签/重新加载特定路径外,我已经完成了所有工作。
如何使war deployable和angular应用程序能够很好地协同工作?如果您需要有关我的设置或其他任何信息,请告诉我,我会提供。