我有一个用于演示目的的角度模块(DevShowcaseModule)。此模块不应包含在生产版本中。为了向最终用户隐藏此演示,并防止生产中的演示代码错误。
环境:
这是我的app-routing.module.ts
{
path: APP_NAV_ITEMS.DEV_SHOWCASE,
canActivate: [ AuthGuard ],
loadChildren: './_dev-showcase/dev-showcase.module#DevShowcaseModule',
}
我试图从tsconfig.json中排除模块文件夹。但这不起作用,我仍然可以调用路由,并且演示模块已加载。
{
"compileOnSave": false,
"compilerOptions": {
"baseUrl": "./",
"importHelpers": true,
"outDir": "./dist/out-tsc",
"sourceMap": true,
"declaration": false,
"module": "es2015",
"moduleResolution": "node",
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"target": "es5",
"typeRoots": [
"node_modules/@types"
],
"lib": [
"es2018",
"dom"
]
},
"exclude": [
"app/_dev-showcase/*"
]
}
任何想法如何正确执行?
谢谢!
答案 0 :(得分:2)
我认为您可以利用CLI fileReplacements功能,例如:
angular.json
"configurations": {
"production": {
"fileReplacements": [
...
{
"replace": "src/app/demo.routes.ts",
"with": "src/app/demo.routes.prod.ts"
}
],
demo.routes.ts
import { Routes } from '@angular/router';
export const demoRoutes: Routes = [
{
path: 'demo',
loadChildren: './demo/demo.module#DemoModule'
}
];
demo.routes.prod.ts
export const demoRoutes = [];
根路由器配置应如下所示:
import { demoRoutes } from './demo.routes';
RouterModule.forRoot([
{
path: '',
component: HomeComponent
},
...demoRoutes
])
使用此方法,cli将仅在开发人员模式下捆绑DemoModule
。
答案 1 :(得分:0)
这是另一种可能的解决方案。 PROD模式工作正常。
唯一的缺点是,在服务后不会加载DemoModule。
需要代码更改才能启动编译器,然后加载DemoModule。
是否有机会在不更改代码的情况下加载延迟加载的DemoModule?
if(!environment.production) {
console.log('Application is running in dev mode');
routes.unshift(
{
path: APP_NAV_ITEMS.DEV_SHOWCASE,
canActivate: [ AuthGuard ],
loadChildren: './_demo/demo.module#DemoModule',
},
)
}else{
console.log('Application is running in production mode');
}
@NgModule({
imports: [ RouterModule.forRoot(routes, { useHash: true }) ],
exports: [ RouterModule ]
})
export class AppRoutingModule {
}