【问题标题】:Error encountered resolving symbol values statically. Calling function 'ɵmakeDecorator', function calls are not supported静态解析符号值时遇到错误。调用函数'ɵmakeDecorator',不支持函数调用
【发布时间】:2017-09-26 10:27:52
【问题描述】:

我制作了一个自定义的“角度组件库”。我把这个库称为 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 在错误(本机) 在 syntaxError (C:\Monsenso-Source\administration\node_modules\@angular\compiler\bundles\compiler.umd.js:1550:34) 在 simpleInContext (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) 在 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 在 Array.forEach (本机) error 命令失败,退出代码为 1。


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

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

ACL 代码

page-template-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>

page-template-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 {

}

【问题讨论】:

    标签: angularjs


    【解决方案1】:

    我无法就您正在处理的代码发表任何声明,因为您没有在问题中粘贴任何内容。但总的来说,此错误与 Angular 的 AOT 编译器无法解析未从您的模块导出的匿名函数中的参数“类型”有关。

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

    import { NgModule } from '@angular/core';
    import { MyService } from './my-service';
    
    @NgModule({
      providers: [{
        provide: MyService,
        useFactory: () => {
          return new MyService();
        },
      }],
    })
    export class MyModule {}
    

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

    要解决此问题,需要从模块(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 模块完全相关。但是您在问题中粘贴的错误绝对与 Angular 由于尚未导出而无法静态分析函数有关。

    【讨论】:

    • 我已经在上面的帖子中添加了代码以获得更多帮助。你想让我也分享一些其他的代码吗?请告诉我。真的很感谢你的时间。谢谢
    猜你喜欢
    • 2017-07-06
    • 2017-06-07
    • 2017-07-28
    • 2018-03-04
    • 1970-01-01
    • 2017-10-24
    • 1970-01-01
    • 2018-01-03
    • 2017-09-06
    相关资源
    最近更新 更多