Невозможно найти модуль './in-memory-data-service' в гастролях героев для Angular2

Я пытаюсь работать через Angular2 тур по приложениям для героев и нахожусь в ошибках в разделе информации из этого вопроса.

Однако на этом же шаге я также получаю следующую ошибку:

app/app.module.ts(10,38): error TS2307: Cannot find module './in-memory-data-service'.

Я проверил triple, и я считаю, что и мой файл in-memory-data-service.ts, и мой файл app.module.ts точно такие же, как указано в учебнике (в этот конкретный момент времени).

В настоящий момент мой файл in-memory-data-service.ts выглядит следующим образом:

CODE:

import { InMemoryDbService } from 'angular2-in-memory-web-api';
export class InMemoryDataService implements InMemoryDbService {
createDb() {
let 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 выглядит следующим образом:

CODE:

import './rxjs-extensions';

import { NgModule }             from '@angular/core';
import { BrowserModule }        from '@angular/platform-browser';
import { FormsModule }          from '@angular/forms';
import { HttpModule }           from '@angular/http';

//Imports for loading & configuring the in-memory web API
import { InMemoryWebApiModule } from 'angular2-in-memory-web-api';
import { InMemoryDataService }  from './in-memory-data-service';

import { AppComponent }         from './app.component';
import { DashboardComponent }   from './dashboard.component';
import { HeroesComponent }      from './heroes.component';
import { HeroDetailComponent }  from './hero-detail.component';
import { HeroService }          from './hero.service';
import { routing }              from './app.routing';

@NgModule({
  imports:        [
                    BrowserModule,
                    FormsModule,
                    HttpModule,
                    InMemoryWebApiModule.forRoot(InMemoryDataService),
                    routing
                  ],
  declarations:   [
                    AppComponent,
                    DashboardComponent,
                    HeroDetailComponent,
                    HeroesComponent
                  ],
  providers:      [
                    HeroService
                  ],
bootstrap:        [ AppComponent ]
})

export class AppModule {
}

Я не уверен, что это связано с какой-либо зависимостью в package.json или systemjs.config, которые не установлены надлежащим образом, или если есть простая ошибка, которую я помогаю.

ИЗМЕНИТЬ

Мой файл systemjs.config.js выглядит следующим образом:

CODE:

(function (global) {
System.config({
paths: {
  // paths serve as alias
  'npm:': 'node_modules/'
},
// map tells the System loader where to look for things
map: {
  // our app is within the app folder
  app: 'app',
  // angular bundles
  '@angular/core': 'npm:@angular/core/bundles/core.umd.js',
  '@angular/common': 'npm:@angular/common/bundles/common.umd.js',
  '@angular/compiler': 'npm:@angular/compiler/bundles/compiler.umd.js',
  '@angular/platform-browser': 'npm:@angular/platform-browser/bundles/platform-browser.umd.js',
  '@angular/platform-browser-dynamic': 'npm:@angular/platform-browser-dynamic/bundles/platform-browser-dynamic.umd.js',
  '@angular/http': 'npm:@angular/http/bundles/http.umd.js',
  '@angular/router': 'npm:@angular/router/bundles/router.umd.js',
  '@angular/forms': 'npm:@angular/forms/bundles/forms.umd.js',
  // other libraries
  'rxjs':                       'npm:rxjs',
  'angular2-in-memory-web-api': 'npm:angular2-in-memory-web-api',
},
// packages tells the System loader how to load when no filename and/or no extension
packages: {
  app: {
    main: './main.js',
    defaultExtension: 'js'
  },
  rxjs: {
    defaultExtension: 'js'
  },
  'angular2-in-memory-web-api': {
    main: 'index.js',
    defaultExtension: 'js'
  }
}
});
})(this);

В настоящее время моя файловая структура выглядит следующим образом:

Структура файла:

app/app.module.ts
app/in-memory-data-service.ts

index.html
systemjs.config.js

Спасибо.

Ответ 1

Просто убедитесь, что все ваши базы закрыты

В package.json должен соответствовать файл эта страница.

"angular-in-memory-web-api": "~0.1.1",

Кроме того, ваш файл systemjs.config тоже выглядит хорошо!

В app.module.ts убедитесь, что ваш in-memory-data-service импорт совпадает с вашим файлом, потому что в их примере они имеют in-memory-data.service

// Imports for loading & configuring the in-memory web api
import { InMemoryWebApiModule } from 'angular-in-memory-web-api';
import { InMemoryDataService }  from './in-memory-data-service'; // <-- Make sure this matches the file name

Таким образом, ваш файл должен иметь имя in-memory-data-service.ts. Мне кажется, что существует опечатка имен или какая-то проблема с файловой структурой.

Похоже, вы решили проблему package.json, и ошибка, которую вы получаете, говорит о том, что она не может найти этот модуль, теперь это может быть потому, что у вас есть опечатка в имени файла или пути в файл неверно в строке импорта.

Ответ 2

Мои проекты, созданные с использованием текущих инструментов CLI, и я установил это:

npm install angular-in-memory-web-api --save

Это работает для меня.

Ответ 3

ng generate service InMemoryData --module=app

Создает файл src/app/in-memory-data.service.ts. Затем добавьте код, указанный в учебнике, и он будет работать. AFAIK они даже не подразумевают, что в учебнике так не плохо. На самом деле то, что они говорят,

Метод конфигурации forRoot() принимает класс InMemoryDataService, который содержит базу данных в памяти.

Образец Tour of Heroes создает такой класс src/app/in-memory-data.service.ts

Что такое бред и неправильный.

Ответ 4

Для учения Angular5 и angular [email protected]:

Добавьте новый файл "in-memory-data.service.ts" в корневую директорию с этим содержимым:

import { InMemoryDbService } from 'angular-in-memory-web-api';

export class InMemoryDataService  implements InMemoryDbService {
createDb() {
    let heroes = [
        { id: 1, name: 'Windstorm' },
        { id: 2, name: 'Bombasto' },
        { id: 3, name: 'Magneta' },
        { id: 4, name: 'Tornado' }
    ];
    return { heroes };
}
}

Ответ 5

Сделайте это глобально, используйте sudo, если у вас есть проблемы с правами.

npm install -g angular-in-memory-web-api