AoT构建从模块声明中删除常量

时间:2018-12-05 15:08:30

标签: angular angular2-aot angular-aot

在我正在研究的项目中,我们将所有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字段未定义。

这是我做过的实验,以了解会发生什么:

  1. 如果这些URL位于同一个项目中(将文件从单独的程序包移至前端项目中),则该应用程序将按预期运行
  2. 如果使用export const URLS = {...}而不是module.exports导出URL,则该应用程序将按预期工作-不知道为什么,但是我不能使用它,因为不支持export语法按节点。
  3. 将包重写为打字稿并导入编译后的版本(带有.d.ts文件的.js后,出现以下错误: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一起使用)?

谢谢!

0 个答案:

没有答案