在我正在研究的项目中,我们将所有URL保留在单独的npm包中,以便它们在后端的angular和node之间共享。
网址被保存为一个简单的对象:
exports.URLS = {
'login': '/',
'portal': '/portal'
};
这是带有路由器配置的应用程序模块:
@NgModule({
declarations: [
AppComponent,
RootComponent
],
imports: [
BrowserModule,
UIRouterModule.forRoot({
otherwise: '/',
states: [
{
name: 'root',
url: URLS['login'],
component: RootComponent
}
]
})
],
providers: [
{
provide: NgModuleFactoryLoader,
useClass: SystemJsNgModuleLoader
}
],
bootstrap: [AppComponent]
})
export class AppModule { }
在开发模式下(无aot)构建时,该应用程序运行良好,而aot所显示的全部都是黑页。发生这种情况是因为传递给UIRouter的状态没有网址-状态定义上的url
字段未定义。
这是我做过的实验,以了解会发生什么:
export const URLS = {...}
而不是module.exports
导出URL,则该应用程序将按预期工作-不知道为什么,但是我不能使用它,因为不支持export
语法按节点。Only initialized variables and constants can be referenced in decorators because the value of this variable is needed by the template compiler in 'URLS'
。导入源.ts
文件使该应用程序可以像预期的。有什么方法可以将文件保存在单独的项目中,并让AOT在编译后的代码中包含这些值?
我也有兴趣了解为什么会发生这种情况(尤其是第二个实验-我不明白为什么它可以与export const
一起使用)?
谢谢!