在静态解析符号值时遇到错误。调用函数'ɵmakeDecorator',不支持函数调用

时间:2017-09-26 10:27:53

标签: angularjs

我制作了一个自定义的“角度组件库”。我称这个库为ACL

我正在将库导入另一个项目。我跑的时候

ionic-app-scripts build,它成功构建

但是,当我跑步时

ionic-app-scripts build --prod

它给了我以下错误消息。任何一个有任何线索的人。

  

在静态解析符号值时遇到错误。调用函数'ɵmakeDecorator',不支持函数调用。

     

考虑使用对导出函数的引用替换函数或lambda,在C:/Monsenso-Source/administration/node_modules/@monsenso/components/node_modules/@angular/core/core.d.ts中解析符号NgModule,在C:/Monsenso-Source/administration/node_modules/@monsenso/components/dist/web.module.d.ts中解析符号WebModule,在C:/ Monsenso-Source / administration / node_modules / @ monsenso / components /中解析符号WebModule DIST / web.module.d.ts       在错误(本机)       at syntaxError(C:\ Monsenso-Source \ administration \ node_modules \ @angular \ compiler \ bundles \ compiler.umd.js:1550:34)       在simplifyInContext(C:\ Monsenso-Source \ administration \ node_modules \ @angular \ compiler \ bundles \ compiler.umd.js:23870:23)       在StaticReflector.simplify(C:\ Monsenso-Source \ administration \ node_modules \ @angular \ compiler \ bundles \ compiler.umd.js:23882:13)       在StaticReflector.annotations(C:\ Monsenso-Source \ administration \ node_modules \ @angular \ compiler \ bundles \ compiler.umd.js:23331:41)       在NgModuleResolver.resolve(C:\ Monsenso-Source \ administration \ node_modules \ @angular \ compiler \ bundles \ compiler.umd.js:13883:70)       在CompileMetadataResolver.getNgModuleMetadata(C:\ Monsenso-Source \ administration \ node_modules \ @angular \ compiler \ bundles \ compiler.umd.js:14473:60)       at addNgModule(C:\ Monsenso-Source \ administration \ node_modules \ @angular \ compiler \ bundles \ compiler.umd.js:23050:58)       在C:\ Monsenso-Source \ administration \ node_modules \ @angular \ compiler \ bundles \ compiler.umd.js:23061:14       at Array.forEach(native)   错误命令失败,退出代码为1。

如果执行以下命令,也会出现同样的错误:

"node_modules/.bin/ngc" -p tsconfig-aot.json

ACL的代码

页模板-middle.component.html

<ion-content padding>
    <ion-grid>
        <ion-row>
            <ion-col col-4>
                <!-- empty -->
            </ion-col>
            <ion-col col-4>
                <ng-content></ng-content>
            </ion-col>
            <ion-col col-4>
                <!-- empty -->
            </ion-col>      
        </ion-row>
    </ion-grid>      
</ion-content>

页模板-middle.component.ts

import { Component, OnInit } from '@angular/core';

@Component({
    selector: 'mon-page-template-middle',
    templateUrl: './page-template-middle.component.html'
})
export class PageTemplateMiddleComponent {

}

web.module.ts

import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { FormsModule } from '@angular/forms';
import { HttpModule } from '@angular/http';
import { IonicApp, IonicModule } from 'ionic-angular';

import {
    PageTemplateMiddleComponent
} from './components/page-template-middle/page-template-middle.component';

@NgModule({
    declarations: [
        PageTemplateMiddleComponent
    ],
    exports: [
        PageTemplateMiddleComponent
    ],
    imports: [
        BrowserModule,
        FormsModule,
        HttpModule,
        IonicModule
    ],
    providers: [

    ]
})

export class WebModule {
}

消费者项目代码

app.module.ts

import { BrowserModule } from '@angular/platform-browser';
import { ErrorHandler, NgModule } from '@angular/core';
import { IonicApp, IonicErrorHandler, IonicModule } from 'ionic-angular';
import { WebModule } from '@monsenso/components';

import { MyAppComponent } from './app.component';
import { HomePageComponent } from '../pages/home/home';

@NgModule({
    bootstrap: [IonicApp],
    declarations: [
        MyAppComponent,
        HomePageComponent
    ],
    entryComponents: [
        MyAppComponent,
        HomePageComponent
    ],
    imports: [
        BrowserModule,
        WebModule,
        IonicModule.forRoot(MyAppComponent)
    ],
    providers: [
        {provide: ErrorHandler, useClass: IonicErrorHandler}
    ]
})
export class AppModule {

}

1 个答案:

答案 0 :(得分:0)

我无法对您正在处理的代码做出任何陈述,因为您还没有在您的问题中粘贴任何代码。但总的来说,这个错误与Angular的AOT编译器无法解决参数&#34;类型&#34;在未从模块中导出的匿名函数中。

例如,假设我有一个工厂功能,我想用它来提供一些服务,以便在我的某些组件中使用。

import { NgModule } from '@angular/core';
import { MyService } from './my-service';

@NgModule({
  providers: [{
    provide: MyService,
    useFactory: () => {
      return new MyService();
    },
  }],
})
export class MyModule {}

在该示例中,您可以看到一个匿名(未命名)函数被用作我的工厂函数。如果您没有编译AOT,这将正常工作,否则会中断。

要解决此问题,需要从模块中导出该函数(&#34;模块&#34;在Typescript意义上)。

import { NgModule } from '@angular/core';
import { MyService } from './my-service';

export function myServiceFactory() {
  return new MyService();
}

@NgModule({
  providers: [{
    provide: MyService,
    useFactory: myServiceFactory,
  }],
})
export class MyModule {}

我不能说你的错误与使用工厂函数的ACL Angular Module完全相关。但是,您在问题中粘贴的错误与Angular无法静态分析函数完全相关,因为它尚未导出。