在angular-cli中使用我的模块:在静态解析符号值时遇到错误

时间:2017-04-09 10:13:34

标签: angular typescript angular-compiler-cli

我知道我不是唯一一个对此术语有疑问的人。但有角度的家伙在这个词上有大约23个问题。我尝试了很多不同的东西。一个很重要:我尝试它的方式与@angular/http(导出裸工厂函数)的方式相同。

事实是:它有效 - 代码不正确。但是当我尝试导入模块时,我收到了这个错误:

ERROR in Error encountered resolving symbol values statically. Calling function 
'TranslatorConfig', function calls are not supported. Consider replacing the 
function or lambda with a reference to an exported function, resolving symbol 
TranslatorModule.forRoot

当我运行服务并在此错误后触摸该文件时,它会重新编译而不会出现错误。但是我尝试构建(ng build -e prod --aot false)我得到此错误并且构建停止。我在tsconfig.json中设置"strictMetadataEmit": true时也遇到此错误。我有一个TranslatorModule.metadata.json - 这不会是错误。

为什么它不起作用?这个错误消息的含义是什么?什么是符号值以及为什么它必须是静态的?如何让它工作?

测试时,您只需安装angular2-translator@2.0.0-alpha3即可。您可以在github上找到代码:https://github.com/tflori/angular2-translator/tree/2.0

我刚试过这些导出的函数和不同的提供程序,如下所示。

export function createTranslatorConfig(config: any = {}) {
    return new TranslatorConfig(config);
}

export function createTranslator(translatorContainer: TranslatorContainer, module: string) {
    return translatorContainer.getTranslator(module);
}

// ...
export class TranslatorModule {
    public static forRoot(config: any = {}, module: string = "default"): ModuleWithProviders {
        return {
            ngModule: TranslatorModule,
            providers: [
                { provide: "TranslatorConfigOptions", useValue: config },
                { provide: TranslatorConfig, useFactory: createTranslatorConfig, deps: [ "TranslatorConfigOptions" ] },
                { provide: "TranslatorModuleName", useValue: module },
                {
                    provide: Translator,
                    useFactory: createTranslator,
                    deps: [ TranslatorContainer, "TranslatorModuleName" ],
                },
            ],
        };
    }
}

结果只是另一条错误消息(现在'符号NgModule的'emakeDecorator'有问题:ERROR in Error encountered resolving symbol values statically. Calling function 'ɵmakeDecorator', function calls are not supported. Consider replacing the function or lambda with a reference to an exported function, resolving symbol NgModule

1 个答案:

答案 0 :(得分:0)

我只回答最后一个问题。我仍然不知道他们对“符号价值”的含义是什么,而且这个消息仍然让我感到困惑。

最后,useValue只能是一个值 - 你不能在这里或之前调用函数并给出结果。需要信息的工厂需要来自其他提供商的工厂。

巴巴尔的链接帮助我得出了这样的结论:

<DIV>

我在问题中发布的内容也有效。由于将模块链接到测试项目的node_modules,我收到此错误。

我仍然在寻找问题的答案:他们对我有什么要求?为什么?