Mon projet angulaire actuel a commencé avant qu'angular ne prenne en charge la fonctionnalité AOT. Maintenant, j'essaie de le faire fonctionner. Je reçois l'erreur suivante et je n'ai aucune idée de ce que cela signifie et de l'endroit où je peux commencer à déboguer le problème. Quelqu'un at-il une idée pourquoi cette erreur se produit?
Les dépendances
"@angular/animations": "^4.4.4",
"@angular/common": "^4.4.4",
"@angular/compiler": "^4.4.4",
"@angular/core": "^4.4.4",
"@angular/forms": "^4.4.4",
"@angular/platform-browser": "^4.4.4",
"@angular/platform-browser-dynamic": "^4.4.4",
"@angular/router": "^4.4.4",
"@ngx-translate/core": "^8.0.0",
"@ngx-translate/http-loader": "^2.0.0",
"core-js": "^2.5.1",
"font-awesome": "^4.7.0",
"primeng": "^4.2.1",
"quill": "^1.3.2",
"rxjs": "^5.4.3",
"zone.js": "^0.8.18"
Erreur
ERROR in Error: Internal error: unknown identifier undefined
at Object.importExpr$$1 [as importExpr] (...\node_modules\@angular\compiler\bundles\compiler.umd.js:24211:23)
at tokenExpr (...\node_modules\@angular\compiler\bundles\compiler.umd.js:18577:39)
at providerDef (...\node_modules\@angular\compiler\bundles\compiler.umd.js:18480:20)
at ...\node_modules\@angular\compiler\bundles\compiler.umd.js:18697:77
at Array.map (<anonymous>)
at NgModuleCompiler.compile (...\node_modules\@angular\compiler\bundles\compiler.umd.js:18697:44)
at AotCompiler._compileModule (...\node_modules\@angular\compiler\bundles\compiler.umd.js:24144:32)
at ...\node_modules\@angular\compiler\bundles\compiler.umd.js:24056:66
at Array.forEach (<anonymous>)
at AotCompiler._compileImplFile (...\node_modules\@angular\compiler\bundles\compiler.umd.js:24056:19)
at ...\node_modules\@angular\compiler\bundles\compiler.umd.js:23969:87
at Array.map (<anonymous>)
at AotCompiler.emitAllImpls (...\node_modules\@angular\compiler\bundles\compiler.umd.js:23969:52)
at CodeGenerator.emit (...\node_modules\@angular\compiler-cli\src\codegen.js:42:46)
at ...\node_modules\@angular\compiler-cli\src\codegen.js:33:61
at <anonymous>
at process._tickCallback (internal/process/next_tick.js:188:7)
Cette partie de l'application est à l'origine du problème:
export function windowFactory(): any {
return window;
}
providers: [{
provide: Window,
useFactory: windowFactory
}],
Juste pour être complet puisque je suis tombé sur la même erreur dans un contexte différent. L'erreur s'est produite dans ma construction lors de l'utilisation d'une classe de service angularjs mise à niveau exportée au format default
.
// Service definition
export default class MyService { /* Registered AngularJS service here */ }
// Module
import MyService from './my-service'
// Upgrade
export function myServiceFactory(i:any) {
return i.get('myService');
}
// ngUpgraded Angular main module
@NgModule({
providers: [
{ provide: MyService, useFactory: myServiceFactory, deps: ['$injector'] }
]
})
La suppression de l'exportation par défaut a résolu le problème.
J'ai rencontré la même erreur dans mon projet Angular 6.
lorsque vous exécutez "ng build --prod", lisez attentivement les messages d’avertissement. Dans quel fichier il envoie un message d’avertissement (par exemple: dataservice.ts).
puis allez dans ce fichier (dataService.ts) et supprimez le @Injectable.
@Injectable({
providedIn: 'root'
})
Ensuite, essayez de reconstruire. Ça marche pour moi.
Avait la même erreur en essayant de fournir la date d'injection au lieu d'un jeton d'injection.
Alors j'ai fait:
providers: [
{ provide: Date, useValue: new Date() }
]
et l'a changé en
providers: [
{ provide: NOW, useValue: new Date() },
],
où NOW
est défini dans le service qui en dépend comme ceci
export const NOW = new InjectionToken<Date>('now');
Tous documentés sur le Angular site .
Pour moi, j'ai créé une classe de base pour mes services qui utilise HttpClient.
La classe de base et la sous-classe ont été marquées Injectable
.
J'ai supprimé Injectable
de la classe de base et le problème a été résolu.
En développant la réponse de im4ever, je suis tombé sur le même problème. Il n'est apparu que lors de la compilation lors de la configuration, pas sur ng serve
ou simplement ng build
, ce qui m'a amené à penser qu'il s'agit d'un problème lié à AOT.
Lors de l'enregistrement d'un service à l'aide d'une méthode d'usine, ce que je faisais pour pouvoir injecter localStorage, la configuration de mon module était la suivante (raccourci par souci de concision).
providers: [
{provide: StateService, useFactory: provideStateService}
],
Ce que j'ai fait pour résoudre le problème a été de supprimer le décorateur @Injectable({})
que je aussi avais dans la définition de classe StateService
. Une fois que j'ai enlevé cela, toutes les erreurs ont disparu.
Vérifiez vos modèles. Peut-être avez-vous utilisé une variable dans le modèle qui n'est pas définie dans le composant
Avait ce problème lors de l'exécution de ng build --prod pour Angular 7.1.4, j'ai donc supprimé le @Injectable recommandé par Karthi Coimbatore pour un TooltipService créé afin d'utiliser les positions de Angular Material.