Angular2 チュートリアル(Heroes Tour)で発生する「モジュール 'angular2-in-memory-web-api' が見つかりません」エラーの解決方法
Angular2 チュートリアル(Heroes Tour)におけるエラー「モジュール 'angular2-in-memory-web-api' が見つかりません」の解決方法
このエラーは、Angular2 チュートリアル「Heroes Tour」において、angular2-in-memory-web-api
モジュールをインポートしようとすると発生します。このモジュールは、開発中に実際のサーバーを使用せずに、模擬的な API を提供するために使用されます。
解決方法
このエラーを解決するには、以下の2つの方法があります。
方法1:angular2-in-memory-web-api
モジュールのインストール
- ターミナルで以下のコマンドを実行して、
angular2-in-memory-web-api
モジュールをインストールします。
npm install angular2-in-memory-web-api
- インストールが完了したら、以下のコマンドを実行して、アプリケーションを再起動します。
ng serve
方法2:InMemoryDataService
サービスを自作する
app/in-memory-data-service.ts
という新しいファイルを作成します。- 以下のコードを
in-memory-data-service.ts
ファイルに貼り付けます。
import { Injectable } from '@angular/core';
import { Hero } from './hero';
@Injectable({
providedIn: 'root'
})
export class InMemoryDataService {
createDb(): {heroes: Hero[]} {
const heroes = [
{ id: 11, name: 'Mr. Nice' },
{ id: 12, name: 'Narco' },
{ id: 13, name: 'Bombasto' },
{ id: 14, name: 'Celeritas' },
{ id: 15, name: 'Magneta' },
{ id: 16, name: 'RubberMan' },
{ id: 17, name: 'Dynama' },
{ id: 18, name: 'Dr. IQ' },
{ id: 19, name: 'Magma' },
{ id: 20, name: 'Tornado' }
];
return { heroes };
}
}
app.module.ts
ファイルを開き、以下のコードを追加します。
import { HttpClientModule } from '@angular/common/http';
import { InMemoryDataService } from './in-memory-data-service';
// ...
providers: [
// ...
{ provide: HTTP_INTERCEPTORS, useClass: AuthInterceptor, multi: true },
{ provide: InMemoryDataService, useClass: InMemoryDataService }
],
- 以下のコマンドを実行して、アプリケーションを再起動します。
ng serve
- 方法2は、より複雑ですが、より柔軟なモック API を作成することができます。
- 方法1は、より簡単ですが、
angular2-in-memory-web-api
モジュールに依存することになります。
- 上記の解決方法で問題が解決しない場合は、以下の情報を追加で提供してください。
- 使用している IDE
- 使用しているオペレーティングシステム
- エラーメッセージの詳細
import { Injectable } from '@angular/core';
import { Hero } from './hero';
@Injectable({
providedIn: 'root'
})
export class InMemoryDataService {
createDb(): {heroes: Hero[]} {
const heroes = [
{ id: 11, name: 'Mr. Nice' },
{ id: 12, name: 'Narco' },
{ id: 13, name: 'Bombasto' },
{ id: 14, name: 'Celeritas' },
{ id: 15, name: 'Magneta' },
{ id: 16, name: 'RubberMan' },
{ id: 17, name: 'Dynama' },
{ id: 18, name: 'Dr. IQ' },
{ id: 19, name: 'Magma' },
{ id: 20, name: 'Tornado' }
];
return { heroes };
}
}
app.module.ts
import { HttpClientModule } from '@angular/common/http';
import { InMemoryDataService } from './in-memory-data-service';
// ...
providers: [
// ...
{ provide: HTTP_INTERCEPTORS, useClass: AuthInterceptor, multi: true },
{ provide: InMemoryDataService, useClass: InMemoryDataService }
],
使用方法
app/in-memory-data-service.ts
ファイルに上記のコードを貼り付けます。
{ provide: InMemoryDataService, useClass: InMemoryDataService }
ng serve
このコードにより、angular2-in-memory-web-api
モジュールに依存することなく、模擬的な API を作成することができます。
Hero
インターフェースは、以下のプロパティを持つ必要があります。id
:英雄の IDname
:英雄の名前
heroes
プロパティは、Hero
インターフェースの配列である必要があります。createDb()
メソッドは、模擬的な API データを返すオブジェクトを返す必要があります。
他の方法
方法3:ng serve
コマンドに --proxy-config
オプションを使用する
- 以下のコマンドを実行して、
proxy-config.json
という新しいファイルを作成します。
ng config proxy-config proxy-config.json
proxy-config.json
ファイルを開き、以下のコードを貼り付けます。
{
"/api": {
"target": "http://localhost:3000",
"secure": false,
"changeOrigin": true,
"logLevel": "debug"
}
}
ng serve --proxy-config=proxy-config.json
方法4:ng build
コマンドに --aot
オプションを使用する
ng build --aot
ng build --output-path=dist/my-app
serve dist/my-app
- 方法5は、ビルドされたアプリケーションを別のディレクトリに配置する場合に便利です。
- 方法4は、AOT コンパイルを使用すると、パフォーマンスが向上する場合があります。
- 方法3は、本番環境用のプロキシサーバーを設定する場合に便利です。
angular import angular-tour-of-heroes