Looks like this question needs some clarification:
Why do we see this error message?
If a component library for angular2 wants to be compatible with AOT it needs to be compiled with ngc (@angular/compiler-cli). This will generate *.metadata.json files for each component. Also this generates js files for each component that includes informations about the constructor parameters. If the package was compiled with a version of @angular/compiler-cli < 2.3.0 this would be (for example):
MdlBadgeDirective.ctorParameters = [
{ type: ElementRef, },
{ type: Renderer, },
];
If the package is compiled with a newer version this will be:
MdlBadgeDirective.ctorParameters = function () { return [
{ type: ElementRef, },
{ type: Renderer, },
]; };
As you can see the newer version is a function and no longer an array. So the error
ctorParameters.map is not a function
makes sense. Because map is a member of array but not of function.
How to solve this Problem?:
-
You can update your angular versions (or packages that are trying to compile your angular2 code) to the new compiler output format. E.g. at least @angular/*@2.3.1. (If you are using angular-cli you should upgrade your project to [email protected])
-
You can lock the package you are using to a version that matches the old compiler output format. For angular2-mdl this is version 2.7.0. You can find this information here: https://github.com/mseemann/angular2-mdl#remarks.
Is it possible to use a package that was compiled with an older angular-compiler-cli with a newer angular-compiler-cli version? (e.g. you are at angular 2.4.1 and want to use [email protected]) Yes! This direction is backward compatible. See https://github.com/angular/angular/blob/master/modules/%40angular/core/src/reflection/reflection_capabilities.ts#L80