最近,我开始了一个涉及多个应用的项目。我们的应用有两种不同的用户,普通用户和经理。大部分界面都是相同的,只有一些细微的差别。但是有些菜单普通用户看不到,有些操作用户也无法执行。为了避免在应用程序中使用大量的*ngIf
,我们决定利用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"
}
]
manager-app
、user-app
和 common
。 manager
和 user
应用程序拥有各自的环境、配置、路由设置等。我分别运行 ng build
来构建它们。common
应用程序。common
资源,您需要将以下 JSON 添加到每个应用程序的 .angular-cli.json
文件的 assets
数组中。{
"glob": "**/*",
"input": "../common/assets/",
"output": "./assets",
"allowOutsideOutDir": true
}
当您想要并排运行它们时,
manager-app -> ng serve --port 8080 --app=manager-app
user-app -> ng serve --port 8081 --app=user-app
当您想要构建它们时,也适用于相同的内容,
manager-app -> ng build --prod --app=manager-app
user-app -> ng build --prod --app=user-app
这将生成两个不同的 dist
文件夹,您在其中为每个应用程序定义了 .angular-cli.json
。 即 apps[0].outDir
此外,有一个名为Nx的工具可以帮助您同时管理多个应用程序。 您可以查看这个example。 有关Nx的更多信息,请访问here。
此外,要让AoT编译器能够使用common
应用程序中的组件,您需要在每个应用程序的tsconfig.app.json
中包含这些模块。
manager-app/tsconfig.app.json
{
...
"include": [
"**/*.ts",
"../common/app/my-component/my-component.module.ts"
]
...
}