Angular 角度应用中的多根模

Angular 角度应用中的多根模,angular,production,Angular,Production,我正在开发一个网站。此应用程序分为两部分:客户端部分和管理员部分。后者可通过登录屏幕访问。 该机制的核心是使用以下两个文件: main.ts: import {enableProdMode} from '@angular/core'; import {platformBrowserDynamic} from '@angular/platform-browser-dynamic'; import {AppModule} from './app/app.module'; import {envir

我正在开发一个网站。此应用程序分为两部分:客户端部分和管理员部分。后者可通过登录屏幕访问。 该机制的核心是使用以下两个文件:

main.ts:

import {enableProdMode} from '@angular/core';
import {platformBrowserDynamic} from '@angular/platform-browser-dynamic';

import {AppModule} from './app/app.module';
import {environment} from './environments/environment';
import {AdministrationModule} from "./administration/administration.module";

if (environment.production) {
    enableProdMode();
}

if (window.location.href.indexOf("admin") != -1) {
    platformBrowserDynamic().bootstrapModule(AdministrationModule);
}

else {
    platformBrowserDynamic().bootstrapModule(AppModule);
}
index.html:

<!doctype html>
<html lang="it">
<head>
    <meta charset="utf-8">
    <title>MyWebsite</title>
    <base href="/">

    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="icon" type="image/x-icon" href="icon.ico">
</head>
<body>
<app-root></app-root>
<app-administration></app-administration>
</body>
</html>
我现在有两个问题:这是一只角虫吗?使用
ngbuild
而不是
ngbuild--prod
命令投入生产是否可靠?我已经用
ng build
(在生产环境中)进行了测试,一切正常

啊,有一件事:在编译过程中会出现以下警告:

未启用惰性路由发现中的警告。因为有 中既没有entryModule,也没有可静态分析的引导代码 主文件


这不是一个bug。当您运行
ngbuild--prod
时,您可以在编译打开的情况下运行它。这意味着它会在构建之前编译应用程序,以确保所有设置都正确无误。看起来您在引导应用程序时正在加载不同的模块,我不确定AOT编译是否会同意这一点。您可以更改为使用并将应用程序分为两个不同的模块

如果确实需要,请尝试
ng build--prod--aot=false
ng build--prod--aot false

因为它看起来像一个可伸缩的应用程序,所以我认为最好的解决方案是使用MonoRepo模式。你将有多个应用程序与库,他们都将坐在同一个项目下。您可以利用大量的可重用性,维护将更容易

检查
Nrwl/Nx
查看
Angular
他们为此提供了很好的工具。它通过使用原理图支持angular cli。我想这对你会有很大帮助。也许你需要将你的应用部署到不同的地方,或者为每个应用使用不同的环境,而这个monorepo非常适合实现这个IMHO

有关monorepos的更多信息,请访问:

优势monorepo有许多潜在优势 单个存储库:

  • 易于代码重用–类似的功能或通信协议 可以抽象为共享库并直接包含在 项目,无需依赖项包管理器
  • 简化依赖关系管理–在多存储库环境中 多个项目依赖于第三方依赖关系,即依赖关系 可能被下载或构建多次。在monorepo中,构建 可以轻松优化,因为引用的依赖项都存在于 相同的代码基
  • 原子提交——当协同工作的项目 包含在单独的存储库中,版本需要同步 一个项目的版本与另一个项目协同工作。而且足够大 在项目中,管理依赖项之间的兼容版本可能会成为 依赖地狱[5]在monorepo中,这个问题可以被否定,因为 开发人员可以原子地更改多个项目
  • 大规模代码重构–由于开发人员可以访问整个项目,重构可以确保项目的每一部分都能继续进行 重构后的函数
  • 跨团队协作——以单回购方式 使用源依赖项(从 来源),团队可以改进其他团队正在进行的项目。 这导致了灵活的代码所有权
限制和缺点

  • 版本信息丢失–虽然不是必需的,但有些monorepo 生成在存储库中的所有项目中使用一个版本号。 这会导致丢失每个项目的语义版本控制
  • 缺乏每个项目的安全性–通过拆分存储库,访问存储库 可根据需要授予。monorepo允许对所有 项目中的软件,可能会出现新的安全问题

希望它能帮助您

您的angular project中可以有多个应用程序,这就是我解决类似情况的方法

这帮助我开始了


这里还有另一个很好的例子。

我的假设是,当执行
--prod
时,它使用
aot
,而
ng-service
ng-build
使用
jit
Ok。。。而且。。。为什么会有一些不同?提前(AOT),在构建时编译你的应用程序。实时(JIT),在运行时在浏览器中编译应用程序。@penleychan是的,我知道。但它们之间的本质区别在哪里?为什么即时编译器工作正常,而AOT没有?无论如何谢谢你,谢谢你。我还需要指定--build optimizer false
ng build --prod