仅在构建用于生产的演示应用程序时获得“无法解析所有参数”

时间:2019-03-28 13:36:14

标签: angular

我在角度7上都有一个自定义库和一个演示项目。该库正在构建中,演示项目也很好,它们也可以正常运行。当我尝试使用prod标签ng build --prod构建演示站点时,会发生问题。然后我得到以下警告和错误:

  

警告:无法解析/Users/eestein/Documents/dev/sdk-front/node_modules/@proj/components/proj-components.d.ts中DialogService的所有参数:([[Object Object],[object对象],?,?,[对象对象],[对象对象])。这将成为Angular v6.x中的错误

     

警告:无法解析/Users/eestein/Documents/dev/sdk-front/node_modules/@proj/components/proj-components.d.ts中ɵa的所有参数:(?)。这将成为Angular v6.x中的错误

错误:

  

错误:无法解析/Users/eestein/Documents/dev/sdk-front/node_modules/@proj/components/proj-components.d.ts中ɵbw的所有参数:([[Object Object],[对象对象],[对象对象],[对象对象],?,[对象对象],[对象对象])。

我将警告和错误一直跟踪到令人讨厌的部分,它们是:

1-第一个警告:

...
constructor(
    private overlay: OverlayService,
    private injector: Injector,
    @Optional() @Inject(SdkConstants.Dialog.DefaultOptionsInjectionToken) private defaultOptions: DialogConfig,
    @Inject(SdkConstants.Dialog.ScrollStrategyInjectionToken) scrollStrategy: any,
    @Optional() @SkipSelf() private parentDialog: DialogService,
    private overlayContainer: OverlayContainerService
) {
    this.scrollStrategy = scrollStrategy;

    console.group('dialog');
    console.log('defaultOptions', defaultOptions);
    console.log('scrollStrategy', scrollStrategy);
    console.groupEnd();
}
...

编译器抱怨它无法解析defaultOptions和scrollStrategy,即使第一个标记为可选,第二个标记为提供:

export function dialogScrollStrategyProviderFactory(overlay: OverlayService): () => BaseScrollStrategy {
    const result = () => overlay.scrollStrategies.block();
    return result;
}

...

providers: [
    DialogService,
    {
        provide: SdkConstants.Dialog.ScrollStrategyInjectionToken,
        deps: [OverlayService],
        useFactory: dialogScrollStrategyProviderFactory
    }
]

2-第二次警告(与错误相同):

constructor(
    private dialogService: DialogService,
    private overlayService: OverlayService,
    private ngZone: NgZone,
    private viewContainerRef: ViewContainerRef,
    @Inject(SdkConstants.Datepicker.ScrollStrategyInjectionToken) scrollStrategy: any,
    @Optional() private dateService: DateService,
    @Optional() @Inject(DOCUMENT) document: any
) {
    this.document = document;
    this.scrollStrategy = scrollStrategy;

    console.group('datepicker');
    console.log('scrollStrategy', this.scrollStrategy);
    console.groupEnd();
}

即使提供了编译器,编译器仍抱怨无法解决scrollStrategy。

两个console.logs的输出:

enter image description here

如您所见,如果我运行演示项目和所引用的组件,则一切正常。只有当我在演示项目上运行ng build --prod时,才会出现构建错误。

在过去的两周里,我一直在GitHub和SO上阅读过很多有关“无法解析...的所有参数”和其他问题,但似乎没有一个问题与我的问题直接相关。 / p>

关于可能出什么问题的任何想法?

PS:请让我知道是否更多的代码有助于更好地识别问题。

更新(添加InjectionToken的定义):

export namespace SdkConstants {
    export class Dialog {
        public static DefaultOptionsKey = 'dialog-default-options';

        public static DefaultOptionsInjectionToken =
            new InjectionToken<() => BaseScrollStrategy>(Dialog.DefaultOptionsKey);
    }
}

1 个答案:

答案 0 :(得分:1)

我设法重现了您的问题,问题是您使用了名称空间作为常量。不建议在Angular中使用名称空间。还要检查此post

这里是一个示例,您可以使用类而不是名称空间来模拟相同的结构,从而解决了构建问题。

   function functionThatAddRoutesToModel(model){

     app.get(/exampleSchemaName/create, (req, res) => {
      // model.findOne etc etc
     })

     ...
   }