【问题标题】:Can we host two angular projects under same port我们可以在同一个端口下托管两个角度项目吗
【发布时间】:2019-08-24 02:58:49
【问题描述】:

我在angular2 开发了两个 Angular 项目。一个是公共门户网站,另一个是管理员。如果我将主门户托管为http://myaddress.com,那么我需要在其下托管管理员; IE。网址应为http://myaddress.com/admin。这必须在IIS 中进行测试。

【问题讨论】:

  • 你听说过特性模块和 authGuard 吗?
  • 不,我是 Angular 新手。有解决方案吗?
  • @TechDo 可能是我错了。但是你不能只在 root 中托管 main 并在 admin 目录中托管 admin 项目吗?

标签: angular iis hosting iis-10


【解决方案1】:

您只需将这两个项目托管在各自的目录中(需要 IIS 配置)并使用 base-href 选项构建/部署您的应用程序:

ng build --prod --base-href=/admin // admin app
ng build --prod // public app

【讨论】:

  • 是的@Cetia,它对我有用。我手动更改了 index.html 中的<base href="/admin/">
  • 你不应该。 ng serve 将在 / 处于开发模式时提供它,但会使用我给你的选项生成一个在 /admin 上工作的构建。
【解决方案2】:

对此我的回答主要是理论上的。

  1. 创建一个 admin 项目的 npm 包(类似 ng-packagr 会有所帮助)。有一种格式可以公开您要在此项目之外访问的所有模块。您可以在 google 上找到有关此的详细信息。类似index.ts
  2. 将其包含在主项目的package.json 中作为dependency
  3. 尝试在MainProject 内创建路由并在路由中使用延迟加载以获得更好的性能。比如:
export const AppRoutes: Routes = [
    {
        path: '',
        component: 'IAmINMainProjec',
        canActivate: [TrafficGuard],
        pathMatch: 'full'
       // and what not..
    },
    {
        path: 'admin',
         loadChildren:
                    './modules/widget-wrappers/#AdminWrapperModule',
        canActivate: [AuthGuard]
    },

AdminWrapperModule


@NgModule({
    imports: [
        CommonModule,
        AdminModule,
    ]
})
export class AdminWrapperModule{}

以上代码仅供参考:D

更新

在我的项目中,我们有几个模块(准确地说是 4 个),在您的情况下类似于 admin,我们意识到构建 4 个项目非常耗时(每个项目的构建时间约为7 分钟)。所以我们最终实现了nrwl。该工具帮助我们将所有 4 个项目拉到我们的主项目下。这有助于减少时间,因为我们不再需要在实际部署代码之前构建 2 个项目(一个 Admin 和另一个 MainProject)。如果您真的需要,请查看它。如果您需要更多项目隔离,请不要选择Nrwl

【讨论】:

  • 谢谢@Shashank Vivek,让我试试这个。
  • @TechDo 检查我的更新。我已经在我的项目中使用了它,但请检查您是否真的需要进入那个方向。它的所有项目特定决策
  • 嗨@Vivek,“正确答案”标记的方法对我有用(请参考)。所以,坦率地说,我没有花太多时间在你的方法上。
猜你喜欢
  • 2021-02-21
  • 1970-01-01
  • 2013-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-30
  • 2019-07-15
  • 2019-03-26
相关资源
最近更新 更多