Angular CLI和java war可部署,无法重新加载特定路径

时间:2017-06-29 11:18:10

标签: java angular typescript war

我使用Angular CLI开发了一个应用程序,我希望在EAP服务器上部署此应用程序。

为此,我要对项目设置进行一些修改。 这些修改包括:

  • deployUrl中设置angular-cli.json。如果我不这样做,服务器将无法找到我生成的脚本文件。如果我将deployable.war部署到我的服务器,那么当包含它们时,所有脚本和样式表都必须像这样引用:/deployable/script.js。将deployUrl设置为deployable的名称可解决此问题。
  • 要使资产生效(默认资产文件夹,在src / assets下),我必须为cli build命令提供base-href; 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应用程序能够很好地协同工作?如果您需要有关我的设置或其他任何信息,请告诉我,我会提供。

0 个答案:

没有答案