Lar*_*dam 5 runtime lazy-loading webpack angular2-routing angular
我目前正在开发一个项目,我们的首席架构师希望在运行时动态加载角度应用程序中的不同“兄弟”应用程序。我已经知道如何使用具有延迟加载的模块来完成此操作。但在我们的例子中,应用程序也单独存在于它们自己的环境中。有人对如何以有角度的方式实现这一目标有建议吗?
我已经尝试将它们分成自己的块并像这样加载它们,并且它部分起作用。但“主”应用程序需要了解同级应用程序,因此需要对其进行调整以延迟加载模块。
我主要好奇其他人在此类场景中使用的解决方案:)
最近,我开始了一个在工作中使用多个应用程序的项目。我们的应用程序有两种不同类型的用户:普通用户和管理员。大多数屏幕都是相同的,只有细微的差别。但有些菜单是普通用户看不到的,有些操作是用户无法执行的。*ngIf我们决定利用多个应用程序支持,而不是在应用程序中使用大量的s angular-cli。你可以在这里读更多关于它的内容
基本上,你需要做的是
在 中.angular-cli.json,将另一个应用程序添加到您的apps阵列中。
"apps": [
{
"name": "manager-app",
"root": "src/manager-app",
"assets": [
"assets",
{
"glob": "**/*",
"input": "../common/assets/",
"output": "./assets",
"allowOutsideOutDir": true
}
],
.... // bunch of other configs
},
{
"name": "user-app",
"root": "src/user-app",
"assets": [
"assets",
{
"glob": "**/*",
"input": "../common/assets/",
"output": "./assets",
"allowOutsideOutDir": true
}
],
....
},
{
"name": "common",
"root": "src/common",
"tsconfig": "tsconfig.app.json",
"appRoot": "src"
}
]
Run Code Online (Sandbox Code Playgroud)
所以,我有三个应用程序manager-app,,,,user-app。应用程序有自己的环境、配置、路由设置等。我分别为每个应用程序运行。commonmanageruserng build
另外,我有一个common包含共享组件、服务、模块、资产文件等的应用程序。
为了common从两个应用程序访问资产,您需要将以下 json 添加到assets每个应用程序的数组中.angular-cli.json
{
"glob": "**/*",
"input": "../common/assets/",
"output": "./assets",
"allowOutsideOutDir": true
}
Run Code Online (Sandbox Code Playgroud)
当你想并排运行它们时,
管理器应用程序->ng serve --port 8080 --app=manager-app
用户应用程序->ng serve --port 8081 --app=user-app
当你想构建它们时同样适用,
管理器应用程序->ng build --prod --app=manager-app
用户应用程序->ng build --prod --app=user-app
这将生成两个不同的dist文件夹,您可以在 中为每个文件夹定义它们.angular-cli.json。IEapps[0].outDir
此外,还有一个名为 Nx 的工具可以帮助您同时管理多个应用程序。你可以看一下这个例子。有关 Nx 的更多信息,请查看此处。
此外,为了使 AoT 编译器能够使用common应用程序中的组件,您需要将这些模块包含在tsconfig.app.json每个应用程序中。
manager-app/tsconfig.app.json
{
...
"include": [
"**/*.ts",
"../common/app/my-component/my-component.module.ts"
]
...
}
Run Code Online (Sandbox Code Playgroud)