我在角度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],[对象对象],[对象对象],[对象对象],?,[对象对象],[对象对象])。
我将警告和错误一直跟踪到令人讨厌的部分,它们是:
...
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
}
]
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的输出:
如您所见,如果我运行演示项目和所引用的组件,则一切正常。只有当我在演示项目上运行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);
}
}
答案 0 :(得分:1)
我设法重现了您的问题,问题是您使用了名称空间作为常量。不建议在Angular中使用名称空间。还要检查此post。
这里是一个示例,您可以使用类而不是名称空间来模拟相同的结构,从而解决了构建问题。
function functionThatAddRoutesToModel(model){
app.get(/exampleSchemaName/create, (req, res) => {
// model.findOne etc etc
})
...
}