web-dev-qa-db-fra.com

ERREUR dans ** n'est pas un NgModule

J'ai ce NgModule:

@NgModule({
    imports: [
        CommonModule
    ],
    exports: [
        SP21LoadingBar
    ],
    declarations: [SP21LoadingBar]
})
export class SP21LoadingBarModule { }

La cliente me dit 

ERROR in SP21LoadingBarModule is not an NgModule

S'il vous plaît noter: Si je prends le code et le mettre dans mon projet, il fonctionne bien. Mais dès que je retire le module (et le composant) de mon projet et le mets dans un paquet npm, je reçois cette erreur.

Angular est utilisé dans 2.3.1, Angular CLI 1.0.0-beta.24, TypeScript 2.0.10

9
Stefan S

La solution finale:

Vous devez compiler votre bibliothèque à l'aide du compilateur Ahead-Of-Time (ngc). Cela ajoutera des métadonnées qui vont au projet qui inclut la bibliothèque pour le lire.

Veuillez consulter les liens suivants:

https://angular.io/docs/ts/latest/cookbook/aot-compiler.htmlhttps://medium.com/@cyrilletuzi/how-to-build-and-publish -an-angular-module-7ad19c0b4464 # .9y88ipdk7

4
Lupe

Vous devez utiliser ngc (@ angular/compiler-cli) pour compiler votre bibliothèque, par opposition à utiliser tsc directement. Est-ce le cas pour vous?

1
Jose Enrique

J'ai passé 2 jours sur ce problème. Ajouter 

"angularCompilerOptions": {
    "skipTemplateCodegen": true
}

à votre tsconfig.json et il créera tous les fichiers de métadonnées nécessaires. Ça marche pour moi.

0
Mher Aghabalyan

Cela fonctionne en utilisant les dépendances suivantes:

{
  "dependencies": {
    "@angular/common": "^2.3.1",
    "@angular/compiler": "^2.3.1",
    "@angular/core": "^2.3.1",
    "@angular/forms": "^2.3.1",
    "@angular/http": "^2.3.1",
    "@angular/material": "^2.0.0-beta.0",
    "@angular/platform-browser": "^2.3.1",
    "@angular/platform-browser-dynamic": "^2.3.1",
    "@angular/router": "^3.3.1",
    "@angular2-material/button": "^2.0.0-alpha.8-2",
    "@angular2-material/card": "^2.0.0-alpha.8-2",
    "@angular2-material/checkbox": "^2.0.0-alpha.8-2",
    "@angular2-material/core": "^2.0.0-alpha.8-2",
    "@angular2-material/icon": "^2.0.0-alpha.8-2",
    "@angular2-material/radio": "^2.0.0-alpha.8-2",
    "@angular2-material/slider": "^2.0.0-alpha.8-2",
    "@angular2-material/tooltip": "^2.0.0-alpha.8-2",
    "@types/google-maps": "3.1.28",
    "angular-sample-module": "^0.1.2",
    "angular2-highcharts": "^0.3.3",
    "atob": "^2.0.3",
    "autopulous-xdom": "^1.0.4",
    "bootstrap": "^3.3.7",
    "btoa": "^1.1.2",
    "core-js": "^2.4.1",
    "hammerjs": "^2.0.8",
    "highcharts": "^5.0.0",
    "jszip": "^3.1.3",
    "ng2-bootstrap": "^1.1.16-9",
    "primeng": "^1.0.1",
    "rxjs": "^5.0.1",
    "ts-helpers": "^1.1.1",
    "xml2js": "0.4.17",
    "xml2js-es6-promise": "1.1.1",
    "zone.js": "^0.7.2"   },   "devDependencies": {
    "@angular/compiler-cli": "^2.3.1",
    "@types/hammerjs": "^2.0.33",
    "@types/jasmine": "2.5.38",
    "@types/jszip": "0.0.31",
    "@types/node": "^6.0.62",
    "@types/pako": "^0.2.31",
    "@types/xml2js": "0.0.32",
    **"angular-cli": "1.0.0-beta.21",**
    "angular-ide": "^0.9.10",
    "codelyzer": "~2.0.0-beta.1",
    "jasmine-core": "2.5.2",
    "jasmine-spec-reporter": "2.5.0",
    "karma": "1.2.0",
    "karma-chrome-launcher": "^2.0.0",
    "karma-cli": "^1.0.1",
    "karma-jasmine": "^1.0.2",
    "karma-remap-istanbul": "^0.2.1",
    "protractor": "~4.0.13",
    "ts-node": "1.2.1",
    "tslint": "^4.0.2",
    "TypeScript": "~2.0.3"   }
}

Je dirais que le problème concerne les dernières versions de la CLI Angular. De plus, le projet dans lequel le module HelloWorld est défini (la bibliothèque) n'est pas construit à l'aide de la CLI Angular. Je l'ai créé à partir de l'exemple suivant: https://www.npmjs.com/package/angular-sample-module

Néanmoins, le message the "is not a NgModule" apparaît lorsque les versions de Angular de la CLI sont plus volumineuses que [email protected]

0
Lupe