Échec de la compilation.
./src/app/hero.service.ts Module introuvable: Erreur: Impossible de résoudre le problème 'rxjs/Observable/of' dans 'C:\Utilisateurs\Admin\angulaires\myheroes\src\app'
@ ./src/app/hero.service.ts 13:11-40 @ ./src/app/app.module.ts @ ./src/main.ts @ multi webpack-dev-server/client?http://0.0.0.0:0 ./src/main.ts
mon code pour hero.service.ts
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs';
import { of } from 'rxjs/Observable/of';
import { Hero } from './hero';
import { HEROES } from './mock-heroes';
import { MessageService } from './message.service';
@Injectable()
export class HeroService {
constructor(private messageService: MessageService) { }
getHeroes(): Observable<Hero[]>
{
// todo: send the message _after_fetching the heroes
this.messageService.add('HeroService: fetched heroes');
return of (HEROES);
}
}
Généralement, votre projet contient un fichier appelé rxjs-operators.ts
qui importe les parties de rxjs
dont vous avez besoin. Vous devriez ajouter cette ligne à ce fichier:
import 'rxjs/add/observable/of';
Sortez aussi cette ligne:
import { of } from 'rxjs/observable/of';
Vous pouvez également l'importer directement dans votre module pour voir si cela fonctionne.
J'ai eu cette erreur à cause d'une ancienne version de rxjs et Angular 6 a besoin de la dernière version de rxjs.
Cette commande installe la dernière version compatible avec Angular 6.
npm install --save rxjs-compat
Comme l'a souligné Aravind dans ses commentaires, l'affaire est importante ici. Au lieu de
import { of } from 'rxjs/Observable/of';
essayer...
import { of } from 'rxjs/observable/of'; // note the lower-cased 'o' on 'observable'
Pour ceux d’entre vous qui sont en vie au 13 juillet, la manière correcte d’importer le module de est la suivante:
import { Observable, of } from 'rxjs';
Je suis à peu près sûr que, en raison des conventions de dénomination inappropriées pour accéder à un dossier O majuscule et à un dossier minuscule, ils l'ont inclus de manière plus globale.
Remarque: CECI IS THE BLEEDING Edge. ;)
J'ai le même problème et j'ai résolu le problème comme suit ...
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/observable/of';
Où est utilisé:
Observable.of(something)
Remarque: Il est important de toujours regarder dans npm rxjs . Vous y trouverez la documentation de la version actuelle.
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs/Observable';
import { of } from 'rxjs/observable/of';
import { Hero } from './hero';
import { HEROES } from './mock-heroes';
Assurez-vous toujours que l'ordre de référencement des fichiers doit être dans le bon ordre.
J'ai la même erreur pour angular/core et rxjs . C'est ainsi que je résous le problème, en disant explicitement au compilateur où trouver la bibliothèque:
"compilerOptions": {
"paths": {
"@angular/*": ["../../node_modules/@angular/*"],
"rxjs/*": ["../../node_modules/rxjs/*"]
},
}
Dans mon cas, j'ai eu l'erreur à cause du chemin de rxjs dans webpack.config.js .
J'ai créé le projet sous le lecteur C avec angular-cli et j'ai utilisé ng eject
pour éjecter le projet et générer le webpack.config.js .
En fait angular-cli injecte un chemin absolu pour rxjs comme ci-dessous:
"alias": {
"rxjs/observable/of": "C:\\my_project_directory\\node_modules\\rxjs\\_esm5\\observable\\of.js"
...}
Après l'avoir corrigé manuellement sur un chemin relatif
"alias": {
"rxjs/observable/of": "rxjs\\_esm5\\observable\\of.js"
.. }
Cela a commencé à fonctionner.
Les réponses à cette question sont contradictoires, la question est bonne, mais aucune réponse n’aide réellement.
Tout a à voir avec le changement de l'API de Rxjs depuis la version 6.0
Les réponses ici sont confuses à cause des différentes versions de RxJs, c'est le problème. Une réponse commençant ou se terminant par: "Cela fonctionne pour moi" est inutile, car ce n'est pas une réponse, c'est un exemple de la façon dont cela pourrait fonctionner, mais vous n'avez jamais toute l'histoire, alors c'est inutile car cela n'explique rien .
Tout est très bien expliqué ici: https://academind.com/learn/javascript/rxjs-6- what-changed/ Si vous disposez de 12 minutes, cela est également bien expliqué dans cette Youtube: https://www.youtube.com/watch?v=X9fdpGthrXA
Je sais que les liens externes ne sont pas appréciés dans StackOverflow, et pour cause, et même s’il n’est pas très difficile de savoir, c’est une bonne explication pour une réponse courte et utile.
En résumé, le problème est lié aux différences entre l’API de Rxjs avant la version 6.0 et depuis RxJs 6.0 Si vous souhaitez conserver le code antérieur à la version 6.0, vous devez installer rxjs-compat, il mal
Le mieux est de changer le code, d’avoir un code à jour et prêt pour l’avenir.