Angular 是否可以在不使用npm的情况下导入角度库?

Angular 是否可以在不使用npm的情况下导入角度库?,angular,Angular,我收到管理层的请求,我们有一个Angular应用程序,我们正试图在一个单独的项目中构建一个新的应用程序,但我们希望将其集成到主应用程序中。 目标是拥有一个独立的新应用程序,可以独立于主应用程序进行开发和部署 我考虑了创建一个库项目的选项,这样我们就可以导入到主应用程序中,如果希望使用npm包分发应用程序库,这是可行的,但这不允许我们独立部署新应用程序而不必部署主应用程序 有没有办法让一个单独的应用程序angular也导入到主应用程序angular中,我可以这样做 我尝试将库的dist文件夹部署到

我收到管理层的请求,我们有一个Angular应用程序,我们正试图在一个单独的项目中构建一个新的应用程序,但我们希望将其集成到主应用程序中。 目标是拥有一个独立的新应用程序,可以独立于主应用程序进行开发和部署

我考虑了创建一个库项目的选项,这样我们就可以导入到主应用程序中,如果希望使用npm包分发应用程序库,这是可行的,但这不允许我们独立部署新应用程序而不必部署主应用程序

有没有办法让一个单独的应用程序angular也导入到主应用程序angular中,我可以这样做

我尝试将库的dist文件夹部署到Github,并将其导入angular-cli.json中的脚本,但没有成功


任何帮助都将不胜感激。

这里有几个选项,但没有什么是“完美的”,因为您必须准确地找出您想要使用的路线等,并看看是否可行。例如,如果您想要SPA,那么这两个应用程序都将尝试处理“/”

我将假设一个示例,在文档中有一个主应用程序,如英雄之旅应用程序,但您希望添加一个Wiki应用程序。对于您的规范,我假设您希望wiki应用程序在主应用程序中运行时位于/wiki下,并且在它自己的/wiki下运行。例如,当wiki单独运行时,主应用程序中的主应用程序/wiki/pages/tutorial将与/pages/tutorial运行相同

选项1:完全分离应用程序,在主应用程序中使用编译的wiki 我想这就是你想做的。这些应用程序将不会共享任何服务或组件,并将单独编译。我能想到的唯一方法是将它们编译成单独的应用程序,并将其中一个应用程序托管在另一个应用程序的子文件夹中。您的服务器无法重新写入所有URL,但这取决于您应该能够将/wiki路由到第二个应用程序的类型。您必须捕获SPA中指向“/wiki”的任何链接,并强制重新加载整个页面,以便浏览器拾取wiki的index.html。使用base href可能也有一些问题需要解决,但它应该可以工作

选项2:一次回购中的独立应用程序 对此有很好的概述。Angular的最后几个版本允许您在同一文件夹中创建单独的模块和应用程序。无耻地抄袭:

App1模块

App1共享模块

组合应用程序

每一个都将单独运行,但它们也将一起运行。但是,您的路由可能会受到限制,因此您必须为这两个应用程序创建一个子路由,它们将单独运行,并且与相同的URL一起运行。即,第一个应用程序中的所有内容都将在app1/下,即使是单独运行

备选案文3:图书馆
您可以使用wiki服务和组件进行创建。然后,您可以将它安装到主应用程序和骨架应用程序中,让wiki自己运行。您可以公开Routes对象,并在主应用程序中使用forChild,在wiki应用程序中使用forRoot。

如果其他人想知道如何做到这一点,在本例中,我使用Github标记解决了这个问题


我运行了:npm install github:org/lib

要独立部署两个应用程序,它们必须是独立的,不能相互引用。您可以尝试通过纯javascript在任何需要的地方引导辅助应用程序。或者在服务器上配置路由,将页面X、Y、Z路由到主应用程序,将页面A、B、C路由到辅助应用程序。听到这些,我必须想到web组件。Angular Element如果你没有将新应用加载到iframe或主应用中的某个内容中,那么不,你无法在新应用中进行更新并将其自动反映到主应用中。如果新应用程序是主应用程序的一部分,则对其进行更新与对主应用程序进行更新完全相同。因此,这两方面都需要部署。感谢大家的评论,我对如何解决这一问题有了一个很好的想法。我真的非常感谢你的建议,它非常清晰和简洁。谢谢
@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    BrowserModule,
    AppRoutingModule
  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule { }
@NgModule({})
export class App1SharedModule{
  static forRoot(): ModuleWithProviders {
    return {
      ngModule: AppModule,
      providers: []
    }
  }
}
imports: [
  BrowserModule,
  AppRoutingModule,
  App1SharedModule.forRoot(),
  App2SharedModule.forRoot()
],